0

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

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

4

2 回答 2

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

于 2013-04-04T04:08:26.907 回答
0

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

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

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

所以这很容易:)

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

在这里阅读更多。

于 2013-04-04T04:16:55.390 回答