地理編碼地址最佳做法

地理編碼是指將地址 (例如街道地址) 轉換成地理座標 (經緯度) 的程序,您可以透過這項程序在地圖上放置標記,或在地圖上定位。本文的重點在於說明地理編碼地址時的考量。說明何時應使用 Geocoding API,以及何時應使用 Places API Place Autocomplete 服務。

一般來說,如果要為完整地址 (例如「48 Pirrama Rd, Pyrmont, NSW, Australia」) 進行地理編碼,請使用 Geocoding API。如要地理編碼不明確 (不完整) 的地址,或針對對延遲時間較為敏感的應用程式 (例如回應使用者輸入內容時),請使用 Places API Place Autocomplete 服務

用途和 API 建議

用途和 API 建議
即時回應使用者輸入內容 (包括使用者輸入的不清晰、不完整、格式不正確或拼字錯誤的地址) 使用 Places API Place Autocomplete 服務取得地點 ID,然後使用 Geocoding API 將地點 ID 編碼為 latlng。
自動化系統處理完整且明確的郵遞地址 (例如「48 Pirrama Rd, Pyrmont, NSW, Australia」) 使用 Geocoding API Web 服務。
自動化系統處理不清晰的查詢 (例如地址不完整、格式不正確或拼寫錯誤) 建議自動化系統使用 Geocoding API 網路服務。不過,如果自動化系統經常因使用者輸入內容而產生含糊、不完整或拼錯的查詢,建議您新增互動式 Place Autocomplete 小工具,讓使用者選取結果,避免地址拼錯。
使用 Directions API 或 Distance Matrix API 時發生延遲問題,且起點、目的地或路線點以地址字串指定 使用 Places API 地點自動完成服務取得地點 ID,然後將地點 ID 傳遞至 Directions API 或 Distance Matrix API,以便縮短地理編碼延遲時間。

回應使用者輸入內容

針對使用者輸入內容即時回應的應用程式,有兩個主要考量因素會影響 API 的選擇:

  1. 使用者輸入內容通常會逐漸輸入地址 (例如「123 Main Street」),因此能夠為不完整、模糊的地址進行地理編碼,可讓使用者更快取得結果。
  2. 回應使用者輸入內容的應用程式,對延遲時間非常敏感。

基於這兩項考量, Places API 中的 Place Autocomplete 服務非常適合用於回應使用者輸入內容的用途。Place Autocomplete 會傳回多個可能的選項,讓使用者自行選擇。您可以限制 Places API 只搜尋地理編碼或地址,而排除商家。此外,自動完成查詢功能可偏向傳回特定位置的結果。Places API 會傳回 地點 ID,可將其做為完全不含歧義的位置傳送至 Geocoding API Web 服務,該服務會傳回完整的地址詳細資料,並將地址編碼為 latlng。地點 ID 也可以傳送至其他 API,例如 Directions API 和 Distance Matrix API (請參閱下文)。

Geocoding API 中的地址地理編碼延遲時間較長,且對於不完整或模糊的查詢,產生的結果也不夠準確,因此不建議用於必須即時回應使用者輸入內容的應用程式。

進一步瞭解 AndroidiOSJavaScript Places API 適用的地點自動完成服務。

自動化系統

自動化系統處理完整且不含歧義的郵遞地址:系統可透過 Geocoding API 網路服務,處理完整郵遞地址字串等不含歧義的查詢 (例如「48 Pirrama Rd, Pyrmont, NSW, Australia」)。地址地理編碼後端可提供更廣泛的全球地址涵蓋範圍,並針對這類完整且明確的查詢,提供優質結果。

自動系統處理含有模糊查詢的情況:含有格式不正確的地址、不完整的地址或拼寫錯誤的查詢,如果是自動化系統,建議您使用 Geocoding API Web 服務。不過,Geocoding API 並未設計用於處理含糊不清的查詢,因此可能會產生不太準確的結果,或在回應含糊不清的查詢時,不提供任何結果。如果您的自動化系統處理的查詢含有大量來自使用者輸入內容的模糊字詞,建議您使用 Places API 中的 Place Autocomplete 服務,在應用程式中加入互動元素,因為這項服務的設計目的是傳回多個可能選項,並讓使用者在其中選擇。Places API 會傳回 地點 ID,可將其做為完全不含歧義的位置傳遞至 Geocoding API Web 服務,該服務會傳回完整的地址詳細資料,並將地址編碼為 latlng。進一步瞭解 AndroidiOSJavaScript Places API 適用的地點自動完成服務。

降低 Directions API 和 Distance Matrix API 的延遲時間

如果起點、目的地或路線點是以地址字串指定,Directions API Distance Matrix API 會使用與 Geocoding API 相同的後端,在計算路線前將這些地址編碼為地理座標。相較於指定與 latlng 或 place ID 相同的位置,這會大幅增加延遲時間。

如果您的應用程式在回應使用者輸入內容等延遲敏感情況下使用 Directions API 或 Distance Matrix API,且您的起點、目的地或路標最初是以地址字串指定,建議您使用 Places API 的 Place Autocomplete 服務,將地址字串轉換為地點 ID,然後將地點 ID 傳送至 Directions API 或 Distance Matrix API,以盡量減少延遲時間。進一步瞭解 AndroidiOSJavaScript Places API 的 Place Autocomplete 服務。另請參閱 Place Autocomplete 和路線規劃的 JavaScript 範例

結論

視用途而定,在將地址轉換為地理編碼時,您可以使用 Geocoding API,或是將 Place Autocomplete 服務與 Geocoding API 搭配使用,藉此打造應用程式,為使用者提供準確的地理編碼結果,並縮短延遲時間。

管理錯誤和重試

如果您收到 UNKNOWN_ERROR 回應,表示系統發生暫時性錯誤,建議稍候片刻後再重試。建議您使用 Google 地圖平台網路服務 用戶端程式庫,其中包含重試邏輯,並支援 Google 地圖平台付費方案的驗證機制。Google 地圖服務適用的 Java 用戶端Python 用戶端Go 用戶端Node.js 用戶端都是社群支援的用戶端程式庫,可在 GitHub 上下載及貢獻,您也可以在 GitHub 上找到安裝說明和範例程式碼。

如果您收到 OVER_QUERY_LIMIT 狀態碼回應,表示您已超過 API 的用量限制。建議您試試下列 使用量最佳化策略