Questa pagina spiega le differenze tra la ricerca nelle vicinanze utilizzata nella
Place classe (nuova) e in
PlacesService
(legacy) e fornisce alcuni snippet di codice per il confronto.
- Il servizio
PlacesServicelegacy ha un metodonearbySearch()che consente di cercare luoghi all'interno di un'area specificata per parola chiave o tipo. - La classe
Placeha un metodosearchNearby()che consente di cercare luoghi all'interno di un'area specificata per tipo di luogo, utilizzando una selezione ampliata di campi di dati e tipi di luoghi per una maggiore flessibilità.
La tabella seguente 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 dei risultati e
google.maps.places.PlacesServiceStatus risposta. |
Utilizza le promesse e funziona in modo asincrono. |
Richiede un controllo di PlacesServiceStatus. |
Non è necessario alcun controllo dello stato, è possibile utilizzare la gestione degli errori standard. Scopri di più. |
| 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 dei luoghi richiesti; la classe Place offre una selezione di campi ampliata e aggiornata regolarmente
di campi. |
| Limitato a un insieme fisso di tipi di luoghi. | Accedi a una selezione ampliata e aggiornata regolarmente di tipi di luoghi. |
| Ricerca basata su testo supportata con la parola chiave. | La ricerca basata su testo non è supportata, utilizza invece la ricerca testuale (nuova). |
Confronto del codice
Questa sezione confronta il codice per i metodi di ricerca nelle vicinanze per illustrare le differenze tra Places Service 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.
Ricerca nelle vicinanze (legacy)
La ricerca nelle vicinanze legacy consente di cercare luoghi all'interno di un'area specificata per parola chiave o tipo. Non è possibile limitare le ricerche utilizzando i campi di dati dei 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 a 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 (Nuova)
La nuova versione di Nearby Search migliora la versione precedente nei seguenti modi:
- La possibilità di specificare i campi di dati dei luoghi da restituire.
- L'utilizzo delle promesse che consente il funzionamento asincrono.
- Non è necessario verificare lo stato di
PlacesService; è possibile utilizzare invece la gestione degli errori standard.
Il seguente snippet di codice mostra una funzione che effettua una richiesta di Nearby Search 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 viene 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ù
- Consulta l'esempio di codice completo
- Consulta la documentazione relativa a Nearby Search (nuova)
- Consulta il riferimento
searchNearby()