您已全部設定完成!

若要開始開發,請參閱我們的開發人員文件

啟用 Google Maps Geocoding API

為協助您開始,我們將先引導您使用 Google Developers Console 來執行一些動作:

  1. 建立或選擇專案
  2. 啟用 Google Maps Geocoding API
  3. 建立適當的金鑰
繼續

進行地理編碼時最佳化配額使用量

地理編碼是將地址 (「1600 Amphitheatre Parkway, Mountain View, CA」) 轉換為地理座標 (37.423021, -122.083739) 的程序,您可以用來放置標記或定位地圖。Google Maps API 提供兩種地理編碼方式:

  • 用戶端地理編碼,一般是為了回應使用者動作而在瀏覽器中執行。Google Maps JavaScript API 提供能替您建立要求的類別。這種方式在 Google Maps JavaScript API 文件中有相關說明。
  • HTTP 伺服器端地理編碼,可讓您的伺服器直接查詢 Google 伺服器來進行地理編碼。Google Maps Geocoding API 是提供此功能的 Web 服務。一般而言,您會將此服務與其他在伺服器端執行的程式碼整合。Google Maps 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
    });
  }
});

如需更多範例,請參閱 Google 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
        }
      }
    }
  } ]
}

除了 JSON 之外,伺服器端地理編碼器亦提供 XML 格式。如需更多範例,請參閱 Google Maps Geocoding API 文件和 Python 等其他語言的用戶端程式庫

配額注意事項

本文所列的策略主要針對地理編碼配額和速率限制。

使用標準方案,所有地理編碼要求(無論是透過瀏覽器的用戶端,還是透過 Google Maps Geocoding API Web 服務的伺服器端)都有每天 2,500 個要求的配額。一天當中的所有要求都會占用您專案的配額。若要取得更高的每日配額,請啟用即付即用的計費方式,如使用限制指南所述。

除了每日配額限制之外,地理編碼服務還有 50 QPS (每秒查詢數)的速率限制,以用戶端與伺服器端查詢的加總計算。

定期執行用戶端地理編碼要求時(例如在行動應用程式中),如果所有使用者同時建立要求(例如,在每分鐘的相同秒數時),您的要求可能會傳回錯誤。若要避免此問題,請考慮下列其中一種方法:

  • 使用快取策略。
  • 在要求中導入隨機間隔(時基誤差)。確保要求在整個使用者群中是隨機的。
  • 如果您是針對 Android 進行開發,請使用不精確重複报警
  • 如果您是針對 Android 進行開發,請選擇適當的位置策略

針對 Google Maps APIs Premium Plan 客戶,API 提供更高的每日配額。如果要深入了解 Google Maps APIs Premium Plan 配額,請參閱 Premium Plan 使用費用與限制指南。如果您使用 Google Maps APIs Premium Plan 仍舊達到配額限制,請在 Google Cloud Support Portal 上提出支援要求。

快取注意事項

Google Maps API 服務條款允許您快取地理編碼(也就是將地理編碼暫時儲存在您的伺服器上)。如果您需要重複查詢相同的地址,快取相當有用。不過,請記住,隨著我們的資料變得更加準確,地理編碼結果也會随著改變。因此,即使您已快取了資料,也應該定期將其重新整理,以確保您為位置取得最佳的地理編碼。

何時該使用用戶端地理編碼

简短的回答是「幾乎所有時間」。理由為:

  • 用戶端要求和回應可提供更快、互動性更高的使用者體驗。
  • 用戶端要求可以包含提升地理編碼品質的資訊:使用者的語言、區域和檢視點。

尤其是在根據使用者輸入來為地址進行地理編碼時,用戶端地理編碼的效果最佳。

用戶端地理編碼有兩種基本架構:

  • 完全在瀏覽器中進行地理編碼並顯示。例如,使用者在您的頁面上輸入地址。您的應用程式為其進行地理編碼。接著,您的頁面使用該地理編碼來在地圖上建立標記。或者,您的應用程式使用該地理編碼來進行一些簡單的分析。該過程中不會傳送任何資料到您的伺服器。這可以減輕伺服器的負擔。
  • 在瀏覽器中進行地理編碼,然後將其傳送到伺服器。例如,使用者在您的頁面上輸入地址。您的應用程式在瀏覽器中為其進行地理編碼。接著,應用程式將資料傳送到您的伺服器。伺服器做出包含一些資料的回應,例如鄰近的搜尋點。這可讓您根據自己的資料來自訂回應,並能依需求來快取地理編碼。快取可讓您進一步地進行最佳化。例如,您可以在伺服器中查詢地址,來確認是否已有該地址最近快取的地理編碼。如果沒有符合的快取,則不要傳回結果到瀏覽器,而讓瀏覽器為結果進行地理編碼,再傳送回伺服器進行快取。

何時該使用伺服器端地理編碼

伺服器端地理編碼最適合用於需要在沒有用戶端輸入的情況下,為地址進行地理編碼的應用程式。常見範例是當您取得不依靠使用者輸入的資料集時,例如您有一組固定、有限且已知的地址需要進行地理編碼。伺服器端地理編碼也能做為用戶端地理編碼失敗時的備份。

可能的疑慮包括:對使用者造成不必要的延遲時間增加,以及由於要求中可用的資訊較少,而導致地理編碼結果品質比用戶端地理編碼差。

伺服器端地理編碼應用程式的基本架構如下:

  • 基於伺服器的應用程式傳送地址到伺服器的地理編碼指令碼。
  • 指令碼檢查快取來確認該地址最近是否進行過地理編碼。
  • 如果是,指令碼將結果傳回原始應用程式。
  • 如果否,指令碼傳送地理編碼要求到 Google。取得結果後,指令碼便對其進行快取,然後將結果傳回原始應用程式。

結論

一般來說,用戶端地理編碼和快取的組合便能滿足您大部分的需求。如果您遇到配額方面的問題,請考慮啟用計費功能購買 Premium Plan 授權。

傳送您對下列選項的寶貴意見...

這個網頁
Google Maps Geocoding API
Google Maps Geocoding API
需要協助嗎?請前往我們的支援網頁