从用户lat / long显示用户指定半径的最近位置

时间:2013-05-28 10:34:09

标签: algorithm geolocation latitude-longitude

我在地图上工作,我需要从用户GEO坐标显示最近的位置。这些最近的位置应在1km或用户指定的半径范围内。

我没有运行查询并计算数据库中所有地理坐标的距离,而是通过选择国家/地区 - 城市来缩小选择范围。但是我仍然没有发现这种方式更有效率。

有人可以建议我解决这个问题的更好方法。

3 个答案:

答案 0 :(得分:1)

如果您需要使用坐标快速准确地估算距离,请参阅此Wikipedia article

答案 1 :(得分:1)

您正在寻找的是基于坐标的Haversine公式。您必须使用Haversine比较位置坐标和兴趣点之间的距离。然后,如果结果低于阈值(1km),则显示关注点。

答案 2 :(得分:0)

我建议您计算出最大和最小纬度以及最大和最小经度,以便在相应的最小值和最大值之间具有纬度和经度的所有点都位于以当前点为中心的2km x 2km的方格中。然后,您可以运行查询以选择最接近的地理位置。要做到这一点,你需要弄清楚一公里和一个纬度之间的比率,以及一公里和一个经度之间的比率。答案是

1 degree of latitude  = 6371000 * Math.PI / 180  metres 
1 degree of longitude = Cos(Latitude) * 6371000 * Math.PI / 180  metres

因为6371000是平均地球半径(米)。一些点(即在广场的角落)将超过1公里,但如果答案需要准确,那么您可以计算出该广场内每个点的精确距离。注意:很多余弦函数都需要弧度而不是度数,因此请确保单位正确!