Mengoptimalkan Penggunaan Kuota Saat Geocoding

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

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. Google Maps Platform API menyediakan dua pendekatan terhadap 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 membuat kueri server Google secara langsung untuk geocoding. Geocoding API adalah layanan web yang menyediakan fungsi ini. Biasanya, layanan ini diintegrasikan dengan kode lain yang menjalankan 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 bagian tengah 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:

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()

Ini menghasilkan objek JSON dengan materi berikut:

{
  "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
        }
      }
    }
  } ]
}

Geocoder sisi server juga menyediakan format XML sebagai alternatif JSON. Untuk contoh lainnya, lihat dokumentasi Geocoding API dan library klien untuk Python dan bahasa lainnya.

Pertimbangan kuota dan biaya

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

Biaya

Batas kuota per hari (QPD) tidak lagi digunakan untuk permintaan geocoding. Sebagai gantinya, setiap permintaan geocoding, baik sisi klien melalui browser atau sisi server melalui layanan web Geocoding API, ditagih dengan harga per satuan. Untuk mengelola biaya penggunaan, sebaiknya batasi kuota harian Anda.

Batas kapasitas

Layanan geocoding memiliki batas kecepatan hingga 50 QPS (kueri per detik), 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 pada waktu yang sama (misalnya, semua 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.

Caching

Lihat Kebijakan Geocoding API terkait caching.

Kapan menggunakan geocoding sisi-klien

Jawabannya singkat "hampir selalu." Alasannya adalah:

  • Respons dan permintaan sisi klien memberikan pengalaman yang lebih cepat dan interaktif bagi pengguna.
  • Permintaan sisi klien dapat menyertakan informasi yang meningkatkan kualitas geocoding: bahasa pengguna, wilayah, dan area pandang.

Secara khusus, geocoding sisi-klien adalah yang terbaik jika geocoding alamat berdasarkan input dari pengguna.

Ada dua arsitektur dasar bagi geocoding sisi-klien:

  • Lakukan geocoding dan tampilkan seluruhnya di browser. Misalnya, pengguna memasukkan alamat di halaman Anda. Aplikasi Anda akan meng-geocode-nya. Kemudian halaman Anda menggunakan geocoding untuk membuat penanda pada peta. Atau aplikasi Anda melakukan beberapa analisis sederhana menggunakan geocode. Tidak ada data yang dikirim ke server Anda. Ini akan mengurangi beban di server Anda.
  • Lakukan geocoding di browser kemudian kirim ke server. Sebagai contoh, pengguna memasukkan alamat di laman Anda. Aplikasi Anda akan melakukan geocoding pada browser. Aplikasi kemudian mengirim data ke server Anda. Server merespons dengan beberapa data, seperti lokasi menarik di sekitar. Hal ini memungkinkan Anda menyesuaikan respons berdasarkan data Anda sendiri.

Kapan menggunakan geocoding sisi-server

Geocoding sisi-server paling baik digunakan untuk aplikasi yang mengharuskan Anda meng-geocoding alamat tanpa input dari klien. Contoh umumnya adalah saat Anda mendapatkan set data yang berasal dari input pengguna secara independen, misalnya jika Anda memiliki kumpulan alamat yang tetap, terbatas, dan diketahui yang memerlukan geocoding. Geocoding sisi server juga bisa berguna sebagai cadangan ketika geocoding sisi klien gagal.

Beberapa kemungkinan masalah adalah peningkatan latensi yang tidak perlu bagi pengguna, dan hasil geocoding dengan kualitas yang lebih rendah daripada sisi klien karena informasi yang tersedia lebih sedikit dalam permintaan.