如何查询纬度/经度区域内的所有记录?

Ste*_*ins 3 mysql latitude-longitude

我期待创建一个MySQL查询,查找世界指定区域内的所有记录.每个记录包含一个点(lat/lon),我有指定区域的右上角(lat/lon)和左下角(lat/lon).

有了这些信息,我该如何找到合适的记录?

Cro*_*tab 6

LAT1 = MIN(右上角,左下角)

LAT2 = MAX(右上拉,左下拉)

LON1 = MIN(右上lon,左下lon)

LON2 = MAX(右上lon,左下lon)

SELECT fields
FROM points
WHERE lat BETWEEN LAT1 AND LAT2
AND lon BETWEEN LON1 AND LON2
Run Code Online (Sandbox Code Playgroud)

这样,如果您将Prime Meridian或赤道与您的盒子交叉,查询应该处理.

要处理第180个子午线(或反子午线),您需要将右侧线圈与左侧线圈进行比较,检查右侧数字是否为负数,左侧数字是否为正数.如果是这样,那么你已经越过了第180个子午线.您的查询必须看起来像这样:

SELECT fields
FROM points
WHERE lat BETWEEN LAT1 AND LAT2
AND (lon BETWEEN -180 AND LON1 OR lon BETWEEN LON2 AND 180)
Run Code Online (Sandbox Code Playgroud)

不过,我宁可不去想如何处理一个位于行星顶部或底部的盒子.=)

  • 我没有做一个覆盖其中一个杆.:P (2认同)