Questa pagina spiega le differenze tra le funzionalità di ricerca di luoghi basate su testo nella classe Place
(nuova) e nella classe PlacesService
(legacy) e fornisce alcuni snippet di codice per il confronto.
Il PlacesService
legacy dispone dei seguenti metodi di ricerca basati su testo:
- Il metodo
findPlaceFromQuery()
, che accetta una query di testo e restituisce un singolo risultato di luogo e supporta l'utilizzo dei campi di dati dei luoghi. - Il metodo
findPlaceFromPhoneNumber()
, che consente di cercare un luogo utilizzando un numero di telefono e supporta l'utilizzo dei campi di dati dei luoghi. - Il metodo
textSearch()
, che accetta una query di testo e restituisce un elenco di risultati di luoghi.textSearch()
è precedente e non supporta l'utilizzo dei campi di dati sui luoghi.
La nuova classe Place
offre il metodo Place.searchByText()
, che consente di
cercare luoghi utilizzando una query di testo o un numero di telefono e di
personalizzare le ricerche utilizzando una selezione più ampia di campi di dati dei luoghi e tipi di luoghi aggiornati regolarmente.
La seguente tabella elenca alcune delle principali differenze nei metodi di ricerca dei luoghi
tra la classe Place
e PlacesService
:
PlacesService (legacy) |
Place (nuovo) |
---|---|
findPlaceFromQuery() findPlaceFromPhoneNumber()
|
searchByText() |
FindPlaceFromQueryRequest FindPlaceFromPhoneNumberRequest |
SearchByTextRequest |
Opzioni di query limitate. | Opzioni di query più ampie. |
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à. |
I campi di dati del luogo sono formattati utilizzando la notazione snake case. | I campi di dati del luogo sono formattati utilizzando la notazione camel case. |
Restituisce un singolo risultato di luogo. | Restituisce fino a 20 risultati di luoghi. |
Limitato a un insieme fisso di tipi di luoghi e campi di dati sui luoghi. | Fornisce una selezione più ampia di tipi di luoghi e campi di dati dei luoghi aggiornati regolarmente. |
textSearch() |
searchByText() |
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. |
Confronto del codice
Questa sezione confronta il codice per i metodi di ricerca di testo 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.
Servizio Places (legacy)
Il seguente snippet di codice mostra l'utilizzo del metodo findPlaceFromQuery()
per
cercare un luogo. La richiesta è sincrona e include un controllo condizionale
su PlacesServiceStatus
. I campi di dati del luogo necessari sono specificati nel corpo della richiesta, che viene definito prima di effettuare la richiesta effettiva.
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);
}
});
}
Scopri di più
- Vedi l'esempio di codice completo
- Consulta la documentazione
- Riferimento all'interfaccia
FindPlaceFromQueryRequest
Ricerca testuale (novità)
Il seguente snippet di codice mostra l'utilizzo del metodo searchByText()
per cercare
luoghi. La richiesta è asincrona e non richiede un controllo dello stato
(è possibile utilizzare la gestione degli errori standard). In questo esempio, la richiesta include
un maxResultCount
di 8 (il valore deve essere compreso tra 1 e 20). Questa funzione scorre
i risultati e aggiunge un indicatore per ciascuno, modificando i limiti della mappa
in base alla posizione degli indicatori. Poiché il metodo searchByText()
utilizza
l'operatore await
, può essere utilizzato solo all'interno di una funzione 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");
}
}
Il metodo searchByText()
supporta molte più opzioni di richiesta rispetto alla versione precedente, tra cui:
includedType
che ti consente di limitare le ricerche a un tipo specifico di luogo.isOpenNow
che consente di limitare le ricerche in modo da restituire solo i luoghi aperti.minRating
che ti consente di filtrare i risultati al di sotto del limite specificato (ad esempio, restituire solo i luoghi con tre stelle o più).locationRestriction
che omette i risultati al di fuori della località specificata (è supportato anchelocationBias
).
Scopri di più
- Vedi l'esempio di codice completo
- Consulta la documentazione relativa a Ricerca di testo (nuova)
- Consulta il
searchByText()
di riferimento