我有一个应用程序使用Google Maps API对纬度/长度对之间的距离进行地理编码,以便在手机上显示靠近您的人(目前是Android,在iPhone上工作)。问题在于,即使有40个用户的测试组,我们也需要花费10秒钟来完成计算并将结果发送回用户。虽然10秒听起来很长时间,但就客户端应用而言,这并不是一个问题,因为它不是人们位置的实时更新(更新每隔几分钟发生一次)。显然这是一个问题,因为我们显然喜欢增加到数十甚至数十万用户。我很好奇是否有其他人在使用Google Maps API计算大量数据点之间的距离方面有任何经验?
另外,我们在服务器上使用Rails,这是所有位置计算正在进行的地方。手机只显示地图并用纬度/经度坐标更新服务器。
答案 0 :(得分:3)
当您已经拥有lat / lon坐标时,您不需要使用Google Maps API来计算距离。可以使用hasrsine或vincenty公式计算great-circle distance。
编辑:如果我正确理解您的问题(在10,000条记录中找到一个指定位置的近距离位置),我建议您只为此目的使用一些地理库。当有更多请求进入时,计算10k距离是一个坏主意。你一定要研究更智能的算法(四叉树似乎很实用)。
答案 1 :(得分:2)
看看Geokit,它是一个Ruby Gem和Rails插件,可以做你想要的更多,我想你也会对速度和功能感到非常满意。
答案 2 :(得分:1)
如果覆盖特定区域,在进行任何计算之前,您可能需要考虑将lat long转换为局部等距投影。或者更简单地说,如果覆盖全局区域,将lat long转换为两个最近的UTM区域,存储两组X Y坐标和两个UTM区域ID。然后,您可以先选择UTM区域匹配的记录,然后使用第二个投影坐标对该子集进行计算(这将比计算lat长度的距离快得多)。