地理編碼是指將地址 (「1600 Amphitheatre Parkway, Mountain View, CA」) 轉換成地理座標 (37.423021, -122.083739) 的程序,您可以透過這種方式來放置標記或設定地圖位置。Google 地圖平台 API 提供兩種地理編碼方法:
- 用戶端地理編碼,在瀏覽器中執行,通常是為了回應使用者動作。Maps JavaScript API 提供的類別可為您發出要求。如需此方法的說明,請參閱 Maps JavaScript API 說明文件。
- HTTP 伺服器端地理編碼:可讓伺服器直接查詢 Google 伺服器進行地理編碼。Geocoding API 是提供這項功能的網路服務。一般而言,您必須將這項服務與在伺服器端執行的其他程式碼整合。如需伺服器端地理編碼的說明,請參閱 Geocoding API 說明文件。
用戶端和伺服器端地理編碼範例
以下的用戶端地理編碼範例可以接收地址、進行地理編碼、將地圖的中心移至該位置,並在其中加入地圖標記:
geocoder = new google.maps.Geocoder(); geocoder.geocode({ 'address': address }, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { map.setCenter(results[0].geometry.location); var marker = new google.maps.Marker({ map: map, position: results[0].geometry.location }); } });
如需更多範例,請參閱 Maps JavaScript API 說明文件。
以下舉例說明如何使用 Python 執行伺服器端地理編碼要求:
import urllib2 address="1600+Amphitheatre+Parkway,+Mountain+View,+CA" key="my-key-here" url="https://maps.googleapis.com/maps/api/geocode/json?address=%s&key=%s" % (address, key) response = urllib2.urlopen(url) jsongeocode = response.read()
這會產生具有下列內容的 JSON 物件:
{ "status": "OK", "results": [ { "types": street_address, "formatted_address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA", "address_components": [ { "long_name": "1600", "short_name": "1600", "types": street_number }, { "long_name": "Amphitheatre Pkwy", "short_name": "Amphitheatre Pkwy", "types": route }, { "long_name": "Mountain View", "short_name": "Mountain View", "types": [ "locality", "political" ] }, { "long_name": "San Jose", "short_name": "San Jose", "types": [ "administrative_area_level_3", "political" ] }, { "long_name": "Santa Clara", "short_name": "Santa Clara", "types": [ "administrative_area_level_2", "political" ] }, { "long_name": "California", "short_name": "CA", "types": [ "administrative_area_level_1", "political" ] }, { "long_name": "United States", "short_name": "US", "types": [ "country", "political" ] }, { "long_name": "94043", "short_name": "94043", "types": postal_code } ], "geometry": { "location": { "lat": 37.4220323, "lng": -122.0845109 }, "location_type": "ROOFTOP", "viewport": { "southwest": { "lat": 37.4188847, "lng": -122.0876585 }, "northeast": { "lat": 37.4251799, "lng": -122.0813633 } } } } ] }
伺服器端地理編碼器也提供 XML 格式做為 JSON 的替代選項。如需更多範例,請參閱 Geocoding API 說明文件以及 Python 和其他語言適用的用戶端程式庫。
配額和費用注意事項
地理編碼費用、配額和頻率限制會影響本文所述的策略。
費用
地理編碼要求 將不再使用每日配額 (QPD) 限制。換句話說,不論是用戶端透過瀏覽器,還是在伺服器端透過 Geocoding API 網路服務,每個地理編碼要求都會按每則價格計費。如要管理使用成本,建議您設定每日配額上限。
頻率限制
地理編碼服務的處理速率上限為 3,000 QPM (每分鐘查詢),計算為用戶端和伺服器端查詢的總和。
定期執行用戶端地理編碼要求時 (例如在行動應用程式中),如果所有使用者同時發出要求 (例如每分每秒一秒) 發出要求,要求可能會傳回錯誤。如要避免這種情況,請考慮採用下列其中一種做法:
快取
如需快取的相關資訊,請參閱 Geocoding API 政策。
使用用戶端地理編碼的時機
簡單來說,答案是「大多數情況下都會」。原因如下:
- 用戶端要求和回應可讓使用者享有更快速、更具互動性的體驗。
- 用戶端要求可包含可改善地理編碼品質的資訊,例如使用者語言、區域和可視區域。
尤其,根據使用者輸入內容進行地址地理編碼時,用戶端地理編碼最好。
用戶端地理編碼有以下兩種基本架構:
- 完全在瀏覽器中進行地理編碼及顯示。例如,使用者在您的網頁上輸入地址。應用程式會進行地理編碼。接著,您的網頁會利用地理編碼在地圖上建立標記。或者,您的應用程式會使用地理編碼進行簡單的分析。系統不會傳送任何資料給您的伺服器。 這麼做可以降低伺服器的負載。
- 在瀏覽器中進行地理編碼,然後傳送至伺服器。例如,使用者在您的網頁上輸入地址。應用程式會在瀏覽器中進行地理編碼。然後,應用程式會將資料傳送至您的伺服器。伺服器會回應一些資料,例如附近的搜尋點。這樣一來,您就能根據自己的資料自訂回應。
使用伺服器端地理編碼的時機
伺服器端地理編碼最適合需要在用戶端輸入的情況下,不必輸入地址進行地址地理編碼的應用程式。最常見的例子就是,您取得的資料集獨立於使用者輸入內容之外,例如有一組固定、有限且需要地理編碼的地址。當用戶端地理編碼失敗時,伺服器端地理編碼也可以做為備用選項。
有些疑慮是使用者的不必要的延遲時間增加,而地理編碼結果的品質也會低於用戶端,因為要求中的資訊越少。