目前我有一个使用Google Maps API来获取一个位置(商店)和其他位置(技术)列表之间距离的网络应用程序,因为它全部缓存在数据库中,它只需运行一次。但它第一次非常慢......
我现在需要做的是为客户建立一个前端,他们可以在他们的地址输入并找到最近的商店。由于存在商店的基调,尝试获取每个商店的地址并使用Google Maps API将其与客户地址进行比较将需要永远。
那么有哪些技术可以让它更快?是否有可能过滤掉大部分地址与lat和long的差异?或者,他们是一种API方法,我可以为谷歌地图提供一长串地址并让它返回最近的地址?
答案 0 :(得分:3)
您应该做的是将数据库添加到数据库时还包括他们的lat / lngs。这样,当用户输入他们的地址时,你只需要对他们的地址进行地理编码(获取lat / lng),并使用hasrsine公式(这只是数学运算,以便快速运行)来获得最近的位置。
https://developers.google.com/maps/articles/phpsqlsearch_v3
您可以使用google geocoding api来获取/插入数据库中已有商店的纬度/经度。
我目前有一个定位器,可以搜索成千上万的商店,并使用这种方法在一秒钟内执行。
答案 1 :(得分:1)
不幸的是,Google Maps API中没有这样的功能,您必须自己实现它。一个好的开始是用于存储位置地理位置和空间索引的mysql点数据类型。空间索引降低了维度复杂性,使最近邻查找变得简单。空间索引是r树和空间填充曲线,例如希尔伯特曲线。这是一篇关于希尔伯特曲线的好文章:http://blog.notdot.net/2009/11/Damn-Cool-Algorithms-Spatial-indexing-with-Quadtrees-and-Hilbert-Curves。以下是mysql的空间索引示例:Selecting nearest geo coordinates using spatial index on mysql table not working。以下是mysql距离函数Correct way of finding distance between two coordinates using spatial function in MySql的示例。以下是MySql 5.1 http://www.elevatedcode.com/articles/2009/03/06/speeding-up-location-based-searches/的示例。