Layanan Geocoding

Ringkasan

Geocoding adalah proses konversi alamat (seperti "1600 Amphitheatre Parkway, Mountain View, CA") menjadi koordinat geografis (seperti lintang 37.423021 dan bujur -122.083739), yang dapat Anda gunakan untuk menempatkan penanda atau memosisikan peta.

Geocoding terbalik adalah proses konversi koordinat geografis menjadi alamat yang dapat dibaca manusia (lihat Geocoding terbalik (Pencarian Alamat)).

Anda juga dapat menggunakan geocoder untuk menemukan alamat untuk ID tempat yang diberikan.

Maps JavaScript API menyediakan class Geocoder untuk geocoding dan geocoding terbalik dari input pengguna secara dinamis. Jika Anda ingin melakukan geocoding terhadap alamat statis yang diketahui, lihat layanan web Geocoding.

Memulai

Sebelum menggunakan layanan Geocoding di Maps JavaScript API, pastikan lebih dahulu bahwa Geocoding API diaktifkan di Konsol Google Cloud, dalam project yang sama dengan yang Anda siapkan untuk Maps JavaScript API.

Untuk menampilkan daftar API yang telah diaktifkan:

  1. Buka Google Cloud Console.
  2. Klik tombol Select a project, lalu pilih project yang sama dengan yang Anda siapkan untuk Maps JavaScript API dan klik Open.
  3. Dari daftar API di Dashboard, cari Geocoding API.
  4. Jika sudah melihat API di dalam daftar, artinya Anda sudah siap. Jika API tidak tercantum, aktifkan API tersebut:
    1. Di bagian atas halaman, pilih ENABLE API untuk menampilkan tab Library. Atau, dari menu samping kiri, pilih Library.
    2. Telusuri Geocoding API, lalu pilih dari daftar hasil.
    3. Pilih ENABLE. Setelah proses selesai, Geocoding API akan muncul dalam daftar API di Dashboard.

Harga dan kebijakan

Harga

Mulai 16 Juli 2018, paket harga baru, yaitu bayar sesuai penggunaan, diberlakukan untuk Maps, Rute, dan Tempat. Untuk mempelajari lebih lanjut harga baru dan batas penggunaan layanan Geocoding JavaScript, lihat Penggunaan dan Penagihan untuk Geocoding API.

Kebijakan

Penggunaan layanan Geocoding harus sesuai dengan kebijakan yang dijelaskan untuk Geocoding API.

Permintaan Geocoding

Akses layanan Geocoding bersifat asinkron, karena Google Maps API perlu membuat panggilan ke server eksternal. Oleh karena itu, Anda perlu meneruskan metode callback untuk dieksekusi setelah permintaan diselesaikan. Metode callback ini akan memproses hasilnya. Perhatikan bahwa geocoder mungkin menampilkan lebih dari satu hasil.

Anda mengakses layanan geocoding Google Maps API dalam kode Anda melalui objek konstruktor google.maps.Geocoder. Metode Geocoder.geocode() membuat permintaan ke layanan geocoding, meneruskan literal objek GeocoderRequest yang berisi istilah yang dimasukkan dan metode callback yang akan dieksekusi setelah menerima respons.

Literal objek GeocoderRequest berisi kolom berikut:

{
 address: string,
 location: LatLng,
 placeId: string,
 bounds: LatLngBounds,
 componentRestrictions: GeocoderComponentRestrictions,
 region: string
}

Parameter yang diperlukan: Anda harus menyediakan salah satu, dan hanya satu, dari kolom berikut:

  • address — Alamat yang ingin Anda geocode.
         atau
    locationLatLng (atau LatLngLiteral) yang ingin Anda dapatkan alamat terdekatnya yang dapat dibaca manusia. Geocoder akan melakukan geocoding terbalik. Lihat Geocoding Terbalik untuk informasi selengkapnya.
         atau
    placeId — ID dari tempat yang Anda ingin dapatkan alamat terdekatnya yang dapat dibaca manusia. Lihat selengkapnya tentang cara mengambil alamat untuk ID tempat.

Parameter opsional:

  • boundsLatLngBounds yang akan digunakan untuk membiaskan hasil geocode secara lebih jelas. Parameter bounds ini hanya akan memengaruhi, tidak sepenuhnya membatasi, hasil dari geocoder. Lihat informasi selengkapnya tentang pembiasan area pandang di bawah ini.
  • componentRestrictions — Digunakan untuk membatasi hasil ke area tertentu. Lihat informasi selengkapnya tentang pemfilteran komponen di bawah.
  • region — Kode wilayah, yang ditentukan sebagai subtag wilayah Unicode dua karakter (non-numerik) yang telah ditetapkan. Umumnya, tag ini dipetakan langsung ke nilai dua karakter ccTLD ("domain level teratas") yang sudah dikenal. Parameter region ini hanya akan memengaruhi, tidak sepenuhnya membatasi, hasil dari geocoder. Lihat informasi selengkapnya tentang pembiasan kode wilayah di bawah.
  • extraComputations — Satu-satunya nilai yang diizinkan untuk parameter ini adalah ADDRESS_DESCRIPTORS. Lihat deskripsi alamat untuk mengetahui detail selengkapnya.
  • fulfillOnZeroResults — Memenuhi janji pada status ZERO_RESULT dalam respons. Hal ini mungkin diinginkan karena meskipun tidak ada hasil geocoding, mungkin masih ada kolom tingkat respons tambahan yang ditampilkan. Lihat Fulfill on Zero Results untuk mengetahui detail selengkapnya.

Respons Geocoding

