2011年1月23日 星期日

Google Maps API Web Services - Geocoding API

這個服務通 常是設計來計算靜態 (已知) 地址的地理編碼,以便在地圖上放置應用程式內容,而「不是」用來即時回應如使用者輸入等作業。如需動態的地理編碼資訊 (例如在使用者介面元素之內),請參閱「JavaScript API 第 3 版 Client Geocoder」或「Maps API for Flash Client Geocoder」的說明文件。地理編碼這項工作不僅費時且需要耗用大量資源。可能的話,請預先為已知的地址進行地理編碼 (使用此處描述的 Geocoding API 或其他地理編碼服務),並將結果儲存在您個人設計的暫存快取中。



注意:Google Geocoding API 不再需要 Maps API 金鑰。

什麼是地理編碼

地理編碼是指將地址 (例如 1600 Amphitheatre Parkway, Mountain View, CA) 轉換成地理座標(例如緯度 37.423021 和經度 -122.083739)的程序,而您可以使用這些座標來放置標記或設定地圖位置。Google Geocoding API 可讓使用者直接透過 HTTP 要求存取 Geocoder。另外,此服務能讓您執行反向作業 (將座標轉換為位址);此程序也就是「反向地理編碼」。

使用限制

Google Geocoding API 有查詢限制,每天只能要求 2,500 個地理位置 (Google Maps API Premier 使用者每天最多可查詢 100,000 個要求)。此限制以後如有變更,恕不另行通知。此外,我們也限制要求頻率,以避免發生濫用服務的狀況。如果您已超過24小時的使用上限或是濫用服務,Geocoding API 將暫時無法使用。如果您持續超過上限,則會遭到封鎖,無法使用 Geocoding API。

注意:Geocoding API 必須搭配 Google 地圖一起使用;如未在地圖上顯示結果,即無法使用地理編碼產生結果。

使用方法

Geocoding API 要求必須使用下列其中一種格式:

http://maps.google.com/maps/api/geocode/output?parameters

其中 output 可為下列任一個值︰
  • json (建議使用) 表示輸出格式為 JavaScript 物件註解 (JSON)
  • xml 表示輸出格式為 XML
有些參數為必要,而有些參數則為選用。跟網址的標準一樣,這裡的所有參數都會以 & 字元分隔。參數清單和其可能的值列舉如下︰

Geocoding API 使用下列網址參數來定義地理編碼要求:
  • address (必要):您要進行地理編碼的地址。*
  •      或
  • latlng (必要):您將為此文字經/緯度值取得最接近的人類可讀地址。*
  • bounds (選用):您可在此檢視區的邊框中,進一步自訂調整地理編碼結果。(如需詳細資訊,請參閱「檢視區自訂調整」)。
  • region (選用):將區域代碼指定為 ccTLD (「頂層網域」) 的兩位字元值。(如需詳細資訊,請參閱「區域自訂調整」)。
  • language (選用):結果傳回時使用的語言。請參閱「支援的網域語言清單」。請注意,google 經常更新支援的語言,因此這份清單可能會有遺漏。如果未提供 language,Geocoder 會嘗試使用要求傳送所在網域 (不管位於何處) 的預設語言。
  • sensor (必要):指出地理編碼要求的來源裝置是否附有位置感應器。這個值必須是 truefalse
* 注意:您可以傳送 addresslatlng 以進行查閱。如果您傳送的是 latlng,Geocoder 會執行稱為「反向地理編碼」的程序 (詳情請見「反向地理編碼」)。

boundsregion 參數會影響但不會完全限制 Geocoder 的結果。

地理編碼回應

JSON 輸出格式

