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

地理編碼是指轉換地址的程序 ("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 政策。

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

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

  • 用戶端要求和回應則能更快、 帶來互動體驗
  • 用戶端要求可能包含可改善地理編碼的資訊 品質:使用者語言、地區和可視區域

尤其是,在為地址進行地理編碼時,用戶端地理編碼的效果最好 根據使用者輸入內容製作而成

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

  • 在瀏覽器中進行完整地理編碼及顯示畫面。舉例來說: 使用者輸入網頁上的地址您的應用程式會進行地理編碼。接著 您的網頁會使用地理編碼來在地圖上建立標記。或者您的應用程式 運用地理編碼進行一些簡單的分析系統不會將任何資料傳送到你的伺服器。 這可降低伺服器的負載。
  • 在瀏覽器中進行地理編碼,然後傳送至伺服器。 例如,使用者在您的網頁上輸入地址。您的應用程式 就會在瀏覽器中進行地理編碼。接著,應用程式會將資料傳送至您的伺服器。 伺服器會傳回部分資料,例如附近的搜尋點。這個 可讓您根據自己的資料自訂回應

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

伺服器端地理編碼最適合用於 您無需用戶端輸入內容,就能為地址進行地理編碼。常見的例子 要取得獨立於使用者輸入內容的資料集 例如您有一組固定、有限和 需要地理編碼的地址伺服器端地理編碼 也非常適合做為用戶端地理編碼失敗時的替代方案。

有些可能的疑慮是不必要的延遲時間 但比起用戶端 資訊。