Layanan Geocoding memerlukan metode callback yang akan dieksekusi saat pengambilan hasil geocoder. Callback ini harus meneruskan dua parameter untuk menyimpan kode results dan status, dalam urutan tersebut.

Hasil Geocoding

Objek GeocoderResult mewakili satu hasil geocoding. Permintaan geocode mungkin menampilkan beberapa objek hasil:

results[]: {
 types[]: string,
 formatted_address: string,
 address_components[]: {
   short_name: string,
   long_name: string,
   postcode_localities[]: string,
   types[]: string
 },
 partial_match: boolean,
 place_id: string,
 postcode_localities[]: string,
 geometry: {
   location: LatLng,
   location_type: GeocoderLocationType
   viewport: LatLngBounds,
   bounds: LatLngBounds
 }
}

Kolom-kolom ini dijelaskan di bawah:

  • types[] adalah array yang menunjukkan jenis alamat dari hasil yang ditampilkan. Array ini berisi nol atau beberapa tag yang mengidentifikasi jenis fitur yang ditampilkan dalam hasil. Misalnya, geocode "Chicago" akan menampilkan "lokalitas" yang menunjukkan bahwa "Chicago" adalah kota, dan juga menampilkan "politik" yang menunjukkan bahwa itu adalah entitas politik. Lihat informasi selengkapnya tentang jenis alamat dan jenis komponen alamat di bawah.
  • formatted_address adalah string yang berisi alamat lokasi saat ini yang dapat dibaca manusia.

    Sering kali alamat ini sama dengan alamat pos. Harap ingat bahwa beberapa negara, seperti Inggris Raya, tidak mengizinkan distribusi alamat pos sebenarnya karena adanya pembatasan pemberian lisensi.

    Alamat yang diformat secara logis terdiri dari satu atau beberapa komponen alamat. Misalnya, alamat "111 8th Avenue, New York, NY" terdiri atas komponen berikut: "111" (nomor jalan), "8th Avenue" (rute), "New York" (kota), dan "NY" (negara bagian AS).

    Jangan mengurai alamat berformat secara terprogram. Sebagai gantinya, Anda harus menggunakan komponen alamat individual, yang disertakan oleh respons API selain kolom alamat yang diformat.

  • address_components[] adalah array yang berisi komponen terpisah yang berlaku untuk alamat ini.

    Setiap komponen alamat biasanya berisi kolom berikut:

    • types[] adalah array yang menunjukkan jenis komponen alamat. Lihat daftar jenis yang didukung.
    • long_name adalah deskripsi teks lengkap atau nama komponen alamat seperti yang ditampilkan oleh Geocoder.
    • short_name adalah nama tekstual yang disingkat untuk komponen alamat, jika tersedia. Misalnya, komponen alamat untuk negara bagian Alaska dapat memiliki long_name "Alaska" dan short_name "AK" menggunakan 2 huruf singkatan istilah pos.

    Perhatikan fakta berikut tentang array address_components[] :

    • Array komponen alamat dapat berisi lebih banyak komponen daripada formatted_address.
    • Array tidak harus selalu menyertakan semua entitas politik yang berisi alamat, selain dari yang disertakan dalam formatted_address. Untuk mengambil semua entitas politik yang berisi alamat tertentu, Anda harus menggunakan geocoding terbalik, yang meneruskan garis lintang/bujur alamat sebagai parameter ke permintaan tersebut.
    • Format respons tidak dijamin tetap sama di antara permintaan. Secara khusus, jumlah address_components bervariasi berdasarkan alamat yang diminta dan dapat berubah dari waktu ke waktu untuk alamat yang sama. Komponen dapat mengubah posisi dalam array. Jenis komponen dapat berubah. Komponen tertentu mungkin tidak ada dalam respons berikutnya.

    Lihat informasi selengkapnya tentang jenis alamat dan jenis komponen alamat di bawah.

  • partial_match menunjukkan bahwa geocoder tidak menampilkan kecocokan persis untuk permintaan asli, meskipun jika geocoder dapat menampilkan kecocokan parsial dengan alamat yang diminta. Sebaiknya Anda memeriksa permintaan asal untuk mengetahui keberadaan salah eja dan/atau alamat yang tidak lengkap.

    Kecocokan parsial paling sering terjadi untuk alamat jalan yang tidak ditemukan di lokasi yang Anda teruskan dalam permintaan. Kecocokan parsial juga mungkin ditampilkan jika sebuah permintaan memiliki kecocokan terhadap dua atau beberapa lokasi di daerah yang sama. Misalnya, "Hillpar St, Bristol, UK" akan menampilkan kecocokan sebagian untuk Henry Street dan Henrietta Street. Perhatikan, jika permintaan menyertakan komponen alamat yang salah eja, layanan geocoding mungkin akan menyarankan alamat alternatif. Saran yang terpicu melalui cara ini juga akan dinilai sebagai kecocokan parsial.

  • place_id adalah ID unik suatu tempat, yang bisa digunakan bersama Google API lainnya. Misalnya, Anda dapat menggunakan place_id dengan library Google Places API untuk mendapatkan detail bisnis lokal, seperti nomor telepon, jam buka, ulasan pengguna, dan banyak lagi. Lihat ringkasan ID tempat.
  • postcode_localities[] adalah array yang menunjukkan semua lokalitas yang dimuat dalam kode pos, dan hanya ada jika hasilnya adalah kode pos yang berisi beberapa lokalitas.
  • geometry berisi informasi berikut:

    • location berisi nilai geocode dari garis lintang dan bujur. Perhatikan bahwa kita menampilkan lokasi ini sebagai objek LatLng, bukan sebagai string yang diformat.
    • location_type menyimpan data tambahan tentang lokasi yang ditentukan. Nilai-nilai berikut saat ini didukung:
      • ROOFTOP menunjukkan bahwa hasil yang ditampilkan mencerminkan geocode yang akurat.
      • RANGE_INTERPOLATED menunjukkan bahwa hasil yang ditampilkan mencerminkan perkiraan (biasanya pada jalan) interpolasi antara dua titik tepat (seperti persimpangan). Hasil interpolasi umumnya ditampilkan jika rooftop-geocode tidak tersedia untuk alamat jalan.
      • GEOMETRIC_CENTER menunjukkan bahwa hasil yang ditampilkan adalah pusat geometris dari hasil seperti polyline (misalnya, jalan) atau poligon (wilayah).
      • APPROXIMATE menunjukkan bahwa hasil yang ditunjukkan adalah perkiraan.

    • viewport menyimpan area pandang yang direkomendasikan untuk hasil yang ditampilkan.
    • bounds (ditampilkan secara opsional) menyimpan LatLngBounds yang dapat sepenuhnya berisi hasil yang ditampilkan. Perhatikan, batas-batas ini mungkin tidak cocok dengan area pandang yang direkomendasikan. (Misalnya, San Francisco menyertakan Farallon Islands, yang secara teknis merupakan bagian dari kota, tetapi tidak boleh ditampilkan dalam area pandang.)

