【问题标题】:How to make "get closest" location fast(er)?如何更快地“获得最近”的位置)?
【发布时间】:2012-08-18 18:31:37
【问题描述】:

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

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

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

【问题讨论】:

  • 您如何调用 Google Maps API?如果您不使用 cURL,您可能需要考虑它 - 它可能会使您的出站请求更快。
  • 是的,使用 CURL,但是几千个 HTTP 请求不管你如何削减它,都需要一段时间

标签: php mysql maps


【解决方案1】:

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

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

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

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

【讨论】:

【解决方案2】:

很遗憾,Google 地图 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/ 的示例。

【讨论】:

  • 我没有看到任何空间索引的示例。这个页面是关于 Harvesine 公式的?
  • GIS 支持虽然存在于 MySQL 中,但不如带有 PostGIS 的 Postgres 好。它的功能至少落后了几年。虽然 MySQL 是一个非常优秀的通用数据库,但它在这方面却明显较弱。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
  • 1970-01-01
  • 2019-08-26
  • 2011-04-24
  • 2018-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多