如何匹配用户与最近的地址


how to match users with nearest addresses?

我正在做一个网站,每个用户输入他的地址,网站将匹配每个人与最接近的人,我嵌入谷歌地图API的方向,但网站如何匹配用户?

如果你能给我一些例子或任何策略,可以帮助我达到目标?

您可以学习如何获取经纬度:使用php, API自动获取经纬度

将每个用户的lat/long存储在数据库中的数据中。

另外,存储每个用户的COUNTRY是明智的——这样可以减少查询。强烈建议还存储区域数据,如ZIP/POSTAL,以进一步减少查询负载。

那么在你正在使用的任何php页面上,你都已经有了你正在搜索的用户的区域数据(如上所述)。使用该数据循环遍历同一ZIP/POSTAL区域内的所有其他成员并查询其存储的lat/long。

一旦您有了相同ZIP/POSTAL区域内其他人的时间/长度,您可以使用如下函数:http://snipplr.com/view/2531/

或者,您可以通过SQL语句执行很多这些,如https://stackoverflow.com/a/7672821/797620所述,但我从未自己测试过该语句。

这个页面在谷歌提供了另一个非常详细的方法,你可以试试:https://developers.google.com/maps/articles/phpsqlsearch_v3

这个问题需要PostgreSQL/POSTGIS的解决方案。将数据库存储在一个表中,必要时带有一些元信息。然后让神奇的POSTGIS完成它的事情。

PostgreSQL/Postgis优化了这些地理空间相关的查询!实际上,在新版本> 9.1中引入了k近邻操作符,它返回n个最近的邻居(因此得名):

SELECT * FROM your_table ORDER BY your_table.geom <-> "your location..." LIMIT 10

所以这很简单:)

"<->是一个"距离"操作符,但它只在ORDER BY子句中出现索引时才使用索引。在将操作符放入ORDER BY和使用LIMIT截断结果集之间,我们可以非常非常快地(在这种情况下,在2M记录表上不到10毫秒)获得离我们的测试点最近的10个点。"

点击这里阅读更多内容。