Pelajari cara memigrasikan penerapan Places API atau Class Place yang ada ke komponen Kit UI Places.
Sasaran panduan ini
Panduan ini ditujukan bagi developer yang sudah memiliki implementasi menggunakan Places API dan tertarik untuk memperbarui kode mereka agar menggunakan Places UI Kit. Akan sangat membantu jika Anda sudah:
- Membuat permintaan HTTP ke endpoint Places API (Baru atau Lama).
- Menggunakan Class Place dalam Maps JavaScript API.
- Menangani respons API untuk merender informasi tempat di UI aplikasi web Anda.
Prasyarat
Aktifkan Places UI Kit di Project Google Cloud Anda. Anda dapat terus menggunakan kunci API yang ada, atau membuat kunci API baru untuk Places UI Kit. Lihat Menggunakan Kunci API untuk mengetahui informasi selengkapnya, termasuk membatasi kunci.
Memperbarui Pemuatan Maps JavaScript API
Kit UI Places memerlukan metode Dynamic Library Import untuk memuat Maps JavaScript API. Jika Anda menggunakan tag pemuatan skrip langsung, tag ini harus diperbarui.
Setelah memperbarui skrip pemuatan untuk Maps JavaScript API, impor library yang diperlukan untuk menggunakan Places UI Kit.
Mengimplementasikan Elemen Place Details
Elemen Place Details dan Elemen Place Details Compact adalah elemen HTML yang merender detail untuk suatu tempat.
Penerapan Saat Ini
- Anda melakukan panggilan Place Details menggunakan permintaan HTTP, atau menggunakan Class Place JavaScript API.
- Anda mengurai respons API, dan menampilkan detail tempat menggunakan HTML dan CSS.
Migrasi ke Elemen Place Details
Mengubah Struktur HTML
Identifikasi penampung HTML tempat detail tempat dirender. Ganti elemen HTML kustom Anda (div, span untuk nama, alamat, foto, dll.) dengan HTML Elemen Place Details.
Ada dua elemen yang dapat dipilih:
- Elemen Ringkas Place Details
- Elemen Place Details
Untuk informasi selengkapnya tentang elemen yang akan digunakan, lihat Elemen Place Details.
HTML yang ada mungkin terlihat seperti ini.
<div id="my-place-details-container">
<h2 id="place-name"></h2>
<p id="place-address"></p>
<img id="place-photo" src="" alt="Place photo">
<!-- ... more custom elements -->
</div>
Contoh HTML baru, yang secara eksplisit menyatakan konten yang akan ditampilkan:
<gmp-place-details-compact orientation="horizontal" truncation-preferred style="display: none;">
<gmp-place-details-place-request></gmp-place-details-place-request>
<gmp-place-content-config>
<gmp-place-media lightbox-preferred></gmp-place-media>
<gmp-place-address></gmp-place-address>
<gmp-place-rating></gmp-place-rating>
<gmp-place-type></gmp-place-type>
<gmp-place-price></gmp-place-price>
<gmp-place-accessible-entrance-icon></gmp-place-accessible-entrance-icon>
<gmp-place-open-now-status></gmp-place-open-now-status>
</gmp-place-content-config>
</gmp-place-details-compact>
Menyesuaikan Logika JavaScript
Logika yang ada
Logika yang ada kemungkinan melibatkan:
- Mengambil ID Tempat.
- Menggunakan
PlacesService().getDetails()atau melakukan panggilan layanan web. - Menentukan array kolom (untuk JS API) atau FieldMask (untuk layanan web) untuk meminta data tertentu.
- Dalam resolusi callback, pilih elemen HTML secara manual dan isi dengan data yang diterima.
Berikut adalah contoh cara Anda menerapkan Place Details:
async function getPlaceDetails(placeId) {
const { Place } = await google.maps.importLibrary('places');
// Use place ID to create a new Place instance.
const place = new Place({
id: placeId
});
await place.fetchFields({
fields: ['displayName', 'formattedAddress', 'location'],
});
// Log the result
console.log(place.displayName);
console.log(place.formattedAddress);
}
Logika baru
Logika baru Anda akan melibatkan:
- Ambil ID Tempat atau Objek Tempat Anda.
- Dapatkan referensi ke elemen
<gmp-place-details-place-request>. - Teruskan ID Tempat atau Objek Tempat ke properti tempat di elemen
<gmp-place-details-place-request>.
Berikut adalah contoh cara menerapkan kit UI Place Details dalam logika JavaScript Anda. Dapatkan referensi ke Elemen Place Details. Jika ada, dapatkan referensi ke elemen Place Request Place Details, dan tetapkan properti tempat menggunakan ID Tempat. Dalam contoh kode HTML di atas, gaya Elemen Place Details ditetapkan ke display: none. Nilai ini diperbarui menjadi display:
block.
function displayPlaceDetailsWithUIKit(placeId) {
const placeDetailsElement = document.querySelector('gmp-place-details-compact');
if (placeDetailsElement) {
const placeDetailsRequest = document.querySelector('gmp-place-details-place-request');
// Configure the element with the Place ID
placeDetailsRequest.place = placeId
placeDetailsElement.style.display = 'block';
console.log("PlaceDetailsElement configured for place:", placeId);
} else {
console.error("PlaceDetailsElement not found in the DOM.");
}
}
// Example usage:
const placeId = 'ChIJC8HakaIRkFQRiOgkgdHmqkk';
displayPlaceDetailsWithUIKit(placeId);
Mengimplementasikan Elemen Place Search
Elemen Place Search adalah elemen HTML yang merender hasil penelusuran tempat dalam daftar.
Penerapan Saat Ini
- Anda melakukan Text Search atau Nearby Search menggunakan permintaan HTTP, atau menggunakan Class Place JavaScript API.
- Anda menentukan parameter kueri, pembatasan atau bias lokasi, jenis, dan kolom yang diminta menggunakan FieldMask.
- Anda mengurai respons API, melakukan iterasi melalui array tempat, dan membuat item daftar HTML secara manual.
Migrasi ke Elemen Place Search
Mengubah Struktur HTML
Identifikasi penampung HTML tempat Anda merender daftar tempat. Ganti elemen HTML kustom Anda (div, span untuk nama, alamat, dll.) dengan elemen html Elemen Place Search.
HTML yang ada mungkin terlihat seperti ini:
<div id="search-results-area">
<h3>Nearby Places:</h3>
<ul id="manual-places-list">
<!-- JavaScript would dynamically insert list items here -->
<!-- Example of what JS might generate:
<li class="place-entry" data-place-id="SOME_PLACE_ID_1">
<img class="place-icon" src="icon_url_1.png" alt="Icon">
<span class="place-name">Place Name One</span> -
<span class="place-vicinity">123 Main St</span>
</li>
<li class="place-entry" data-place-id="SOME_PLACE_ID_2">
<img class="place-icon" src="icon_url_2.png" alt="Icon">
<span class="place-name">Place Name Two</span> -
<span class="place-vicinity">456 Oak Ave</span>
</li>
-->
<li class="loading-message">Loading places...</li>
</ul>
</div>
Elemen Place Search diimplementasikan menggunakan komponen <gmp-place-search>. Untuk mengonfigurasi jenis penelusuran, sertakan salah satu komponen konfigurasi slot berikut di dalamnya:
<gmp-place-text-search-request>untuk Text Search.<gmp-place-nearby-search-request>untuk Nearby Search.
Untuk menentukan cara hasil ditampilkan, Anda dapat menggunakan pintasan <gmp-place-all-content>, atau menyediakan kumpulan komponen presentasi individual Anda sendiri. Atribut
kunci seperti selectable (untuk mengizinkan klik pada item daftar) dan orientation
(untuk tata letak horizontal atau vertikal) dapat ditetapkan langsung pada komponen
induk.
Contoh Nearby Search
<gmp-place-search orientation="horizontal" selectable>
<gmp-place-all-content> </gmp-place-all-content>
<gmp-place-nearby-search-request></gmp-place-nearby-search-request>
</gmp-place-search>
Contoh Text Search
<gmp-place-search orientation="horizontal" selectable>
<gmp-place-all-content> </gmp-place-all-content>
<gmp-place-text-search-request></gmp-place-text-search-request>
</gmp-place-search>
Menyesuaikan Logika JavaScript
Di JavaScript, dapatkan referensi ke komponen pengontrol penelusuran menggunakan
document.querySelector(). Bergantung pada penyiapan Anda, ini akan menjadi elemen
<gmp-place-text-search-request> atau <gmp-place-nearby-search-request>.
Selanjutnya, tetapkan properti pada pengontrol ini untuk menentukan penelusuran Anda. Properti yang diperlukan bergantung pada jenis penelusuran yang Anda lakukan.
Untuk Text Search (<gmp-place-text-search-request>), properti utamanya adalah
textQuery:
const textSearchController = document.querySelector('gmp-place-text-search-request');
textSearchController.textQuery = 'museums in London';
Untuk Nearby Search (<gmp-place-nearby-search-request>), Anda harus menentukan area penelusuran menggunakan locationRestriction. Kemudian, Anda dapat menggunakan includedTypes untuk
memfilter jenis tempat tertentu dalam area tersebut:
const nearbySearchController = document.querySelector('gmp-place-nearby-search-request');
nearbySearchController.locationRestriction = new google.maps.Circle({
center: { lat: 51.5190, lng: -0.1347 },
radius: 1000
});
nearbySearchController.includedTypes = ['restaurant'];
Komponen <gmp-place-search> induk otomatis memulai penelusuran baru
segera setelah properti yang diperlukan pengontrolnya ditetapkan.
- Untuk Text Search, penelusuran akan berjalan saat Anda menetapkan nilai ke
textQuery. - Untuk Nearby Search, penelusuran akan berjalan setelah
locationRestrictionyang valid diberikan.
Menerapkan Elemen Place Autocomplete Dasar
Untuk developer yang memerlukan pengalaman penelusuran tanpa UI yang disediakan oleh Elemen Place Search, tersedia Elemen Basic Place Autocomplete.
Elemen ini ideal untuk membuat kolom input penelusuran sekaligus mempertahankan kontrol penuh atas cara hasil ditampilkan di antarmuka pengguna kustom Anda. Satu-satunya tanggung jawab Elemen Autocomplete adalah memberikan prediksi tempat saat pengguna mengetik dan mengekspos ID Tempat secara terprogram untuk tempat yang dipilih.
Elemen ini tidak menampilkan detail apa pun, atau memberikan informasi lain yang dapat diakses secara terprogram.
Penerapan Saat Ini
Logika yang ada kemungkinan melibatkan:
- Merender kolom input teks di halaman Anda yang memanggil Place Autocomplete saat pengguna mengetik, yang menampilkan hasil.
- Menggunakan ID Tempat dari tempat yang dipilih pengguna untuk mengambil detail selengkapnya, misalnya menggunakan Place Details API.
- Menampilkan detail tempat yang dipilih.
Migrasi ke Elemen Place Autocomplete
Mengubah Struktur HTML
Identifikasi dan hapus elemen HTML tempat Anda melampirkan widget Autocomplete. Kemungkinan besar, kolom tersebut menggunakan kolom input HTML standar.
<input id="pac-input" type="text" placeholder="Search for a location" />
Contoh HTML baru, menggunakan pendekatan komponen web untuk melakukan inisialisasi elemen Autocomplete Place Dasar di halaman Anda.
<gmp-basic-place-autocomplete></gmp-basic-place-autocomplete>
Menyesuaikan Logika JavaScript
Logika JavaScript Anda kemungkinan melibatkan pembuatan widget Autocomplete yang dilampirkan ke elemen HTML input. Widget ini kemudian memproses peristiwa place_changed, yang memicu tindakan dengan data yang ditampilkan.
Contoh JavaScript yang ada untuk dihapus:
// Get the input element
const input = document.getElementById("pac-input");
// Create the Autocomplete widget instance
const autocomplete = new google.maps.places.Autocomplete(input, {
fields: ["place_id", "geometry", "name"]
});
// Add a listener for the 'place_changed' event
autocomplete.addListener("place_changed", () => {
// Your logic to get and display place information
console.log(place.place_id);
});
Logika JavaScript baru Anda akan mendapatkan referensi ke Elemen Place Autocomplete Dasar, dan memproses peristiwa gmp-select:
const placeAutocomplete = document.querySelector('gmp-basic-place-autocomplete');
placeAutocomplete.addEventListener('gmp-select', (event) => {
console.log(event.place);
});
Saat memilih tempat di menu drop-down Autocomplete, peristiwa gmp-select akan diaktifkan. ID Tempat dari tempat yang dipilih dapat diambil dari objek event. ID Tempat kemudian dapat digunakan untuk melakukan inisialisasi instance Elemen Place Details, untuk menampilkan detail tempat yang dipilih.
Penyesuaian Nama Sebutan Channel
Penyesuaian Elemen Place Details
Orientasi
Elemen Place Details dapat dirender dalam orientasi Horizontal dan Vertikal. Gunakan atribut orientation di gmp-place-details-compact untuk
memilih antara vertikal dan horizontal. Contoh:
<gmp-place-details-compact orientation="vertical">
Memilih kolom yang akan dirender
Gunakan elemen konten untuk menentukan konten yang akan dirender dalam Elemen Place Details. Misalnya, mengecualikan elemen konten <gmp-place-type>
akan menghentikan Elemen Place Details merender Jenis Tempat dari tempat
yang dipilih. Untuk mengetahui daftar lengkap elemen konten, lihat dokumentasi referensi PlaceContentConfigElement.
Menambahkan atau menghapus kolom dari Elemen Place Details tidak mengubah biaya rendering elemen di halaman.
Menetapkan Gaya CSS
Properti CSS kustom tersedia untuk mengonfigurasi warna dan font elemen. Misalnya, untuk menyetel latar belakang elemen menjadi hijau, setel properti CSS berikut:
gmp-place-details-compact {
--gmp-mat-color-surface: green;
}
Lihat dokumentasi referensi untuk
PlaceDetailsCompactElement
untuk mengetahui detail selengkapnya.
Penyesuaian Elemen Place Search
Orientasi
Elemen Place Search dapat dirender dalam orientasi Horizontal dan Vertikal. Gunakan atribut orientation di <gmp-place-search> untuk memilih
antara vertikal dan horizontal. Contoh:
<gmp-place-search orientation="horizontal" selectable>
Memilih kolom yang akan dirender
Gunakan elemen konten untuk menentukan konten yang akan dirender dalam Elemen Penelusuran Tempat. Elemen <gmp-place-all-content> dapat digunakan untuk menampilkan semua
konten, atau pilihan tag HTML dapat digunakan untuk mengonfigurasi konten yang
dirender.
Menyertakan <gmp-place-address> dalam <gmp-place-content-config> hanya akan
merender alamat untuk setiap tempat, misalnya:
<gmp-place-search orientation="horizontal" selectable>
<gmp-place-content-config>
<gmp-place-address></gmp-place-address>
</gmp-place-content-config>
<gmp-place-text-search-request></gmp-place-text-search-request>
</gmp-place-search>
Penyesuaian Elemen Place Autocomplete dasar
Menetapkan Gaya CSS
Properti CSS kustom tersedia untuk menyesuaikan tampilan dan nuansa elemen Autocomplete. Misalnya, untuk menyetel warna latar belakang menjadi ungu muda, Anda harus
menyetel properti background-color pada elemen.
gmp-basic-place-autocomplete {
background-color: #d993e6;
}
Baca dokumentasi referensi BasicPlaceAutocompleteElement untuk mengetahui detail selengkapnya.
Menangani peristiwa & data
Elemen Kit UI Places adalah komponen interaktif yang memungkinkan Anda memproses peristiwa dan mengambil data secara terprogram.
Memproses Peristiwa
Anda dapat menambahkan pemroses peristiwa ke elemen untuk memicu tindakan berdasarkan interaksi pengguna atau status elemen.
Peristiwa Pemilihan
gmp-select: Peristiwa ini diaktifkan saat pengguna membuat pilihan.- Pada Elemen Place Search, peristiwa ini dipicu saat pengguna mengklik tempat dalam daftar hasil.
- Di Elemen Autocomplete Place Dasar, peristiwa ini dipicu saat pengguna mengklik prediksi dalam menu drop-down.
Peristiwa Umum
Elemen Place Search, Place Details, dan Basic Place Autocomplete semuanya mendukung peristiwa berikut:
gmp-load: Diaktifkan saat elemen dan kontennya telah selesai dimuat dan dirender.gmp-requesterror: Diaktifkan saat permintaan ke server gagal, misalnya, karena kunci API tidak valid.
Mengakses Data Elemen Secara Terprogram
Anda dapat mengambil data tertentu secara terprogram dari elemen setelah elemen tersebut berinteraksi atau dimuat.
- Untuk Elemen Place Search dan Elemen Place Details, Anda dapat mengambil informasi berikut:
- ID tempat
- Lokasi (Lintang & Bujur)
- Area Tampilan
- Untuk Elemen Place Autocomplete Dasar, Anda dapat mengambil informasi berikut:
- ID tempat
Semua data lain yang terdapat dalam elemen tidak dapat diakses secara terprogram.
Untuk contoh yang lebih mendetail, lihat dokumentasi masing-masing untuk Elemen Place Search, Elemen Place Details , dan Elemen Place Autocomplete Dasar.
Pengujian dan Penyempurnaan
Setelah Anda mengintegrasikan elemen Kit UI Tempat, pengujian sangat penting untuk transisi yang lancar dan pengalaman pengguna yang positif. Pengujian Anda harus mencakup beberapa area utama, yang menangani semua elemen yang telah Anda terapkan: elemen Place Details, Place Search, dan Basic Place Autocomplete.
Elemen Place Details
Untuk Elemen Place Details, mulailah dengan memverifikasi bahwa detail ditampilkan
dengan benar untuk berbagai tempat. Uji dengan meneruskan berbagai ID Tempat ke
properti .place dari elemen <gmp-place-details-place-request>. Gunakan
ID yang mewakili berbagai jenis bangunan (bisnis dengan data lengkap,
lokasi menarik, alamat dasar) dan tempat di berbagai wilayah atau
bahasa. Perhatikan baik-baik format, tata letak, dan keberadaan
konten.
Elemen Place Search
Jika Anda telah menerapkan Elemen Place Search, verifikasi rendering dan perilakunya dalam berbagai skenario penelusuran.
- Untuk Text Search, uji dengan menetapkan properti
textQuerypada elemen<gmp-place-text-search-request>dengan berbagai input: kueri luas, alamat spesifik, dan kueri dengan bias lokasi. - Untuk Nearby Search, uji dengan menetapkan properti
locationRestrictiondanincludedTypespada elemen<gmp-place-nearby-search-request>. Gunakan berbagai ukuran lokasi dan filter jenis.
Pastikan daftar diisi dengan hasil yang relevan dan peristiwa gmp-select diaktifkan dengan benar setelah dipilih.
Elemen Place Autocomplete Dasar
Untuk Elemen Place Autocomplete Dasar, fokuskan pengujian pada interaksi pengguna dan
data yang diteruskan oleh peristiwa pemilihan. Pastikan peristiwa gmp-select
diaktifkan dengan andal saat pengguna mengklik prediksi. Pastikan objek event.place
dalam pengendali peristiwa berisi ID Tempat yang valid.
Yang terpenting, uji alur menyeluruh: pilih tempat dari drop-down Autocomplete dan verifikasi bahwa ID Tempatnya dapat berhasil digunakan untuk mengisi elemen lain, seperti Elemen Place Details.
Penanganan error
Pengujian penanganan error yang ketat sangat penting di semua komponen. Simulasikan
penerusan ID Tempat yang tidak valid atau tidak ada ke Elemen Place Details, atau penggunaan
parameter penelusuran yang tidak valid untuk Elemen Place Search. Picu peristiwa
gmp-requesterror dengan menyimulasikan masalah jaringan atau menggunakan kunci API
yang tidak valid untuk memastikan aplikasi Anda menanganinya dengan baik. Terapkan pesan error dan logging yang mudah digunakan untuk mencegah UI yang rusak atau membingungkan.