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

时间:2013-04-03 23:22:59

标签: php mysql google-maps geolocation geocoding

我正在建立一个网站,每个用户都会将自己的地址和网站与最近的人匹配,我为方向嵌入了Google地图API,但该网站如何与用户匹配?

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

2 个答案:

答案 0 :(得分:1)

您可以在Get latitude and longitude automatically using php, API

了解如何获取纬度/经度

将每个用户的纬度/经度存储在数据库中的数据中。

此外,存储每个用户的COUNTRY是明智的 - 这样您的查询就会减少。强烈建议还存储ZIP / POSTAL等区域数据,以进一步减少查询负担。

然后,在您使用的任何php页面上,您将拥有您正在搜索的用户的区域数据(如上所述)。使用该数据循环遍历同一ZIP / POSTAL区域内的所有其他成员并查询其存储的纬度/经度。

在同一个ZIP / POSTAL区域中有其他人的纬度/长度后,您可以使用以下函数:http://snipplr.com/view/2531/

或者,您可以通过SQL语句执行大量此操作,如https://stackoverflow.com/a/7672821/797620所述,但我自己从未测试过该语句。

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

答案 1 :(得分:0)

这个问题让PostgreSQL / POSTGIS解决方案感到尖叫。如果需要,将lat-lon存储在包含一些元信息的表中。然后让POSTGIS的魔力发挥作用。

PostgreSQL / Postgis经过优化,可以进行这些与地理空间相关的查询!实际上在新版本中> 9.1引入K-Nearest Neighbor运算符,它返回N个最近邻居(因此名称):

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

这很容易:)

“&lt; - &gt;是一个”距离“运算符,但只有当它出现在ORDER BY子句中时它才会使用索引。在将运算符放入ORDER BY并使用LIMIT截断结果之间设置,我们可以非常快速地(在2M记录表上小于10ms,在这种情况下)得到10个最接近我们测试点的点。“

Read more here.

相关问题