回應包含兩個根元素
  1. "status" 包含要求的中繼資料。
    • "OK" 表示沒有發生任何錯誤;地址的剖析已成功完成且至少傳回一個地理編碼。
    • "ZERO_RESULTS" 表示地理編碼成功,但是並未傳回任何結果。如果 Geocoder 收到的是遠處的 latlng 或是不存在的 address,就有可能發生這種情況。
    • "OVER_QUERY_LIMIT" 表示您已超過配額。
    • "REQUEST_DENIED" 表示您的要求已遭拒絕,通常是因為缺少 sensor 參數。
    • "INVALID_REQUEST" 通常表示查詢 (addresslatlng) 遺失。
  2.  "results" 包含一個地理編碼地址資訊和幾何圖形資訊的陣列。 即使 Geocoder 未傳回任何結果 (例如地址不存在時),它還是會傳回一個空的 (JSON) results 陣列 (XML 回應是由零或更多的  元素組成)。一般結果中會包含下列欄位:
    • types[] 陣列指出傳回結果的「類型」。這個陣列包含一組 (一或多個) 標記,標有結果傳回的特性類型。例如: locality(地區), political(政治實體)。
    • formatted_address 這個字串包含這個位置的人類可讀地址。通常,這個地址即等於「郵政地址」。
    • address_components[] 是一個陣列,包含上述的個別地址元件(數量可能多於 formatted_address 中所標示的數量)。每一個 address_component 通常包含:
      • types[],一個指出地址元件的「類型」的陣列。
      • long_name,Geocoder 所傳回地址元件的完整文字說明或名稱。
      • short_name,為地址元件的縮短文字名稱 (如果有的話)。例如,Alaska 州的地址元件中 long_name 為「Alaska」,而 short_name 則為 2 個字母的郵政簡碼「AK」。
    • geometry 包含下列資訊:
      • location 包含地理編碼的經緯度值。
      • location_type 會儲存指定位置的其他相關資料,目前支援的值如下:
        • "ROOFTOP" 會指出傳回的結果是精準的地理編碼,因為結果中位置資訊的精確範圍已縮小至街道地址。
        • "RANGE_INTERPOLATED" 表示傳回的結果反映的是插入在兩個精確定點之間 (例如十字路口) 的約略位置 (通常會在街道上)。如果 Geocoder 無法取得街道地址的精確定點地理編碼,就會傳回插入的結果。
        • "GEOMETRIC_CENTER" 表示傳回的結果是結果的幾何中心,包括折線 (例如街道) 和多邊形 (區域)。
        • "APPROXIMATE" 表示傳回的結果是約略位置。
      • viewport 包含建議用來顯示傳回結果的檢視區,檢視區的值兩個經緯度值,分別定義檢視區邊框的 southwest 角和 northeast 角。一般來說,檢視區是指您對使用者顯示結果時,用於結果的邊框。
      • bounds (選擇性傳回) 會儲存可完全包含傳回結果的邊框。請注意,這些邊界可能與建議的檢視區不同。(舉例來說,舊金山行政區涵蓋 法拉倫島 (英文網頁),雖然這在技術上是舊金山的一部分,但是可能不會在檢視區中傳回)。

XML 輸出格式
(略)

地址元件類型

傳回結果內的 types[] 陣列會指出「地址類型」。這些類型也可能透過 address_components[] 陣列傳回,以指出特定地址元件的類型。Geocoder 中的地址能夠擁有多個類型;我們可以將這些類型視為「標記」。常看到的列表如下...
  • country 會指出國家/地區政治實體,且通常是 Geocoder 所能傳回的最高順位類型。
  • floor 會指出建築物地址的樓層。
  • intersection 會指出主要的十字路口,通常包含兩條主要道路。
  • political 會指出政治實體。通常,這個類型會顯示某些公家機關建築物的多邊形。
  • postal_code 會指出國家/地區郵政地址所使用的郵遞區號。
  • room 會指出建築物地址的房號。 
  • route 會指出具名的路線 (例如「US 101」)。
  • street_address 會指出精確的街道地址。
  • street_number 會指出精確的街道號碼。

更多定義可以看這裡

舉例:

針對「1600 Amphitheatre Parkway, Mountain View, CA」的查詢要求一個 json 格式的回應:

http://maps.google.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=false

反向地理編碼

「地理編碼」一詞通常是指將人類可讀的地址轉譯成地圖位置的程序。如果我們反向執行這個程序,也就是將地圖位置轉譯成人類可讀的地址,則是在執行「反向地理編碼」。

Geocoding API 支援直接使用 latlng 參數執行反向地理編碼。例如,下方查詢包含 Brooklyn 某處的經緯度:

http://maps.google.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=false

注意:傳入 latlng 參數時,請確定經度和緯度的值之間沒有任何空格。

注意:反向地理編碼只是一個估計值。Geocoder 將在容許的範圍內,嘗試找出最接近的地址位置;如果找不到任何符合的項目,Geocoder 會傳回零個結果。

自定檢視區

你也可以自定檢視區。利用bounds參數定義了此邊框的西南角和東北角的經/緯度座標,並以管道 (|) 字元來分隔座標。例如,下方查詢...

http://maps.google.com/maps/api/geocode/json?address=Winnetka&bounds=34.172684,-118.604794|34.236144,-118.500938&sensor=false

自訂區域

或者使用 region 參數得到自訂區域(特定國家/地區)的結果。例如,下方查詢"西班牙的 Toledo"...

http://maps.google.com/maps/api/geocode/json?address=Toledo&sensor=false&region=es

region 這個參數接受的 ccTLD (國家/地區代碼頂層網域) 引數可用來指定區域自訂調整(預設網域為美國)。多數 ccTLD 代碼與 ISO 3166-1 代碼相同,只有少數例外。例如,英國的 ccTLD 是「uk」(.co.uk),但 ISO 3166-1 代碼卻是「gb」(正式的國名是「大不列顛暨北愛爾蘭聯合王國」)。

--
詳情請參閱 這裡

沒有留言:

張貼留言