我正在做一个网站,每个用户输入他的地址,网站将匹配每个人与最接近的人,我嵌入谷歌地图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个点。"
点击这里阅读更多内容。