Alamat akan ditampilkan oleh Geocoder menggunakan setelan bahasa pilihan browser, atau bahasa yang ditetapkan saat memuat JavaScript API menggunakan parameter language. (Untuk informasi selengkapnya, lihat Pelokalan.)

Jenis Alamat dan Jenis Komponen Alamat

Array types[] dalam GeocoderResult menunjukkan jenis alamat. Array types[] juga dapat ditampilkan dalam GeocoderAddressComponent untuk menunjukkan jenis komponen alamat tertentu. Alamat yang ditampilkan oleh geocoder mungkin memiliki beberapa jenis; jenisnya dapat dianggap sebagai tag. Misalnya, banyak kota diberi tag dengan jenis political dan locality.

Jenis berikut didukung dan ditampilkan oleh geocoder dalam jenis alamat dan jenis komponen alamat:

  • street_address menunjukkan alamat yang akurat.
  • route menunjukkan rute yang telah diberi nama (seperti "US 101").
  • intersection menunjukkan persimpangan utama, biasanya persimpangan dua jalan utama.
  • political menunjukkan entitas politik. Biasanya, jenis ini menunjukkan poligon dari pemerintahan sipil tertentu.
  • country menunjukkan entitas politik nasional, dan biasanya merupakan jenis urutan tertinggi yang ditampilkan oleh Geocoder.
  • administrative_area_level_1 menunjukkan entitas sipil urutan pertama di bawah tingkat negara. Di Amerika Serikat, tingkat administratif ini adalah negara bagian. Tidak semua negara memiliki tingkat administratif ini. Di hampir semua kasus, nama pendek administrative_area_level_1 akan hampir cocok dengan subdivisi ISO 3166-2 dan daftar lainnya yang beredar luas; akan tetapi, hal ini bukan jaminan karena hasil geocoding kita didasarkan pada aneka macam sinyal dan data lokasi.
  • administrative_area_level_2 menunjukkan entitas sipil urutan kedua di bawah tingkat negara. Di Amerika Serikat, tingkat administratif ini adalah county. Tidak semua negara memiliki tingkat administratif ini.
  • administrative_area_level_3 menunjukkan entitas sipil urutan ketiga di bawah tingkat negara. Jenis ini menunjukkan divisi sipil kecil. Tidak semua negara memiliki tingkat administratif ini.
  • administrative_area_level_4 menunjukkan entitas sipil urutan keempat di bawah tingkat negara. Jenis ini menunjukkan divisi sipil kecil. Tidak semua negara memiliki tingkat administratif ini.
  • administrative_area_level_5 menunjukkan entitas sipil urutan kelima di bawah tingkat negara. Jenis ini menunjukkan divisi sipil kecil. Tidak semua negara memiliki tingkat administratif ini.
  • administrative_area_level_6 menunjukkan entitas sipil urutan keenam di bawah tingkat negara. Jenis ini menunjukkan divisi sipil kecil. Tidak semua negara memiliki tingkat administratif ini.
  • administrative_area_level_7 menunjukkan entitas sipil urutan ketujuh di bawah tingkat negara. Jenis ini menunjukkan divisi sipil kecil. Tidak semua negara memiliki tingkat administratif ini.
  • colloquial_area menunjukkan nama alternatif yang biasa digunakan untuk entitas.
  • locality menunjukkan gabungan entitas politik kota besar atau kota kecil.
  • sublocality menunjukkan entitas sipil urutan pertama di bawah lokalitas. Beberapa lokasi dapat menerima salah satu dari jenis tambahan: sublocality_level_1 hingga sublocality_level_5. Setiap tingkat sublokalitas adalah entitas sipil. Angka yang lebih besar menunjukkan area geografis yang lebih kecil.
  • neighborhood menunjukkan lingkungan yang telah diberi nama.
  • premise menunjukkan lokasi yang telah diberi nama, biasanya bangunan atau sekumpulan bangunan dengan nama umum.
  • subpremise menunjukkan entitas yang dapat dialamatkan di bawah tingkat premis, seperti apartemen, unit, atau suite.
  • plus_code menunjukkan referensi lokasi yang dienkode, yang berasal dari lintang dan bujur. Plus Codes dapat digunakan sebagai pengganti alamat di tempat tanpa alamat jelas (jika bangunan tidak diberi nomor atau jalan tidak diberi nama). Lihat https://plus.codes untuk mengetahui detailnya.
  • postal_code menunjukkan kode pos seperti yang biasa digunakan untuk penulisan alamat pos dalam negara tersebut.
  • natural_feature menunjukkan fitur alam terkemuka.
  • airport menunjukkan bandara.
  • park menunjukkan taman yang telah diberi nama.
  • point_of_interest menunjukkan lokasi menarik yang telah diberi nama. Biasanya, "POI" ini adalah entitas lokal terkenal yang tidak mudah dimasukkan ke dalam kategori lain, seperti "Empire State Building" atau "Eiffel Tower".

