【问题标题】:Show nearest locations which are in user specified radius from user lat/long显示距用户纬度/经度在用户指定半径内的最近位置
【发布时间】:2013-05-23 07:04:39
【问题描述】:

我正在制作地图,我需要在其中显示距用户 GEO 坐标最近的位置。这些最近的位置应在 1 公里或用户指定的半径范围内。

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

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

【问题讨论】:

    标签: algorithm geolocation latitude-longitude


    【解决方案1】:

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

    【讨论】:

    • 对于这么小的距离(1 公里),您可以使用平面地球方程而不是Haversine。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我建议您计算最大和最小纬度以及最大和最小经度,以便所有在各自最小和最大之间具有纬度和经度的点都位于以当前点为中心的 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 公里,但是如果答案需要准确,您可以计算出该广场内每个点的确切距离。注意:很多余弦函数采用弧度而不是度数,因此请确保单位正确!

      【讨论】:

      • 我不明白你的意思,你已经做了 2km x 2km。您能否更笼统地解释一下。谢谢
      • 2km x 2km 以你的当前点为中心意味着正方形的每一边都将距当前点 1 公里。这有意义吗?
      猜你喜欢
      • 2012-12-29
      • 2016-02-04
      • 1970-01-01
      • 1970-01-01
      • 2011-06-12
      • 2023-03-06
      • 1970-01-01
      • 2012-11-09
      • 1970-01-01
      相关资源
      最近更新 更多