Halaman ini menjelaskan perbedaan antara penelusuran terdekat seperti yang digunakan di
class Place
(baru) dan
PlacesService
(lama), serta memberikan beberapa cuplikan kode untuk perbandingan.
PlacesService
lama memiliki metodenearbySearch()
, yang memungkinkan Anda menelusuri tempat dalam area yang ditentukan berdasarkan kata kunci atau jenis.- Class
Place
memiliki metodesearchNearby()
yang memungkinkan Anda menelusuri tempat dalam area yang ditentukan berdasarkan jenis tempat, menggunakan pilihan yang diperluas dari kolom data tempat dan jenis tempat untuk fleksibilitas yang lebih besar.
Tabel berikut mencantumkan beberapa perbedaan utama dalam metode penelusuran terdekat
antara class Place
dan PlacesService
:
PlacesService (Lama) |
Place (Baru) |
---|---|
nearbySearch() |
searchNearby()
|
PlaceSearchRequest |
SearchNearbyRequest |
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. |
Menampilkan semua kolom data yang tersedia (subkumpulan kolom yang didukung); tidak dapat dibatasi ke kolom tertentu. | Hanya menampilkan kolom data tempat yang diminta; class Place menawarkan pilihan kolom yang diperluas dan diperbarui secara rutin. |
Dibatasi untuk kumpulan jenis tempat tetap. | Akses pilihan jenis tempat yang diperluas dan diperbarui secara rutin. |
Penelusuran berbasis teks yang didukung dengan kata kunci. | Penelusuran berbasis teks tidak didukung, gunakan Text Search (Baru). |
Perbandingan kode
Bagian ini membandingkan kode untuk metode penelusuran terdekat guna mengilustrasikan perbedaan antara layanan Places dan class Place. Cuplikan kode menunjukkan kode yang diperlukan di setiap API untuk membuat permintaan penelusuran berbasis teks.
Nearby Search (Lama)
Nearby Search lama memungkinkan Anda menelusuri tempat dalam area yang ditetapkan dengan
kata kunci atau jenis. Tidak ada cara untuk membatasi penelusuran menggunakan kolom data tempat, sehingga semua kolom yang tersedia ditampilkan dengan setiap permintaan.
Cuplikan berikut menunjukkan pemanggilan nearbySearch()
untuk menampilkan informasi tentang
restoran di Sydney, Australia. Permintaan ini bersifat sinkron, menggunakan callback,
dan menyertakan pemeriksaan kondisional yang diperlukan pada PlacesServiceStatus
.
let map;
let service;
function initMap() {
const sydney = new google.maps.LatLng(-33.867, 151.195);
map = new google.maps.Map(document.getElementById("map"), {
center: sydney,
zoom: 15,
});
const request = {
location: sydney,
radius: '500',
type: ['restaurant']
};
service = new google.maps.places.PlacesService(map);
service.nearbySearch(request, callback);
}
function callback(results, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
createMarker(results[i]);
}
}
}
// Helper function to create markers.
function createMarker(place) {
if (!place.geometry || !place.geometry.location) return;
const marker = new google.maps.Marker({
map,
position: place.geometry.location,
title: place.name,
});
}
Pelajari lebih lanjut
Nearby Search (Baru)
Versi baru Nearby Search meningkatkan kualitas versi sebelumnya dengan cara berikut:
- Kemampuan untuk menentukan kolom data tempat yang akan ditampilkan.
- Penggunaan Promise yang memungkinkan operasi asinkron.
- Tidak perlu memeriksa status
PlacesService
; penanganan error standar dapat digunakan sebagai gantinya.
Cuplikan kode berikut menunjukkan fungsi yang membuat permintaan Penelusuran Langsung untuk restoran. Contoh ini menunjukkan penggunaan opsi rankPreference
untuk menentukan peringkat
hasil penelusuran berdasarkan popularitas (dalam versi sebelumnya, peringkat ditentukan
menggunakan opsi rankBy
). Karena metode searchNearby()
menggunakan operator
await
, metode ini hanya dapat digunakan di dalam fungsi async
.
async function nearbySearch() {
// Restrict within the map viewport.
let center = new google.maps.LatLng(52.369358, 4.889258);
const request = {
// Required parameters.
fields: ["displayName", "location", "businessStatus"],
locationRestriction: {
center: center,
radius: 500,
},
// Optional parameters.
includedPrimaryTypes: ["restaurant"],
maxResultCount: 5,
rankPreference: google.maps.places.SearchNearbyRankPreference.POPULARITY,
language: "en-US",
region: "us",
};
const { places } = await google.maps.places.Place.searchNearby(request);
if (places.length) {
console.log(places);
// Create a new bounds, which will be extended with each result.
const bounds = new google.maps.LatLngBounds();
// Loop through and get all the results.
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");
}
}