Daftar kosong dari jenis menunjukkan tidak ada jenis yang diketahui untuk komponen alamat tertentu, misalnya Lieu-dit di Prancis.

Selain yang disebutkan di atas, komponen alamat mungkin menyertakan jenis-jenis di bawah ini.

Catatan: Daftar ini tidak lengkap dan dapat berubah.

  • floor menunjukkan lantai alamat gedung.
  • establishment biasanya menunjukkan tempat yang belum dikategorikan.
  • landmark menunjukkan tempat terdekat yang digunakan sebagai referensi, untuk membantu navigasi.
  • point_of_interest menunjukkan lokasi menarik yang telah diberi nama.
  • parking menunjukkan tempat parkir atau gedung parkir.
  • post_box menunjukkan kotak pos tertentu.
  • postal_town menunjukkan pengelompokkan area geografis, seperti locality dan sublocality, yang digunakan untuk alamat surat di beberapa negara.
  • room menunjukkan ruang pada alamat gedung.
  • street_number menunjukkan nomor jalan yang akurat.
  • bus_station, train_station dan transit_station menunjukkan lokasi perhentian bus, kereta api, atau transportasi umum.

Kode Status

Kode status mungkin menampilkan salah satu nilai berikut:

  • "OK" menunjukkan bahwa tidak terjadi error; alamat berhasil diuraikan dan setidaknya satu geocode ditampilkan.
  • "ZERO_RESULTS" menunjukkan bahwa geocoding berhasil, tetapi ditampilkan tanpa hasil. Hal ini dapat terjadi jika address yang tidak ada diteruskan ke geocoder.
  • "OVER_QUERY_LIMIT" menunjukkan bahwa Anda melebihi kuota.
  • "REQUEST_DENIED" menunjukkan permintaan Anda ditolak. Halaman web tidak diizinkan untuk menggunakan geocoder.
  • "INVALID_REQUEST" secara umum menunjukkan bahwa kueri (address, components, atau latlng) tidak ada.
  • "UNKNOWN_ERROR" menunjukkan bahwa permintaan tidak dapat diproses karena error server. Permintaan mungkin berhasil jika Anda mencoba lagi.
  • "ERROR" menunjukkan bahwa waktu permintaan habis atau terjadi masalah saat menghubungi server Google. Permintaan mungkin berhasil jika Anda mencoba lagi.

Dalam contoh ini, kita melakukan geocoding terhadap suatu alamat dan menempatkan penanda pada nilai garis lintang dan garis bujur yang ditampilkan. Perhatikan, pengendali diteruskan sebagai literal fungsi anonim.

  var geocoder;
  var map;
  function initialize() {
    geocoder = new google.maps.Geocoder();
    var latlng = new google.maps.LatLng(-34.397, 150.644);
    var mapOptions = {
      zoom: 8,
      center: latlng
    }
    map = new google.maps.Map(document.getElementById('map'), mapOptions);
  }

  function codeAddress() {
    var address = document.getElementById('address').value;
    geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == 'OK') {
        map.setCenter(results[0].geometry.location);
        var marker = new google.maps.Marker({
            map: map,
            position: results[0].geometry.location
        });
      } else {
        alert('Geocode was not successful for the following reason: ' + status);
      }
    });
  }

<body onload="initialize()">
 <div id="map" style="width: 320px; height: 480px;"></div>
  <div>
    <input id="address" type="textbox" value="Sydney, NSW">
    <input type="button" value="Encode" onclick="codeAddress()">
  </div>
</body>

Lihat contoh.

Pembiasan Area Pandang

Anda dapat menginstruksikan Layanan Geocoding agar lebih memilih hasil dalam area pandang tertentu (dinyatakan dalam bentuk kotak pembatas). Anda melakukannya dengan menetapkan parameter bounds dalam literal objek GeocoderRequest untuk menentukan batas area pandang ini. Perhatikan bahwa pembiasan hanya mengutamakan hasil dalam batas-batas tersebut; Jika hasil yang lebih relevan berada di luar batas tersebut, hasil tersebut mungkin akan disertakan.

Misalnya, geocode untuk "Winnetka" biasanya akan menampilkan daerah pinggiran kota Chicago ini:

{
  "types":["locality","political"],
  "formatted_address":"Winnetka, IL, USA",
  "address_components":[{
    "long_name":"Winnetka",
    "short_name":"Winnetka",
    "types":["locality","political"]
  },{
    "long_name":"Illinois",
    "short_name":"IL",
    "types":["administrative_area_level_1","political"]
  },{
    "long_name":"United States",
    "short_name":"US",
    "types":["country","political"]
  }],
  "geometry":{
    "location":[ -87.7417070, 42.1083080],
    "location_type":"APPROXIMATE"
  },
  "place_id": "ChIJW8Va5TnED4gRY91Ng47qy3Q"
}

Namun, menetapkan parameter bounds yang mendefinisikan kotak pembatas untuk hasil San Fernando Valley, Los Angeles dalam geocode ini akan menampilkan daerah sekitar bernama "Winnetka" di lokasi tersebut:

