Mengoptimalkan Penggunaan Kuota Saat Geocoding

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

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

Contoh geocoding sisi-klien dan sisi-server

Berikut adalah contoh geocoding sisi klien yang membutuhkan , melakukan geocode-nya, menggerakkan pusat peta ke lokasi itu, dan menambahkan sebuah 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 Maps JavaScript API dokumentasi tambahan.

Berikut ini contoh penggunaan Python untuk melakukan sisi server geocoding:

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 API Geocoding dokumentasi dan library klien untuk Python dan bahasa lainnya.

Pertimbangan kuota dan biaya

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

Biaya

Batas kuota per hari (QPD) tidak lagi digunakan untuk permintaan geocoding. Sebaliknya, setiap permintaan geocoding, apakah sisi klien melalui browser atau sisi server melalui Layanan web Geocoding API, adalah ditagih dengan harga per harga. Untuk mengelola biaya penggunaan, pertimbangkan membatasi kuota harian.

Batas kapasitas

Layanan geocoding dibatasi kecepatannya 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 dalam aplikasi seluler, permintaan Anda dapat mengembalikan pesan {i>error<i} jika semua pengguna Anda membuat permintaan pada saat yang sama (misalnya, semua pada detik yang sama dari menit). Untuk menghindarinya, pertimbangkan salah satu dari berikut ini:

  • Tambahkan interval acak pada permintaan Anda (geletar). Memastikan permintaan acak di seluruh basis pengguna Anda.
  • Jika mengembangkan untuk Android, gunakan atribut inexact berulang.
  • Jika mengembangkan untuk Android, pilih lokasi yang sesuai strategi.

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 layanan interaktif bagi pengguna.
  • Permintaan sisi klien bisa menyertakan informasi yang meningkatkan geocoding kualitas: bahasa pengguna, wilayah, dan area pandang.

Khususnya, geocoding sisi klien adalah yang terbaik saat melakukan geocoding alamat berdasarkan input dari pengguna.

Ada dua arsitektur dasar bagi geocoding sisi-klien:

  • Lakukan geocoding dan tampilkan seluruhnya di browser. Contohnya, pengguna memasukkan alamat di halaman Anda. Aplikasi Anda akan meng-geocode-nya. Selanjutnya halaman Anda menggunakan geocode untuk membuat penanda pada peta. Atau aplikasi Anda melakukan 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. Permohonan Anda akan melakukan geocoding terhadapnya di browser. Aplikasi kemudian mengirim data ke server Anda. Tujuan server merespons dengan beberapa data, seperti lokasi menarik di sekitar. Ini memungkinkan Anda menyesuaikan respons berdasarkan data Anda sendiri.

Kapan menggunakan geocoding sisi-server

Geocoding sisi-server paling tepat digunakan untuk aplikasi yang mengharuskan Anda melakukan geocoding terhadap alamat tanpa input dari klien. Contoh umum adalah ketika Anda mendapatkan {i>dataset<i} yang tidak bergantung pada input pengguna, misalnya jika Anda memiliki serangkaian data yang tetap, terbatas, dan diketahui yang memerlukan geocoding. Geocoding sisi server bisa juga berguna sebagai cadangan bila geocoding sisi-klien gagal.

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