Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将用户与最近的地址匹配?_Php_Mysql_Google Maps_Geolocation_Geocoding - Fatal编程技术网

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

Php 如何将用户与最近的地址匹配?,php,mysql,google-maps,geolocation,geocoding,Php,Mysql,Google Maps,Geolocation,Geocoding,我正在做一个网站,每个用户都把他的地址和网站将匹配每个人与最接近的人,我嵌入谷歌地图API的方向,但该网站如何匹配用户 如果你能给我举个例子或任何能帮助我实现目标的策略?你可以通过以下途径了解如何获得lat/long: 将每个用户的lat/long存储在数据库中的数据中 此外,最好存储每个用户的国家/地区,这样您的查询就会减少。强烈建议同时存储区域数据,如ZIP/POSTAL,以进一步减少查询负载 然后,在您使用的任何php页面上,您都已经拥有您正在搜索的用户的区域数据(如上所述)。使用该数据循

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


如果你能给我举个例子或任何能帮助我实现目标的策略?

你可以通过以下途径了解如何获得lat/long:

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

此外,最好存储每个用户的国家/地区,这样您的查询就会减少。强烈建议同时存储区域数据,如ZIP/POSTAL,以进一步减少查询负载

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

一旦您拥有同一邮政区域内其他人的lat/long,您可以使用以下功能:

或者,您可以通过前面解释的SQL语句执行很多操作,但我自己从未测试过该语句


谷歌的这个页面提供了另一个非常详细的方法,您可以尝试一下:

这个问题迫切需要PostgreSQL/POSTGIS解决方案。如有必要,将lat lon存储在带有一些元信息的表中。然后让POSTGIS的魔力发挥作用

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

通过您的_table.geom“您的位置…”从您的_table订单中选择*限制10
所以这很简单:)

“是一个“距离”运算符,但它仅在ORDER BY子句中出现时使用索引。在将运算符放入ORDER BY和使用限制来截断结果集之间,我们可以非常快速地(在这种情况下,2M记录表上的时间小于10ms)获得距离测试点最近的10个点。”


保存捕获的所有地址的经度和纬度(使用谷歌地图api)。然后,您应该能够形成某种半径方程来匹配最近的地址。这就是我想说的,你能告诉我如何获得经度和纬度吗?你过分担心通过添加国家和zipcode作为约束来减少查询负载。什么是一个人住在边境附近,而越过边境住在最近的人?在概念上是一致的。在大多数情况下,对于现在的大多数社交网站,人们往往只关心自己的国家/地区,所以这就是我回答的重点。然而,是的,按照您指出的方式,走这条路线确实会限制可用的lat/long列表。
SELECT * FROM your_table ORDER BY your_table.geom <-> "your location..." LIMIT 10