{
  "types":["sublocality","political"],
  "formatted_address":"Winnetka, California, USA",
  "address_components":[{
    "long_name":"Winnetka",
    "short_name":"Winnetka",
    "types":["sublocality","political"]
  },{
    "long_name":"Los Angeles",
    "short_name":"Los Angeles",
    "types":["administrative_area_level_3","political"]
  },{
    "long_name":"Los Angeles",
    "short_name":"Los Angeles",
    "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"]
  }],
  "geometry":{
    "location": [34.213171,-118.571022],
    "location_type":"APPROXIMATE"
  },
  "place_id": "ChIJ0fd4S_KbwoAR2hRDrsr3HmQ"
}

Pembiasan Kode Wilayah

Anda dapat menetapkan Layanan Geocoding agar menampilkan hasil yang dibiaskan ke wilayah tertentu secara eksplisit menggunakan parameter region. Parameter ini mengambil kode wilayah, yang ditetapkan sebagai subtag wilayah Unicode dua karakter (non-numerik). Tag ini dipetakan langsung ke nilai yang berisi dua karakter ccTLD ("domain level teratas") yang sudah dikenal, seperti "uk" dalam "co.uk" sebagai contohnya. Dalam beberapa kasus, tag region juga mendukung kode ISO-3166-1, yang terkadang berbeda dari nilai ccTLD (misalnya "GB" untuk "Great Britain").

Saat menggunakan parameter region:

  • Tentukan satu negara atau wilayah saja. Beberapa nilai akan diabaikan, dan dapat menyebabkan permintaan gagal.
  • Hanya gunakan subtag wilayah dua karakter (format Unicode CLDR). Semua input lainnya akan menghasilkan error.
  • Hanya negara dan wilayah yang tercantum dalam Detail Cakupan Google Maps Platform yang didukung.

Permintaan geocoding dapat dikirim untuk setiap domain yang menjadi tempat aplikasi utama Google Maps menawarkan geocoding. Perhatikan bahwa pembiasan hanya mengutamakan hasil untuk domain tertentu; jika ada hasil yang lebih relevan di luar domain ini, hasil tersebut mungkin disertakan.

Misalnya, geocode untuk "Toledo" menampilkan hasil ini, karena domain default untuk Layanan Geocoding ditetapkan ke United States:

{
  "types":["locality","political"],
  "formatted_address":"Toledo, OH, USA",
  "address_components":[{
    "long_name":"Toledo",
    "short_name":"Toledo",
    "types":["locality","political"]
  },{
    "long_name":"Ohio",
    "short_name":"OH",
    "types":["administrative_area_level_1","political"]
  },{
    "long_name":"United States",
    "short_name":"US",
    "types":["country","political"]
  }],
  "place_id": "ChIJeU4e_C2HO4gRRcM6RZ_IPHw"
}

Geocode untuk "Toledo" dengan kolom region yang ditetapkan ke 'es' (Spanyol) akan menampilkan kota Spanyol:

{
  "types":["locality","political"],
  "formatted_address":"Toledo, España",
  "address_components":[{
    "long_name":"Toledo",
    "short_name":"Toledo",
    "types":["locality","political"]
  },{
    "long_name":"Toledo",
    "short_name":"TO",
    "types":["administrative_area_level_2","political"]
  },{
    "long_name":"Castilla-La Mancha",
    "short_name":"CM",
    "types":["administrative_area_level_1","political"]
  },{
    "long_name":"España",
    "short_name":"ES",
    "types":["country","political"]
  }],
  "place_id": "ChIJ8f21C60Lag0R_q11auhbf8Y"
}

Pemfilteran Komponen

Anda dapat menetapkan Layanan Geocoding agar menampilkan hasil alamat yang dibatasi pada area tertentu, menggunakan filter komponen. Tentukan filter dalam parameter componentRestrictions. Nilai-nilai filter mendukung metode yang sama untuk koreksi ejaan dan kecocokan parsial seperti permintaan geocoding lainnya.

Geocoder hanya menampilkan hasil yang cocok dengan semua filter komponen. Artinya, geocoder mengevaluasi spesifikasi filter sebagai AND, bukan OR.

Filter komponen terdiri dari satu atau beberapa item berikut:

  • route cocok dengan nama panjang atau nama pendek rute.
  • locality cocok dengan jenis lokalitas dan sublokalitas.
  • administrativeArea cocok dengan semua tingkat wilayah administratif.
  • postalCode cocok dengan kode pos dan awalan kode pos.
  • country cocok dengan nama negara atau kode negara ISO 3166-1 dua huruf. Catatan: API mengikuti standar ISO untuk mendefinisikan negara, dan pemfilteran akan berfungsi maksimal jika menggunakan kode ISO negara yang sesuai.

Contoh berikut menunjukkan penggunaan parameter componentRestrictions untuk memfilter menurut country dan postalCode:

function codeAddress() {
geocoder.geocode({
  componentRestrictions: {
    country: 'AU',
    postalCode: '2000'
  }
}, function(results, status) {
  if (status == 'OK') {
    map.setCenter(results[0].geometry.location);
    var marker = new google.maps.Marker({
      map: map,
      position: results[0].geometry.location
    });
  } else {
    window.alert('Geocode was not successful for the following reason: ' + status);
  }
});
}

Memenuhi Hasil Nol

Untuk geocoding terbalik, promise akan rusak di status=ZERO_RESULTS secara default. Namun, kolom tingkat respons tambahan plus_code dan address_descriptor mungkin masih diisi dalam kasus ini. Jika true disediakan untuk parameter fulfillOnZeroResults, promise tidak akan rusak dan kolom tambahan ini dapat diakses dari promise jika ada.

