網頁

2014年11月8日

[php] 如何使用Google Geocoding API功能?

Google Geocoding API是Google提供的一個地圖工具,可以透過經緯度取得地址,每天可以提出2500個請求,長時間超過2500請求,將會被封鎖。

Google Geocoding API使用限制及說明:
https://developers.google.com/maps/documentation/geocoding/?hl=zh-tw


PHP程式範例:

<?php
/**
* 參數說明:
*
* latlng=緯度,經度  //必要參數。
* sensor=false    //必要參數,請出請求的設備是否有定位裝置,true有/false沒有
* language=zh_TW  //回傳資料語系,預設英文,繁中zh_TW/簡中zh_CN
*/

$google_url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng=緯度,經度&sensor=false&language=zh_TW';

//透過proxy連線網路
//$ctx = stream_context_create(array('http' => array('timeout' => 5, 'proxy' => 'tcp://proxy.xxxxx.xxxxx.tw:3128', 'request_fulluri' => true,)));
//$result = file_get_contents($google_url , false, $ctx);

//直接連線網路
$result = file_get_contents($google_url);

if ($result){
 //資料做json_decode反解
 $result = json_decode($result, true);

 //解析正常回傳"OK"值
 if ($result['status'] == 'OK'){
  //顯示回傳的中文地址
  echo $result['results'][0]['formatted_address'];
 }else{
  //顯示錯誤代碼
  echo "Error code : ".$result['status'];
 }
}
?>



狀態碼說明:

  • "OK" 表示沒有發生任何錯誤;地址的剖析已成功完成且至少傳回一個地理編碼。
  • "ZERO_RESULTS" 表示地理編碼成功,但是並未傳回任何結果。如果該地理編碼收到了不存在的 address 或遠端位置的 latlng,就有可能發生這種情況。
  • "OVER_QUERY_LIMIT" 表示您超過配額了。
  • "REQUEST_DENIED" 表示您的要求已遭拒絕,通常是因為缺少 sensor 參數。
  • "INVALID_REQUEST" 一般表示查詢 (address 或 latlng) 遺失了。