Questa pagina spiega le differenze tra la ricerca nelle vicinanze utilizzata nella classe
Place
(nuova) e nella classe
PlacesService
(legacy) e fornisce alcuni snippet di codice per il confronto.
- L'API legacy
PlacesService
ha un metodonearbySearch()
, che ti consente di cercare luoghi all'interno di un'area specifica in base a parola chiave o tipo. - La classe
Place
ha un metodosearchNearby()
che ti consente di cercare luoghi all'interno di un'area specifica per tipo di luogo, utilizzando una selezione più ampia di campi di dati sui luoghi e tipi di luoghi per una maggiore flessibilità.
La seguente tabella elenca alcune delle principali differenze nei metodi di ricerca nelle vicinanze
tra la classe Place
e PlacesService
:
PlacesService (legacy) |
Place (nuovo) |
---|---|
nearbySearch() |
searchNearby()
|
PlaceSearchRequest |
SearchNearbyRequest |
Richiede l'utilizzo di un callback per gestire l'oggetto risultati e
la risposta google.maps.places.PlacesServiceStatus . |
Utilizza le promesse e funziona in modo asincrono. |
Richiede un controllo PlacesServiceStatus . |
Nessun controllo dello stato richiesto, è possibile utilizzare la gestione degli errori standard. Ulteriori informazioni. |
Supporta solo la distorsione della località. | Supporta la distorsione della località e la limitazione della località. |
Restituisce tutti i campi di dati disponibili (un sottoinsieme dei campi supportati); non può essere vincolato a campi specifici. | Restituisce solo i campi di dati del luogo richiesti; la classe Place offre una selezione di campi più ampia e aggiornata regolarmente. |
Limitato a un insieme fisso di tipi di luoghi. | Accedi a una selezione più ampia e regolarmente aggiornata di tipi di luoghi. |
Ricerca basata su testo supportata con la parola chiave. | La ricerca basata sul testo non è supportata. Utilizza Ricerca di testo (nuova). |
Confronto del codice
Questa sezione confronta il codice per i metodi di ricerca nelle vicinanze per illustrare le differenze tra il servizio Places e la classe Place. Gli snippet di codice mostrano il codice richiesto su ogni API rispettiva per effettuare una richiesta di ricerca basata su testo.
Nearby Search (legacy)
La ricerca nelle vicinanze precedente ti consente di cercare luoghi all'interno di un'area specifica in base a
parola chiave o tipo. Non è possibile vincolare le ricerche utilizzando i campi dei dati sui luoghi, in modo che tutti i campi disponibili vengano restituiti con ogni richiesta.
Il seguente snippet mostra la chiamata a nearbySearch()
per restituire informazioni sui
ristoranti di Sydney, in Australia. La richiesta è sincrona, utilizza un callback
e include un controllo condizionale obbligatorio su 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,
});
}
Scopri di più
Nearby Search (New)
La nuova versione di Ricerca nelle vicinanze migliora la precedente nei seguenti modi:
- La possibilità di specificare quali campi di dati sui luoghi restituire.
- L'utilizzo di Promises, che consente l'operazione asincrona.
- Non è necessario controllare lo stato di
PlacesService
; è possibile utilizzare invece la gestione degli errori standard.
Il seguente snippet di codice mostra una funzione che esegue una richiesta di ricerca nelle vicinanze
per i ristoranti. Questo esempio mostra l'utilizzo dell'opzione rankPreference
per classificare
i risultati di ricerca in base alla popolarità (nella versione precedente la classificazione è specificata
utilizzando l'opzione rankBy
). Poiché il metodo searchNearby()
utilizza l'operatore await
, può essere utilizzato solo all'interno di una funzione 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");
}
}
Scopri di più
- Vedi l'esempio di codice completo
- Consulta la documentazione di Nearby Search (New)
- Consulta il
searchNearby()
di riferimento