Berikut adalah contoh perilaku ini untuk lintang/bujur di Antartika. Meskipun tidak ada hasil geocoding balik, kita tetap dapat mencetak kode plus dalam promise jika menetapkan fulfillOnZeroResults=true.

    function addressDescriptorReverseGeocoding() {
      var latlng = new google.maps.LatLng(-75.290330, 38.653861);
      geocoder
        .geocode({
          'location': latlng,
          'fulfillOnZeroResults': true,
        })
        .then((response) => {
          console.log(response.plus_code);
        })
        .catch((error) => {
          window.alert(`Error`);
        });
    }
  

Deskripsi Alamat

Deskripsi alamat menyertakan informasi tambahan yang membantu mendeskripsikan lokasi menggunakan penanda dan area. Lihat demo deskripsi alamat untuk menjelajahi fitur ini.

Deskripsi alamat dapat diaktifkan melalui penggunaan parameter extraComputations. Sertakan extra_computations=ADDRESS_DESCRIPTORS dalam permintaan geocoding, permintaan geocoding terbalik, atau permintaan geocoding tempat untuk menerima deskripsi alamat dalam respons Anda.

Contoh dalam geocoding tempat

Kueri berikut berisi alamat tempat di Delhi.

function addressDescriptorPlaceIdLookup() {
  geocoder.geocode({ 
    'placeId': 'ChIJyxAX8Bj9DDkRgBfAnBYa66Q',
    'extraComputations': ['ADDRESS_DESCRIPTORS']
    }, function(results, status) {
    if (status == 'OK') {
      console.log(results[0].address_descriptor);
    } else {
      window.alert('Geocode was not successful for the following reason: ' + status);
    }
  });
}

Contoh dalam geocoding terbalik

Kueri berikut berisi nilai lintang/bujur untuk lokasi di Delhi.

    function addressDescriptorReverseGeocoding() {
      var latlng = new google.maps.LatLng(28.640964,77.235875);
      geocoder
        .geocode({
          'location': latlng,
          'extraComputations': ["ADDRESS_DESCRIPTORS"],
        })
        .then((response) => {
          console.log(response.address_descriptor);
        })
        .catch((error) => {
          window.alert(`Error`);
        });
    }
  

Contoh Deskripsi Alamat

Contoh address_descriptor adalah sebagai berikut.

  {
    "address_descriptor" : {
       "areas" : [
          {
             "containment" : "OUTSKIRTS",
             "display_name" : {
                "language_code" : "en",
                "text" : "Turkman Gate"
             },
             "place_id" : "ChIJ_7LLvyb9DDkRMKKxP9YyXgs"
          },
          {
             "containment" : "OUTSKIRTS",
             "display_name" : {
                "language_code" : "en",
                "text" : "Chandni Chowk"
             },
             "place_id" : "ChIJWcXciBr9DDkRUb4dCDykTwI"
          },
          {
             "containment" : "NEAR",
             "display_name" : {
                "language_code" : "en",
                "text" : "Katar Ganj"
             },
             "place_id" : "ChIJH3cWUyH9DDkRaw-9CjvcRvY"
          }
       ],
       "landmarks" : [
          {
             "display_name" : {
                "language_code" : "en",
                "text" : "Delite Cinema"
             },
             "straight_line_distance_meters" : 29.9306755065918,
             "place_id" : "ChIJLfiYDCT9DDkROoEa7NdupUM",
             "travel_distance_meters" : 418.7794799804688,
             "spatial_relationship" : "ACROSS_THE_ROAD",
             "types" : [ "establishment", "movie_theater", "point_of_interest" ]
          },
          {
             "display_name" : {
                "language_code" : "en",
                "text" : "YES Bank"
             },
             "straight_line_distance_meters" : 66.83731079101562,
             "place_id" : "ChIJFYHM3yb9DDkRRKGkZl2mpSQ",
             "travel_distance_meters" : 489.0340270996094,
             "spatial_relationship" : "DOWN_THE_ROAD",
             "types" : [ "bank", "establishment", "finance", "point_of_interest" ]
          },
          {
             "display_name" : {
                "language_code" : "en",
                "text" : "UCO Bank"
             },
             "straight_line_distance_meters" : 25.38849639892578,
             "place_id" : "ChIJ-c6_wCb9DDkRjIk1LeqRtGM",
             "travel_distance_meters" : 403.2246398925781,
             "spatial_relationship" : "ACROSS_THE_ROAD",
             "types" : [ "atm", "bank", "establishment", "finance", "point_of_interest" ]
          },
          {
             "display_name" : {
                "language_code" : "en",
                "text" : "Delhi By Cycle Meeting Point"
             },
             "straight_line_distance_meters" : 44.02867126464844,
             "place_id" : "ChIJNxVfkSb9DDkRJD22l-eGFdM",
             "travel_distance_meters" : 97.41281890869141,
             "spatial_relationship" : "AROUND_THE_CORNER",
             "types" : [
                "establishment",
                "point_of_interest",
                "tourist_attraction",
                "travel_agency"
             ]
          },
          {
             "display_name" : {
                "language_code" : "en",
                "text" : "Axis Bank Branch"
             },
             "straight_line_distance_meters" : 102.3495178222656,
             "place_id" : "ChIJr3uaDCT9DDkR8roHTVSn1x4",
             "travel_distance_meters" : 330.8566284179688,
             "spatial_relationship" : "DOWN_THE_ROAD",
             "types" : [ "bank", "establishment", "finance", "point_of_interest" ]
          }
       ]
    }
  }

