2012-09-05 145 views
0

在數據庫中,我有用戶,列出了他們的地址數據。在該網站上有一個搜索欄,訪問者可以輸入城市名稱來搜索用戶(使用Google Maps API)。用戶的座標也存儲在數據庫中。查詢多國語言城市名稱+從座標計算半徑Google地圖

實際上有兩件事情我想弄清楚:

  1. 如何計算從原點coordiante(用戶的具體地址)+ 1,5,10,X半徑的座標。 km。 目標是查詢數據庫中某些座標在給定半徑範圍內的座標的行。
  2. 該網站是多語言的,如果我輸入英文名稱,有沒有辦法向Google查詢以獲取其他語言的城市名稱? 當訪問者進入例如柏林時,目標是在柏林(德國首都德語/德語)找到匹配項。 Berlijn(荷蘭人柏林)。

我一直在瀏覽谷歌有關地點,地理編碼,地圖的文檔,但目前爲止沒有任何可用的結果。

回答

0

接聽2.首先,你可以使用PHP函數SOUNDEX()對名稱創建一個新的字段(列)。 應答1.使用Haversine Formula查找給定半徑內的地點。 以下查詢使用此公式。

$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)); 

上面的代碼計算英里的距離,如果你想在你需要6371. 以取代3959然後你就可以使用此查詢到的同音領域搜索半徑內地方公里答案。

+0

你能向我解釋爲什麼查詢會做它的功能嗎? ;)對我來說,這似乎有點複雜;) – Ben

+0

http://uk3.php.net/manual/en/function.mysql-real-escape-string.php –

+0

mysql-real-escape-string轉義特殊字符以便isprintft是安全的放置在一個mysql_query()見http://uk3.php.net/manual/en/function.mysql-real-escape-string.php sprintf.see http://uk3.php.net/ manual/en/function.sprintf..php所有其他函數都是數學函數 –