Mengoptimalkan Penggunaan Kuota Saat Geocoding

Geocoding adalah proses konversi alamat ("1600 Amphitheatre Parkway, Mountain View, CA") menjadi koordinat geografis (37.423021, -122.083739), yang dapat Anda gunakan untuk menempatkan penanda atau memosisikan peta. API Google Maps Platform menyediakan dua pendekatan untuk geocoding:

  • Geocoding sisi klien, yang dijalankan di browser, umumnya sebagai respons terhadap tindakan pengguna. Maps JavaScript API menyediakan class yang membuat permintaan untuk Anda. Pendekatan ini dijelaskan dalam dokumentasi Maps JavaScript API.
  • Geocoding sisi server HTTP, yang memungkinkan server Anda mengkueri server Google secara langsung untuk geocode. Geocoding API adalah layanan web yang menyediakan fungsi ini. Biasanya, Anda mengintegrasikan layanan ini dengan kode lain yang berjalan di sisi server. Geocoding sisi server dijelaskan dalam dokumentasi Geocoding API.

Contoh geocoding sisi-klien dan sisi-server

Berikut adalah contoh geocoding sisi klien yang mengambil alamat, melakukan geocoding, memindahkan pusat peta ke lokasi tersebut, dan menambahkan penanda peta di sana:

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
    });
  }
});

Untuk contoh lainnya, lihat dokumentasi Maps JavaScript API.

Berikut adalah contoh penggunaan Python untuk melakukan permintaan geocoding sisi server di Geocoding API v4:

import json
import urllib.request

address = "1600+Amphitheatre+Parkway,+Mountain+View,+CA"
key = "my-key-here"
url = f"https://geocode.googleapis.com/v4/geocode/address/{address}"
headers = {"X-Goog-Api-Key": key}

req = urllib.request.Request(url, headers=headers)
with urllib.request.urlopen(req) as response:
    result = json.loads(response.read().decode("utf-8"))

Ini menghasilkan objek JSON dengan materi berikut:

{
  "results": [
    {
      "place": "places/ChIJiSSC8QK6j4AR98Thup8mqTc",
      "placeId": "ChIJiSSC8QK6j4AR98Thup8mqTc",
      "location": {
        "latitude": 37.4224864,
        "longitude": -122.0855962
      },
      "granularity": "ROOFTOP",
      "viewport": {
        "low": {
          "latitude": 37.4211700197085,
          "longitude": -122.08691558029149
        },
        "high": {
          "latitude": 37.4238679802915,
          "longitude": -122.08421761970851
        }
      },
      "bounds": {
        "low": {
          "latitude": 37.4221145,
          "longitude": -122.0860002
        },
        "high": {
          "latitude": 37.4228775,
          "longitude": -122.085133
        }
      },
      "formattedAddress": "Google Building 41, 1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
      "postalAddress": {
        "regionCode": "US",
        "languageCode": "en",
        "postalCode": "94043-1351",
        "administrativeArea": "CA",
        "locality": "Mountain View",
        "addressLines": [
          "1600 Amphitheatre Pkwy"
        ]
      },
      "addressComponents": [
        {
          "longText": "Google Building 41",
          "shortText": "Google Building 41",
          "types": [
            "premise"
          ],
          "languageCode": "en"
        },
        {
          "longText": "1600",
          "shortText": "1600",
          "types": [
            "street_number"
          ]
        },
        {
          "longText": "Amphitheatre Parkway",
          "shortText": "Amphitheatre Pkwy",
          "types": [
            "route"
          ],
          "languageCode": "en"
        },
        {
          "longText": "Mountain View",
          "shortText": "Mountain View",
          "types": [
            "locality",
            "political"
          ],
          "languageCode": "en"
        },
        {
          "longText": "Santa Clara County",
          "shortText": "Santa Clara County",
          "types": [
            "administrative_area_level_2",
            "political"
          ],
          "languageCode": "en"
        },
        {
          "longText": "California",
          "shortText": "CA",
          "types": [
            "administrative_area_level_1",
            "political"
          ],
          "languageCode": "en"
        },
        {
          "longText": "United States",
          "shortText": "US",
          "types": [
            "country",
            "political"
          ],
          "languageCode": "en"
        },
        {
          "longText": "94043",
          "shortText": "94043",
          "types": [
            "postal_code"
          ]
        },
        {
          "longText": "1351",
          "shortText": "1351",
          "types": [
            "postal_code_suffix"
          ]
        }
      ],
      "types": [
        "premise",
        "street_address"
      ]
    }
  ]
}

Untuk contoh lainnya, lihat ringkasan Geocoding API v4 dan panduan Melakukan geocoding pada alamat.

Pertimbangan kuota dan biaya

Biaya, kuota, dan pembatasan kapasitas geocoding mendorong strategi yang diuraikan dalam dokumen ini.

Biaya

Batas kuota per hari (QPD) tidak digunakan untuk permintaan geocoding. Sebagai gantinya, setiap permintaan geocoding, baik sisi klien melalui browser maupun sisi server melalui layanan web Geocoding API, ditagih dengan harga per permintaan. Untuk mengelola biaya penggunaan, pertimbangkan untuk mengelola batas dan kuota penggunaan Anda.

Batas kapasitas

Layanan geocoding memiliki pembatasan kapasitas sebesar 3.000 QPM (kueri per menit), yang dihitung sebagai jumlah kueri sisi klien dan sisi server.

Saat menjalankan permintaan geocoding sisi klien pada interval berkala, seperti di aplikasi seluler, permintaan Anda dapat menampilkan error jika semua pengguna membuat permintaan secara bersamaan (misalnya, semuanya pada detik yang sama setiap menit). Untuk menghindarinya, pertimbangkan salah satu dari berikut ini:

  • Tambahkan interval acak pada permintaan Anda (geletar). Pastikan permintaan bersifat acak di seluruh basis pengguna Anda.
  • Jika mengembangkan untuk Android, gunakan alarm berulang yang tidak tepat.
  • Jika mengembangkan untuk Android, pilih strategi lokasi yang sesuai.

Menyimpan ke cache

Lihat Kebijakan Geocoding API tentang penyimpanan ke dalam cache.

Arsitektur sisi server versus sisi klien di v4

Geocoding API v4 (termasuk SearchDestinations, GeocodeAddress, GeocodeLocation, dan GeocodePlace) dirancang sebagai API server ke server. Memanggil endpoint v4 dari server backend Anda menawarkan keuntungan penting:

  • Kecerdasan kedatangan hiperlokal: Metode SearchDestinations (POST /v4/geocode/destinations) tersedia secara eksklusif menggunakan permintaan REST atau gRPC sisi server dan menampilkan pintu masuk bangunan, titik navigasi yang dapat dirutekan, garis batas bangunan, dan tempat terkenal di sekitar yang tidak tersedia di geocoder browser sisi klien.
  • Keamanan API yang ditingkatkan: Panggilan sisi server melindungi kunci API dan token OAuth Anda agar tidak terekspos di browser klien. Lihat Keamanan API.
  • Mask kolom respons: Endpoint v4 sisi server mendukung mask kolom, sehingga Anda dapat meminta hanya kolom yang diperlukan aplikasi untuk meminimalkan ukuran payload dan latensi.

Kapan harus menggunakan pencarian browser sisi klien

Untuk aplikasi browser interaktif yang merespons penekanan tombol secara langsung, pertimbangkan untuk menggabungkan Place Autocomplete sisi klien (untuk memperjelas input pengguna dan mendapatkan ID Tempat) dengan panggilan backend ke SearchDestinations atau GeocodePlace untuk mengambil detail atau koordinat hiperlokal dengan aman.