Ada dua array di setiap objek address_descriptor: landmarks dan areas. Array landmarks berisi maksimal 5 hasil yang diberi peringkat berdasarkan urutan relevansi dengan mempertimbangkan kedekatan dengan koordinat yang diminta, prevalensi penanda dan visibilitasnya. Setiap hasil penanda berisi nilai berikut:

  • place_id adalah ID tempat dari hasil penanda. Lihat ringkasan ID tempat.
  • display_name adalah nama tampilan penanda dan berisi language_code dan text.
  • straight_line_distance_meters adalah jarak titik ke titik dalam meter antara koordinat input dan hasil penanda.
  • travel_distance_meters adalah jarak dalam meter yang ditempuh melalui jaringan jalan (mengabaikan pembatasan jalan) antara koordinat input dan hasil penanda.
  • spatial_relationship adalah estimasi hubungan antara koordinat input dan hasil penanda:
    • "NEAR" adalah hubungan default jika tidak ada satu pun dari hal berikut yang berlaku.
    • "WITHIN" jika koordinat input berada dalam batas struktur yang terkait dengan penanda.
    • "BESIDE" jika koordinat input langsung berdekatan dengan penanda atau titik akses penanda.
    • "ACROSS_THE_ROAD" jika koordinat input berada tepat di seberang penanda di sisi lain rute.
    • "DOWN_THE_ROAD" jika koordinat input berada di sepanjang rute yang sama dengan penanda, tetapi bukan "BESIDES" atau "ACROSS_THE_ROAD".
    • "AROUND_THE_CORNER" jika koordinat input berada di sepanjang rute yang tegak lurus dengan penanda (dibatasi untuk satu belokan).
    • "BEHIND" jika koordinat input secara spasial dekat dengan penanda, tetapi jauh dari titik aksesnya.
  • types adalah Jenis tempat penanda.

Objek areas berisi hingga 3 respons dan membatasi diri pada tempat yang mewakili wilayah kecil, seperti lingkungan, sublokalitas, dan kompleks besar. Area yang berisi koordinat yang diminta akan dicantumkan terlebih dahulu dan diurutkan dari terkecil hingga terbesar. Setiap hasil areas berisi nilai berikut:

  • place_id adalah ID tempat dari hasil area. Lihat ringkasan ID tempat.
  • display_name adalah nama tampilan area dan berisi language_code dan text.
  • containment adalah estimasi hubungan pembatasan antara koordinat input dan hasil area:
    • "NEAR" adalah hubungan default jika tidak ada satu pun dari hal berikut yang berlaku.
    • "WITHIN" jika koordinat input berada di dekat pusat area.
    • "OUTSKIRTS" jika koordinat input berada di dekat tepi area.

Cakupan Deskripsi Alamat

Fitur ini hanya tersedia di negara tertentu.

Ini adalah fitur Pratinjau dan kami akan menghargai masukan Anda. Kirim email ke address-descriptors-feedback@google.com.

Geocoding Terbalik (Pencarian Alamat)

Istilah geocoding umumnya mengacu pada proses menerjemahkan alamat yang dapat dibaca manusia menjadi suatu lokasi pada peta. Proses menerjemahkan terbalik suatu lokasi peta menjadi alamat yang dapat dibaca manusia dikenal sebagai geocoding terbalik.

Sebagai ganti memberikan address tekstual, berikan sepasang garis lintang/bujur yang dipisahkan koma dalam parameter location.

Contoh berikut melakukan geocoding terhadap nilai garis lintang/bujur dan memusatkan peta di lokasi tersebut, yang memunculkan jendela info berisi alamat yang telah diformat:

TypeScript

function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 8,
      center: { lat: 40.731, lng: -73.997 },
    }
  );
  const geocoder = new google.maps.Geocoder();
  const infowindow = new google.maps.InfoWindow();

  (document.getElementById("submit") as HTMLElement).addEventListener(
    "click",
    () => {
      geocodeLatLng(geocoder, map, infowindow);
    }
  );
}

function geocodeLatLng(
  geocoder: google.maps.Geocoder,
  map: google.maps.Map,
  infowindow: google.maps.InfoWindow
) {
  const input = (document.getElementById("latlng") as HTMLInputElement).value;
  const latlngStr = input.split(",", 2);
  const latlng = {
    lat: parseFloat(latlngStr[0]),
    lng: parseFloat(latlngStr[1]),
  };

  geocoder
    .geocode({ location: latlng })
    .then((response) => {
      if (response.results[0]) {
        map.setZoom(11);

        const marker = new google.maps.Marker({
          position: latlng,
          map: map,
        });

        infowindow.setContent(response.results[0].formatted_address);
        infowindow.open(map, marker);
      } else {
        window.alert("No results found");
      }
    })
    .catch((e) => window.alert("Geocoder failed due to: " + e));
}

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

JavaScript

function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 8,
    center: { lat: 40.731, lng: -73.997 },
  });
  const geocoder = new google.maps.Geocoder();
  const infowindow = new google.maps.InfoWindow();

  document.getElementById("submit").addEventListener("click", () => {
    geocodeLatLng(geocoder, map, infowindow);
  });
}

function geocodeLatLng(geocoder, map, infowindow) {
  const input = document.getElementById("latlng").value;
  const latlngStr = input.split(",", 2);
  const latlng = {
    lat: parseFloat(latlngStr[0]),
    lng: parseFloat(latlngStr[1]),
  };

  geocoder
    .geocode({ location: latlng })
    .then((response) => {
      if (response.results[0]) {
        map.setZoom(11);

        const marker = new google.maps.Marker({
          position: latlng,
          map: map,
        });

        infowindow.setContent(response.results[0].formatted_address);
        infowindow.open(map, marker);
      } else {
        window.alert("No results found");
      }
    })
    .catch((e) => window.alert("Geocoder failed due to: " + e));
}

