【发布时间】:2013-05-23 07:04:39
【问题描述】:
我正在制作地图,我需要在其中显示距用户 GEO 坐标最近的位置。这些最近的位置应在 1 公里或用户指定的半径范围内。
我没有运行查询并计算数据库中所有地理坐标的距离,而是通过选择国家 - 州 - 城市来缩小选择范围。但是我仍然没有发现这种方式更有效。
有人可以建议我解决这个问题的更好方法吗?
【问题讨论】:
标签: algorithm geolocation latitude-longitude
我正在制作地图,我需要在其中显示距用户 GEO 坐标最近的位置。这些最近的位置应在 1 公里或用户指定的半径范围内。
我没有运行查询并计算数据库中所有地理坐标的距离,而是通过选择国家 - 州 - 城市来缩小选择范围。但是我仍然没有发现这种方式更有效。
有人可以建议我解决这个问题的更好方法吗?
【问题讨论】:
标签: algorithm geolocation latitude-longitude
您正在寻找的是基于坐标的 Haversine 公式。您必须使用 Haversine 比较位置坐标和兴趣点之间的距离。然后,如果结果低于阈值(1 公里),则显示兴趣点。
【讨论】:
如果您需要使用坐标快速且相当准确地估计距离,请参阅此Wikipedia article。
【讨论】:
我建议您计算最大和最小纬度以及最大和最小经度,以便所有在各自最小和最大之间具有纬度和经度的点都位于以当前点为中心的 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 公里,但是如果答案需要准确,您可以计算出该广场内每个点的确切距离。注意:很多余弦函数采用弧度而不是度数,因此请确保单位正确!
【讨论】: