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

时间:2011-10-27 18:29:23

标签: mysql latitude-longitude

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

有了这些信息,我怎样才能找到合适的记录?

2 个答案:

答案 0 :(得分:6)

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

LAT2 = MAX(右上角lat,左下角)

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

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

SELECT fields
FROM points
WHERE lat BETWEEN LAT1 AND LAT2
AND lon BETWEEN LON1 AND LON2

这样,如果你将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)
但是,我宁愿不考虑如何处理一个位于行星顶部或底部的盒子。 =)

答案 1 :(得分:-1)

只需查看小于右边缘且大于左边缘的所有点,小于下边缘且大于上边缘。

指向4,4并且您的右上角是(5,5)并且左下角是(3,3) - 对于x是3 <4 <5并且对于y是3 <4 <5。你有一场比赛。