-1

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

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

那么有什么技术可以让这个速度更快呢?是否可以过滤掉大部分经纬度差异的地址?或者他们是一种 API 方法,我可以给谷歌地图提供一长串地址并让它返回最近的地址?

4

2 回答 2

3

您应该做的是将商店添加到数据库时还包括它们的纬度/经度。这样,当用户输入他们的地址时,您只需要对他们的地址进行地理编码(获取纬度/经度),并使用 hasrsine 公式(这只是数学,因此运行速度很快)来获取最近的位置。

https://developers.google.com/maps/articles/phpsqlsearch_v3

您可以使用google geocoding api来获取/插入数据库中已有商店的纬度/经度。

我目前有一个定位器,它可以搜索数万家商店,并使用这种方法在一秒钟内执行。

于 2012-08-18T03:18:19.477 回答
1

不幸的是,谷歌地图 API 中没有这样的功能,您必须自己实现它。一个好的开始是存储位置地理位置和空间索引的 mysql 点数据类型。空间索引降低了维度复杂性并使最近邻查找变得简单。空间索引是 r 树和空间填充曲线,例如希尔伯特曲线。这是一篇关于希尔伯特曲线的好文章:http: //blog.notdot.net/2009/11/Damn-Cool-Algorithms-Spatial-indexing-with-Quadtrees-and-Hilbert-Curves。这是使用 mysql 的空间索引的示例:使用 mysql 表上的空间索引选择最近的地理坐标不起作用。这是一个mysql距离函数的例子使用 MySql 中的空间函数查找两个坐标之间距离的正确方法。这是 MySql 5.1 http://www.elevatedcode.com/articles/2009/03/06/speeding-up-location-based-searches/的示例。

于 2012-08-18T03:11:46.053 回答