Halaman ini menjelaskan perbedaan antara fitur penelusuran tempat berbasis teks di kelas Place
(baru) dan PlacesService
(lama), serta memberikan beberapa cuplikan kode untuk perbandingan.
PlacesService
lama memiliki metode penelusuran berbasis teks berikut:
- Metode
findPlaceFromQuery()
yang menggunakan kueri teks dan menampilkan satu hasil tempat, serta mendukung penggunaan kolom data tempat. - Metode
findPlaceFromPhoneNumber()
yang memungkinkan Anda menelusuri tempat menggunakan nomor telepon, dan mendukung penggunaan kolom data tempat. - Metode
textSearch()
yang mengambil kueri teks dan menampilkan daftar hasil tempat.textSearch()
lebih lama, dan tidak mendukung penggunaan kolom data tempat.
Class Place
baru menawarkan metode Place.searchByText()
, yang memungkinkan Anda
menelusuri tempat menggunakan kueri teks atau nomor telepon, dan memungkinkan Anda
menyesuaikan penelusuran menggunakan pilihan yang lebih luas dari kolom data tempat
dan jenis tempat yang diperbarui secara rutin.
Tabel berikut mencantumkan beberapa perbedaan utama dalam metode penelusuran tempat
antara class Place
dan PlacesService
:
PlacesService (Lama) |
Place (Baru) |
---|---|
findPlaceFromQuery() findPlaceFromPhoneNumber()
|
searchByText() |
FindPlaceFromQueryRequest FindPlaceFromPhoneNumberRequest |
SearchByTextRequest |
Opsi kueri terbatas. | Opsi kueri yang lebih luas. |
Memerlukan penggunaan callback untuk menangani objek hasil dan respons
google.maps.places.PlacesServiceStatus . |
Menggunakan Promise, dan berfungsi secara asinkron. |
Memerlukan pemeriksaan PlacesServiceStatus . |
Tidak ada pemeriksaan status yang diperlukan, dapat menggunakan penanganan error standar. Pelajari lebih lanjut. |
Hanya mendukung bias lokasi. | Mendukung bias lokasi dan pembatasan lokasi. |
Kolom data tempat diformat menggunakan snake case. | Kolom data tempat diformat menggunakan camel case. |
Menampilkan satu hasil tempat. | Menampilkan hingga 20 hasil tempat. |
Terbatas pada kumpulan tetap jenis tempat dan kolom data tempat. | Menyediakan pilihan yang lebih luas untuk jenis tempat yang diperbarui secara berkala dan kolom data tempat. |
textSearch() |
searchByText() |
Menampilkan semua kolom data yang tersedia (sub-kumpulan kolom yang didukung); tidak dapat dibatasi ke kolom tertentu. | Hanya menampilkan kolom data tempat yang diminta. |
Perbandingan kode
Bagian ini membandingkan kode untuk metode penelusuran teks guna mengilustrasikan perbedaan antara Places Service dan Place class. Cuplikan kode menunjukkan kode yang diperlukan di setiap API masing-masing untuk membuat permintaan penelusuran berbasis teks.
Layanan Places (Lama)
Cuplikan kode berikut menunjukkan penggunaan metode findPlaceFromQuery()
untuk
menelusuri tempat. Permintaan bersifat sinkron, dan mencakup pemeriksaan bersyarat
pada PlacesServiceStatus
. Kolom data tempat yang diperlukan ditentukan dalam
isi permintaan, yang ditentukan sebelum membuat permintaan sebenarnya.
function findPlaces() {
const request = {
query: "Museum of Contemporary Art Australia",
fields: ["name", "geometry"],
};
// Create an instance of PlacesService.
service = new google.maps.places.PlacesService(map);
// Make a findPlaceFromQuery request.
service.findPlaceFromQuery(request, (results, status) => {
let place = results[0];
if (status === google.maps.places.PlacesServiceStatus.OK && results) {
if (!place.geometry || !place.geometry.location) return;
const marker = new google.maps.Marker({
map,
position: place.geometry.location,
});
map.setCenter(place.geometry.location);
}
});
}
Pelajari lebih lanjut
Text Search (Baru)
Cuplikan kode berikut menunjukkan penggunaan metode searchByText()
untuk menelusuri tempat. Permintaan bersifat asinkron, dan tidak memerlukan pemeriksaan status
(penanganan error standar dapat digunakan). Dalam contoh ini, permintaan menyertakan
maxResultCount
8 (nilai harus antara 1 dan 20). Fungsi ini melakukan loop
melalui hasil dan menambahkan penanda untuk setiap hasil, menyesuaikan batas peta
berdasarkan posisi penanda. Karena metode searchByText()
menggunakan
operator await
, metode ini hanya dapat digunakan di dalam fungsi async
.
async function findPlaces() {
// Define a request.
// The `fields` property is required; all others are optional.
const request = {
fields: ["displayName", "location", "businessStatus"],
textQuery: "Tacos in Mountain View",
includedType: "restaurant",
locationBias: { lat: 37.4161493, lng: -122.0812166 },
isOpenNow: true,
language: "en-US",
maxResultCount: 8,
minRating: 3.2,
region: "us",
useStrictTypeFiltering: false,
};
// Call searchByText passing the request.
const { places } = await google.maps.places.Place.searchByText(request);
// Add a marker for each result.
if (places.length) {
const bounds = new google.maps.LatLngBounds();
places.forEach((place) => {
const markerView = new google.maps.marker.AdvancedMarkerElement({
map,
position: place.location,
title: place.displayName,
});
bounds.extend(place.location);
console.log(place);
});
map.fitBounds(bounds);
} else {
console.log("No results");
}
}
Metode searchByText()
mendukung lebih banyak opsi permintaan dibandingkan dengan
versi sebelumnya, termasuk:
includedType
yang memungkinkan Anda membatasi penelusuran ke jenis tempat tertentu.isOpenNow
yang memungkinkan Anda membatasi penelusuran untuk hanya menampilkan tempat yang sedang buka.minRating
yang memungkinkan Anda memfilter hasil di bawah batas yang ditentukan (misalnya, hanya menampilkan tempat dengan tiga bintang atau lebih).locationRestriction
yang menghilangkan hasil di luar lokasi yang ditentukan (locationBias
juga didukung).
Pelajari lebih lanjut
- Lihat contoh kode lengkap
- Lihat dokumentasi untuk Penelusuran Teks (Baru)
- Lihat referensi
searchByText()