0

在一个数据库中,我有用户,列出了他们的地址数据。在网站上有一个搜索栏,访问者可以输入城市名称来搜索用户(使用 Google Maps API)。用户的坐标也存储在数据库中。

实际上有两件事我想弄清楚:

  1. 如何从原点坐标(用户的特定地址)+ 1、5、10、x.. km 的半径计算坐标。 目标是从特定坐标查询数据库中坐标在给定半径内的行。
  2. 该网站是多语言的,如果我输入英文名称,有没有办法向谷歌查询以获取其他语言的城市名称? 目标是在访问者进入时在柏林(德国首都的德语/英语)找到匹配项,例如 Berlijn(柏林的荷兰语)。

我一直在浏览谷歌关于地点、地理编码、地图的文档,但到目前为止还没有任何可用的结果。

4

2 回答 2

0

回答 2. 首先您可以使用 PHP 函数SOUNDEX( ) 在名称上创建一个新字段(列)。回答 1. 使用Haversine 公式查找给定半径内的地点。下面的查询使用此公式。

$query = sprintf("SELECT  name, latitude, longditude( 3959 * acos( cos( radians('%s') ) * cos( radians( latitude ) ) * cos( radians( longditude ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( latitude ) ) ) ) AS distance FROM gb WHERE `soundex` LIKE '%s' HAVING distance < '%s' ORDER BY distance LIMIT 0 , 20",
mysql_real_escape_string($center_lat),
mysql_real_escape_string($center_lng),
mysql_real_escape_string($center_lat),
mysql_real_escape_string(soundex($soundex)),
mysql_real_escape_string($radius));

上面的代码以英里为单位计算距离,如果您想要以公里为单位的答案,您需要将 3959 替换为 6371。然后您可以使用此查询在 soundex 字段上搜索半径内的地点。

于 2012-09-06T07:43:21.840 回答
0

您想要做的是称为“地理编码”,地址始终使用当地语言,但我认为对于国家甚至城市的名称,您可以使用多种语言。

这是来自谷歌的地理编码教程

于 2012-09-05T23:51:05.107 回答