如何使“最近”的位置快速(呃)?

时间:2012-08-18 03:06:17

标签: php mysql maps

目前我有一个使用Google Maps API来获取一个位置(商店)和其他位置(技术)列表之间距离的网络应用程序,因为它全部缓存在数据库中,它只需运行一次。但它第一次非常慢......

我现在需要做的是为客户建立一个前端,他们可以在他们的地址输入并找到最近的商店。由于存在商店的基调,尝试获取每个商店的地址并使用Google Maps API将其与客户地址进行比较将需要永远。

那么有哪些技术可以让它更快?是否有可能过滤掉大部分地址与lat和long的差异?或者,他们是一种API方法,我可以为谷歌地图提供一长串地址并让它返回最近的地址?

2 个答案:

答案 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/的示例。