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 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 langsung melakukan kueri geocoding ke server Google. 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 sebuah alamat, melakukan geocoding, memindah 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 selengkapnya, 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 untuk 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 menentukan strategi yang dijelaskan dalam dokumen ini.

Biaya

Batas kuota per hari (QPD) tidak lagi digunakan untuk permintaan geocoding. Sebagai gantinya, setiap permintaan geocoding, baik dari sisi klien melalui browser atau sisi server melalui layanan web Geocoding API, akan dikenai biaya untuk setiap harga. Untuk mengelola biaya penggunaan, pertimbangkan untuk membatasi kuota harian.

Batas kapasitas

Layanan geocoding dibatasi kapasitasnya hingga 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 mungkin menampilkan error jika semua pengguna membuat permintaan secara bersamaan (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 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 caching.

Kapan menggunakan geocoding sisi-klien

Jawaban singkatnya adalah "hampir selalu". Alasannya adalah:

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

Secara khusus, geocoding sisi klien adalah yang terbaik saat melakukan geocoding pada 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. Selanjutnya, halaman Anda akan menggunakan geocode 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 terhadap browser tersebut. Aplikasi kemudian mengirim data ke server Anda. Server merespons dengan beberapa data, seperti lokasi menarik terdekat. Hal ini memungkinkan Anda menyesuaikan respons berdasarkan data Anda sendiri.

Kapan menggunakan geocoding sisi-server

Geocoding sisi server paling cocok digunakan untuk aplikasi yang mengharuskan Anda melakukan geocoding alamat tanpa input dari klien. Contoh umumnya adalah saat Anda mengambil set data yang tidak bergantung pada input pengguna, misalnya jika Anda memiliki kumpulan alamat yang tetap, terbatas, dan diketahui yang memerlukan geocoding. Geocoding sisi server juga bisa berguna sebagai cadangan jika geocoding sisi klien gagal.

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