window.initMap = initMap;
Lihat contoh

Mencoba Contoh

Perhatikan bahwa dalam contoh sebelumnya kita menampilkan hasil pertama dengan memilih results[0]. Geocoder terbalik sering kali menampilkan lebih dari satu hasil. Alamat yang telah dibuat geocode-nya tidak hanya alamat pos, melainkan cara apa saja untuk menamai lokasi secara geografis. Misalnya, saat melakukan geocoding terhadap suatu titik di kota Chicago, titik yang diberi geocode mungkin akan diberi label sebagai alamat jalan, sebagai kota (Chicago), sebagai negara bagian (Illinois), atau sebagai negara (Amerika Serikat). Semua adalah alamat untuk geocoder tersebut. Geocoder terbalik akan menampilkan semua hasil ini.

Geocoder terbalik akan mencocokkan entitas politik (negara, provinsi, kota dan lingkungan), alamat jalan, dan kode pos.

Berikut adalah contoh daftar alamat yang mungkin dikembalikan oleh kueri di atas:

results[0].formatted_address: "277 Bedford Ave, Brooklyn, NY 11211, USA"
results[1].formatted_address: "Grand St/Bedford Av, Brooklyn, NY 11211, USA"
results[2].formatted_address: "Williamsburg, Brooklyn, NY, USA"
results[3].formatted_address: "Brooklyn, NY, USA"
results[4].formatted_address: "New York, NY, USA"
results[5].formatted_address: "Brooklyn, NY 11211, USA"
results[6].formatted_address: "Kings County, NY, USA"
results[7].formatted_address: "New York-Northern New Jersey-Long Island, NY-NJ-PA, USA"
results[8].formatted_address: "New York Metropolitan Area, USA"
results[9].formatted_address: "New York, USA"

Alamat akan ditampilkan dengan urutan dari yang paling cocok hingga yang paling tidak cocok. Biasanya, alamat yang lebih akurat akan menjadi hasil yang paling terlihat, seperti dalam kasus ini. Perhatikan bahwa kita menampilkan berbagai jenis alamat, dari alamat yang paling spesifik hingga entitas politik yang kurang spesifik seperti lingkungan, kota, wilayah, negara bagian, dsb. Jika Anda ingin mencocokkan dengan alamat yang lebih umum, sebaiknya Anda memeriksa kolom results[].types.

Catatan: Geocoding terbalik bukanlah ilmu pasti. Geocoder akan mencoba untuk menemukan lokasi alamat yang paling dekat dalam toleransi tertentu.

Mengambil Alamat untuk ID Tempat

Sediakan placeId guna menemukan alamat untuk ID tempat yang diberikan. ID tempat adalah sebuah ID unik yang dapat digunakan bersama Google API lainnya. Misalnya, Anda dapat menyediakan placeId yang ditampilkan oleh Roads API untuk mendapatkan alamat titik yang telah diikat. Untuk informasi selengkapnya tentang ID tempat, lihat ringkasan ID tempat.

Jika Anda menyediakan placeId, permintaan tidak boleh berisi salah satu kolom berikut:

  • address
  • latLng
  • location
  • componentRestrictions

Contoh berikut menerima ID tempat, menemukan alamat yang sesuai, dan memusatkan peta di lokasi tersebut. Contoh ini juga akan memunculkan jendela info yang menampilkan alamat terformat untuk tempat yang relevan:

TypeScript

// Initialize the map.
function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 8,
      center: { lat: 40.72, lng: -73.96 },
    }
  );
  const geocoder = new google.maps.Geocoder();
  const infowindow = new google.maps.InfoWindow();

  (document.getElementById("submit") as HTMLElement).addEventListener(
    "click",
    () => {
      geocodePlaceId(geocoder, map, infowindow);
    }
  );
}

// This function is called when the user clicks the UI button requesting
// a geocode of a place ID.
function geocodePlaceId(
  geocoder: google.maps.Geocoder,
  map: google.maps.Map,
  infowindow: google.maps.InfoWindow
) {
  const placeId = (document.getElementById("place-id") as HTMLInputElement)
    .value;

  geocoder
    .geocode({ placeId: placeId })
    .then(({ results }) => {
      if (results[0]) {
        map.setZoom(11);
        map.setCenter(results[0].geometry.location);

        const marker = new google.maps.Marker({
          map,
          position: results[0].geometry.location,
        });

        infowindow.setContent(results[0].formatted_address);
        infowindow.open(map, marker);
      } else {
        window.alert("No results found");
      }
    })
    .catch((e) => window.alert("Geocoder failed due to: " + e));
}

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

JavaScript

// Initialize the map.
function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 8,
    center: { lat: 40.72, lng: -73.96 },
  });
  const geocoder = new google.maps.Geocoder();
  const infowindow = new google.maps.InfoWindow();

  document.getElementById("submit").addEventListener("click", () => {
    geocodePlaceId(geocoder, map, infowindow);
  });
}

// This function is called when the user clicks the UI button requesting
// a geocode of a place ID.
function geocodePlaceId(geocoder, map, infowindow) {
  const placeId = document.getElementById("place-id").value;

  geocoder
    .geocode({ placeId: placeId })
    .then(({ results }) => {
      if (results[0]) {
        map.setZoom(11);
        map.setCenter(results[0].geometry.location);

        const marker = new google.maps.Marker({
          map,
          position: results[0].geometry.location,
        });

        infowindow.setContent(results[0].formatted_address);
        infowindow.open(map, marker);
      } else {
        window.alert("No results found");
      }
    })
    .catch((e) => window.alert("Geocoder failed due to: " + e));
}

window.initMap = initMap;
Lihat contoh

Mencoba Contoh