代码之家  ›  专栏  ›  技术社区  ›  MattC

大容量定位地理编码策略

  •  1
  • MattC  · 技术社区  · 15 年前

    我有一个应用程序,它使用谷歌地图API来对lat/长对之间的距离进行地理编码,以此来在手机上显示你身边的人(目前是Android,在iPhone上工作)。问题是,即使有40个用户的测试组,我们也要花费10秒以上的时间来进行计算,并将结果发送回用户。虽然10秒听起来时间很长,但就客户端应用程序而言,这并不是真正的问题,因为它不是对用户位置的实时更新(更新每隔几分钟进行一次)。显然,这是一个问题,因为我们显然希望增加到数万甚至数十万用户。我很好奇在这个领域中是否还有其他人有过使用谷歌地图API计算大量数据点之间距离的经验?

    顺便说一句,我们在服务器上使用Rails,这是所有位置计算都发生的地方。手机只显示地图,并用lat/long坐标更新服务器。

    3 回复  |  直到 15 年前
        1
  •  1
  •   revgum    15 年前

    偷看 Geokit 它是一个RubyGem和Rails插件,可以做你想要做的事情等等,我想你也会很满意它的速度和功能。

        2
  •  3
  •   Nikolai Ruhe    15 年前

    当你已经有了lat/lon坐标时,你不需要谷歌地图API来计算距离。计算 great-circle distance 可以使用哈弗斯汀或文森蒂配方。

    编辑: 如果我正确理解您的问题(在10000条记录中找到一个给定位置附近的位置),我只能建议为此使用一些地理库。当有更多的请求进入时,计算10公里的距离是一个坏主意。你一定要研究更智能的算法(四叉树似乎很实用)。

        3
  •  1
  •   Brett    15 年前

    如果要覆盖特定区域,在进行任何计算之前,您可能需要考虑将lat long转换为局部等距投影。或者更简单地说,如果覆盖全局区域,将lat long转换为两个最近的utm区域,存储两组x y坐标和两个utm区域ID。然后,您可以首先选择UTM区域匹配上的记录,然后使用第二个投影坐标对该子集进行计算(这比计算从lat long到lat long的距离要快得多)。