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

地理編碼是指將地址 (「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 (每分鐘查詢次數),計算方式為用戶端和伺服器端查詢次數的總和。

定期執行用戶端地理編碼要求 (例如在行動應用程式中) 時,如果所有使用者同時提出相同的要求 (例如每分鐘兩秒),要求可能會傳回錯誤。為了避免這種情況,請考慮下列其中一種做法:

  • 在要求中加入隨機間隔。確保要求數隨機提供給所有使用者。
  • 如果你是為 Android 開發應用程式,請使用重複的週期性鬧鐘
  • 如果需要開發 Android 應用程式,請選取適當的位置策略

快取

如需快取相關資訊,請參閱 Geocoding API 政策

用戶端地理編碼的使用時機

簡單來說,答案「幾乎是」;原因如下:

  • 用戶端要求和回應可為使用者提供更快速、互動性更高的體驗。
  • 用戶端要求可包含有助於改善地理編碼品質的資訊:使用者語言、區域和可視區域。

特別是,根據使用者的輸入內容為地址進行地理編碼時,用戶端地理編碼最適合。

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

  • 完全在瀏覽器中進行地理編碼和顯示。舉例來說,使用者在網頁上輸入地址,您的應用程式會進行地理編碼。接下來,您的網頁會使用地理編碼在地圖上建立標記。或者,您的應用程式也能使用地理編碼功能進行一些簡單的分析。系統不會將任何資料傳送到你的伺服器。這麼做會降低伺服器的負載。
  • 在瀏覽器中進行地理編碼,然後傳送至伺服器。例如,使用者在網頁上輸入地址。您的應用程式會在瀏覽器中進行地理編碼。應用程式會將資料傳送至您的伺服器。伺服器會透過一些資料回應,例如鄰近的搜尋點。您可以依據自己的資料自訂回應。

伺服器端地理編碼的使用時機

伺服器端地理編碼最適合用於需要在沒有輸入來源的情況下為地址進行地理編碼的應用程式。常見的例子是,您必須取得獨立的使用者輸入內容資料集,例如您有固定、有限和已知的地理編碼地址。伺服器端地理編碼也能在用戶端地理編碼失敗時做為備用方式。

某些顧慮是造成使用者延遲增加的情況,而且在要求中取得的資訊較少,導致地理編碼品質不如用戶端。