Halaman ini menjelaskan perbedaan antara fitur penelusuran tempat berbasis teks di
class 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 diperluas 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 diperlukan pemeriksaan status, dapat menggunakan penanganan error standar. |
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 hasil satu tempat. | Menampilkan hingga 20 hasil tempat. |
Dibatasi untuk kumpulan tetap jenis tempat dan kolom data tempat. | Memberikan pilihan yang diperluas dari jenis tempat dan kolom data tempat yang diperbarui secara berkala. |
textSearch() |
searchByText() |
Menampilkan semua kolom data yang tersedia (subkumpulan 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 layanan Places dan class Place. Cuplikan kode menunjukkan kode yang diperlukan di setiap API untuk membuat permintaan penelusuran berbasis teks.
Layanan Places (Lama)
Cuplikan kode berikut menunjukkan penggunaan metode findPlaceFromQuery()
untuk
menelusuri tempat. Permintaan bersifat sinkron, dan menyertakan 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
sebesar 8 (nilai harus antara 1 dan 20). Fungsi ini melakukan loop
pada 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 agar hanya menampilkan tempat yang terbuka.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).