Questa pagina descrive la libreria lato client disponibile con l'API Maps JavaScript. Se vuoi utilizzare il servizio web API Places sul tuo server, dai un'occhiata al client Node.js per i servizi Google Maps. La pagina a questo link introduce anche il client Java, il client Python e il client Go per i servizi Google Maps.
Introduzione
Il completamento automatico è una funzionalità della libreria Places dell'API Maps JavaScript. Puoi utilizzare il completamento automatico per dare alle tue applicazioni il comportamento di ricerca predittiva del campo di ricerca di Google Maps. Il servizio di completamento automatico può trovare corrispondenze con parole intere e sottostringhe, risolvendo nomi di luoghi, indirizzi e plus code. Le applicazioni possono quindi inviare query mentre l'utente digita, per fornire previsioni sui luoghi al volo. Come definito dall'API Places, un "luogo" può essere un'attività, una posizione geografica o un punto d'interesse di rilievo.
Per iniziare
Prima di utilizzare la libreria Places nell'API Maps JavaScript, verifica che l'API Places sia abilitata nella console Google Cloud, nello stesso progetto configurato per l'API Maps JavaScript.
Per visualizzare l'elenco delle API abilitate:
- Vai alla console Google Cloud.
- Fai clic sul pulsante Seleziona un progetto, poi seleziona lo stesso progetto che hai configurato per l'API Maps JavaScript e fai clic su Apri.
- Nell'elenco delle API nella dashboard, cerca l'API Places.
- Se vedi l'API nell'elenco, non devi fare altro. Tuttavia, questo progetto è in stato legacy. Per saperne di più sulla fase legacy e su come eseguire la migrazione dai servizi legacy a quelli più recenti, consulta Prodotti e funzionalità legacy. È disponibile un'eccezione per i widget Autocomplete e SearchBox, che non sono ancora disponibili come prodotto GA nell'API Places (New).
Caricare la libreria
Il servizio Places è una libreria autonoma, separata dal codice principale
dell'API Maps JavaScript. Per utilizzare le funzionalità contenute
in questa libreria, devi prima caricarla utilizzando il parametro libraries
nell'URL di bootstrap dell'API Maps:
<script async
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&loading=async&libraries=places&callback=initMap">
</script>
Per ulteriori informazioni, consulta la panoramica delle librerie.
Riepilogo delle classi
L'API offre due tipi di widget di completamento automatico, che puoi aggiungere utilizzando rispettivamente le classi Autocomplete
e SearchBox
.
Inoltre, puoi utilizzare la classe AutocompleteService
per recuperare
i risultati del completamento automatico in modo programmatico (consulta il riferimento dell'API Maps JavaScript:
classe AutocompleteService).
Di seguito è riportato un riepilogo delle classi disponibili:
-
Autocomplete
aggiunge un campo di input di testo alla tua pagina web e monitora il campo per le voci di caratteri. Man mano che l'utente inserisce il testo, il completamento automatico restituisce le previsioni dei luoghi sotto forma di un elenco a discesa. Quando l'utente seleziona un luogo dall'elenco, le informazioni sul luogo vengono restituite all'oggetto di completamento automatico e possono essere recuperate dalla tua applicazione. Vedi i dettagli di seguito.Figura 1: campo di testo con completamento automatico ed elenco di selezione Figura 2: modulo per l'indirizzo compilato -
SearchBox
aggiunge un campo di input di testo alla tua pagina web, in modo molto simile aAutocomplete
. Le differenze sono le seguenti:- La differenza principale risiede nei
risultati visualizzati nell'elenco di selezione.
SearchBox
fornisce un elenco esteso di previsioni, che può includere luoghi (come definiti dall'API Places) e termini di ricerca suggeriti. Ad esempio, se l'utente inserisce "pizza a new", l'elenco di selezione potrebbe includere la frase "pizza a New York, NY" e i nomi di vari punti vendita di pizza. SearchBox
offre meno opzioni rispetto aAutocomplete
per limitare la ricerca. Nel primo caso, puoi orientare la ricerca verso un determinatoLatLngBounds
. In quest'ultimo, puoi limitare la ricerca a un paese specifico e a tipi di luoghi specifici, nonché impostare i limiti. Per ulteriori informazioni, vedi di seguito.
Figura 3: una casella di ricerca presenta termini di ricerca e previsioni di luoghi. - La differenza principale risiede nei
risultati visualizzati nell'elenco di selezione.
- Puoi creare un oggetto
AutocompleteService
per recuperare le previsioni in modo programmatico. ChiamagetPlacePredictions()
per recuperare i luoghi corrispondenti oppure chiamagetQueryPredictions()
per recuperare i luoghi corrispondenti più i termini di ricerca suggeriti. Nota:AutocompleteService
non aggiunge controlli dell'interfaccia utente. I metodi precedenti restituiscono invece un array di oggetti di previsione. Ogni oggetto di previsione contiene il testo della previsione, nonché informazioni di riferimento e dettagli su come il risultato corrisponde all'input dell'utente. Vedi i dettagli di seguito.
Aggiungere un widget di completamento automatico
Il widget Autocomplete
crea un campo di input di testo nella pagina web, fornisce previsioni dei luoghi in un elenco di selezione della UI e restituisce i dettagli del luogo in risposta a una richiesta getPlace()
. Ogni voce dell'elenco di selezione corrisponde a un singolo luogo (come definito dall'API Places).
Il costruttore Autocomplete
accetta due argomenti:
- Un elemento HTML
input
di tipotext
. Questo è il campo di input che il servizio di completamento automatico monitorerà e a cui allegherà i risultati. - Un argomento facoltativo
AutocompleteOptions
, che può contenere le seguenti proprietà:- Un array di dati
fields
da includere nella rispostaPlace Details
perPlaceResult
selezionato dall'utente. Se la proprietà non è impostata o se viene passato['ALL']
, vengono restituiti tutti i campi disponibili e fatturati (questa operazione non è consigliata per le implementazioni di produzione). Per un elenco dei campi, vediPlaceResult
. - Un array di
types
che specifica un tipo esplicito o una raccolta di tipi, come elencato nei tipi supportati. Se non viene specificato alcun tipo, vengono restituiti tutti i tipi. bounds
è un oggettogoogle.maps.LatLngBounds
che specifica l'area in cui cercare i luoghi. I risultati sono orientati verso, ma non limitati a, luoghi contenuti all'interno di questi limiti.strictBounds
è unboolean
che specifica se l'API deve restituire solo i luoghi che si trovano rigorosamente all'interno della regione definita dalbounds
specificato. L'API non restituisce risultati al di fuori di questa regione anche se corrispondono all'input dell'utente.componentRestrictions
può essere utilizzato per limitare i risultati a gruppi specifici. Puoi utilizzarecomponentRestrictions
per filtrare fino a 5 paesi. I paesi devono essere trasmessi come codice paese di due caratteri compatibile con ISO 3166-1 Alpha-2. Più paesi devono essere trasmessi come elenco di codici paese.Nota:se ricevi risultati imprevisti con un codice paese, verifica di utilizzare un codice che includa i paesi, i territori dipendenti e le aree speciali di interesse geografico che intendi. Puoi trovare informazioni sui codici su Wikipedia: List of ISO 3166 country codes o sulla piattaforma di navigazione online ISO.
placeIdOnly
può essere utilizzato per indicare al widgetAutocomplete
di recuperare solo gli ID luogo. Se chiamigetPlace()
sull'oggettoAutocomplete
, l'PlaceResult
reso disponibile avrà impostate solo le proprietàplace id
,types
ename
. Puoi utilizzare l'ID luogo restituito con le chiamate ai servizi Places, Geocoding, Directions o Distance Matrix.
- Un array di dati
Limitare le previsioni di completamento automatico
Per impostazione predefinita, Place Autocomplete presenta tutti i tipi di luoghi, con una preferenza per le previsioni vicino alla posizione dell'utente, e recupera tutti i campi di dati disponibili per il luogo selezionato dall'utente. Imposta le opzioni di completamento automatico dei luoghi per presentare previsioni più pertinenti in base al tuo caso d'uso.
Impostare le opzioni durante la costruzione
Il costruttore Autocomplete
accetta un parametro AutocompleteOptions
per impostare i vincoli durante la creazione del widget. L'esempio seguente imposta le opzioni
bounds
, componentRestrictions
e types
per richiedere luoghi di tipo establishment
, privilegiando quelli all'interno dell'area geografica specificata e limitando le previsioni solo ai luoghi all'interno degli Stati Uniti. L'impostazione dell'opzione
fields
specifica quali informazioni restituire sul luogo selezionato dall'utente.
Chiama setOptions()
per modificare il valore di un'opzione per un widget esistente.
TypeScript
const center = { lat: 50.064192, lng: -130.605469 }; // Create a bounding box with sides ~10km away from the center point const defaultBounds = { north: center.lat + 0.1, south: center.lat - 0.1, east: center.lng + 0.1, west: center.lng - 0.1, }; const input = document.getElementById("pac-input") as HTMLInputElement; const options = { bounds: defaultBounds, componentRestrictions: { country: "us" }, fields: ["address_components", "geometry", "icon", "name"], strictBounds: false, }; const autocomplete = new google.maps.places.Autocomplete(input, options);
JavaScript
const center = { lat: 50.064192, lng: -130.605469 }; // Create a bounding box with sides ~10km away from the center point const defaultBounds = { north: center.lat + 0.1, south: center.lat - 0.1, east: center.lng + 0.1, west: center.lng - 0.1, }; const input = document.getElementById("pac-input"); const options = { bounds: defaultBounds, componentRestrictions: { country: "us" }, fields: ["address_components", "geometry", "icon", "name"], strictBounds: false, }; const autocomplete = new google.maps.places.Autocomplete(input, options);
Specifica i campi di dati
Specifica i campi di dati per evitare che ti vengano addebitati costi per gli SKU di dati Places non necessari. Includi la proprietà fields
nel
AutocompleteOptions
passato al costruttore del widget, come mostrato nell'esempio
precedente, o chiama setFields()
su un oggetto Autocomplete
esistente.
autocomplete.setFields(["place_id", "geometry", "name"]);
Definisci i bias e i confini dell'area di ricerca per il completamento automatico
Puoi orientare i risultati del completamento automatico in modo da favorire una posizione o un'area approssimativa nei seguenti modi:
- Imposta i limiti per la creazione dell'oggetto
Autocomplete
. - Modificare i limiti di un
Autocomplete
esistente. - Imposta i limiti sull'area visibile della mappa.
- Limita la ricerca ai limiti.
- Limita la ricerca a un paese specifico.
L'esempio precedente mostra l'impostazione dei limiti durante la creazione. I seguenti esempi mostrano le altre tecniche di distorsione.
Modificare i limiti di un completamento automatico esistente
Chiama il numero setBounds()
per modificare l'area di ricerca su un Autocomplete
esistente in modo che corrisponda a limiti rettangolari.
TypeScript
const southwest = { lat: 5.6108, lng: 136.589326 }; const northeast = { lat: 61.179287, lng: 2.64325 }; const newBounds = new google.maps.LatLngBounds(southwest, northeast); autocomplete.setBounds(newBounds);
JavaScript
const southwest = { lat: 5.6108, lng: 136.589326 }; const northeast = { lat: 61.179287, lng: 2.64325 }; const newBounds = new google.maps.LatLngBounds(southwest, northeast); autocomplete.setBounds(newBounds);
Imposta i limiti sull'area visibile della mappa
Utilizza bindTo()
per orientare i risultati verso il viewport della mappa,
anche se il viewport cambia.
TypeScript
autocomplete.bindTo("bounds", map);
JavaScript
autocomplete.bindTo("bounds", map);
Utilizza unbind()
per scollegare le previsioni di completamento automatico dal riquadro della mappa.
TypeScript
autocomplete.unbind("bounds"); autocomplete.setBounds({ east: 180, west: -180, north: 90, south: -90 });
JavaScript
autocomplete.unbind("bounds"); autocomplete.setBounds({ east: 180, west: -180, north: 90, south: -90 });
Limitare la ricerca ai limiti attuali
Imposta l'opzione strictBounds
per limitare i risultati ai limiti attuali, in base all'area visibile della mappa o ai limiti rettangolari.
autocomplete.setOptions({ strictBounds: true });
Limitare le previsioni a un paese specifico
Utilizza l'opzione componentRestrictions
o chiama il numero setComponentRestrictions()
per limitare la
ricerca con completamento automatico a un insieme specifico di massimo cinque paesi.
TypeScript
autocomplete.setComponentRestrictions({ country: ["us", "pr", "vi", "gu", "mp"], });
JavaScript
autocomplete.setComponentRestrictions({ country: ["us", "pr", "vi", "gu", "mp"], });
Limita i tipi di luoghi
Utilizza l'opzione types
o chiama setTypes()
per limitare
le previsioni a determinati tipi di luoghi. Questo vincolo specifica un tipo o una raccolta di tipi,
come elencato in Tipi di luoghi.
Se non viene specificato alcun vincolo, vengono restituiti tutti i tipi.
Per il valore dell'opzione types
o il valore passato a setTypes()
, puoi specificare:
Un array contenente fino a cinque valori di Tabella 1 o Tabella 2 di Tipi di luoghi. Ad esempio:
types: ['hospital', 'pharmacy', 'bakery', 'country']
Oppure:
autocomplete.setTypes(['hospital', 'pharmacy', 'bakery', 'country']);
- Uno qualsiasi dei filtri nella Tabella 3 da Tipi di luoghi. Puoi specificare un solo valore della Tabella 3.
La richiesta verrà rifiutata se:
- Specifichi più di cinque tipi.
- Specifica i tipi non riconosciuti.
- Puoi combinare qualsiasi tipo di filtro della Tabella 1 o della Tabella 2 con qualsiasi filtro della Tabella 3.
La demo di Places Autocomplete mostra le differenze nelle previsioni tra i diversi tipi di luoghi.
Recupero delle informazioni sul luogo
Quando un utente seleziona un luogo dai suggerimenti allegati al campo di testo del completamento automatico, il servizio attiva un evento place_changed
. Per ottenere i dettagli
di un luogo:
- Crea un gestore di eventi per l'evento
place_changed
e chiamaaddListener()
sull'oggettoAutocomplete
per aggiungere il gestore. - Chiama
Autocomplete.getPlace()
sull'oggettoAutocomplete
per recuperare un oggettoPlaceResult
, che puoi utilizzare per ottenere maggiori informazioni sul luogo selezionato.
Per impostazione predefinita, quando un utente seleziona un luogo, il completamento automatico restituisce tutti i campi dati disponibili per il luogo selezionato e ti verrà addebitato l'importo corrispondente.
Utilizza Autocomplete.setFields()
per specificare i campi di dati dei luoghi da restituire. Scopri di più sull'oggetto
PlaceResult
, incluso un elenco di campi di dati sui luoghi che
puoi richiedere. Per evitare di pagare per dati non necessari, assicurati di utilizzare Autocomplete.setFields()
per specificare
solo i dati sui luoghi che utilizzerai.
La proprietà name
contiene il
description
delle previsioni di Places Autocomplete. Per saperne di più su
description
, consulta la
documentazione
di Places Autocomplete.
Per i moduli di indirizzo, è utile ottenere l'indirizzo in formato strutturato. Per
restituire l'indirizzo strutturato del luogo selezionato, chiama
Autocomplete.setFields()
e specifica il campo address_components
.
L'esempio seguente utilizza il completamento automatico per compilare i campi di un modulo di indirizzo.
TypeScript
function fillInAddress() { // Get the place details from the autocomplete object. const place = autocomplete.getPlace(); let address1 = ""; let postcode = ""; // Get each component of the address from the place details, // and then fill-in the corresponding field on the form. // place.address_components are google.maps.GeocoderAddressComponent objects // which are documented at http://goo.gle/3l5i5Mr for (const component of place.address_components as google.maps.GeocoderAddressComponent[]) { // @ts-ignore remove once typings fixed const componentType = component.types[0]; switch (componentType) { case "street_number": { address1 = `${component.long_name} ${address1}`; break; } case "route": { address1 += component.short_name; break; } case "postal_code": { postcode = `${component.long_name}${postcode}`; break; } case "postal_code_suffix": { postcode = `${postcode}-${component.long_name}`; break; } case "locality": (document.querySelector("#locality") as HTMLInputElement).value = component.long_name; break; case "administrative_area_level_1": { (document.querySelector("#state") as HTMLInputElement).value = component.short_name; break; } case "country": (document.querySelector("#country") as HTMLInputElement).value = component.long_name; break; } } address1Field.value = address1; postalField.value = postcode; // After filling the form with address components from the Autocomplete // prediction, set cursor focus on the second address line to encourage // entry of subpremise information such as apartment, unit, or floor number. address2Field.focus(); }
JavaScript
function fillInAddress() { // Get the place details from the autocomplete object. const place = autocomplete.getPlace(); let address1 = ""; let postcode = ""; // Get each component of the address from the place details, // and then fill-in the corresponding field on the form. // place.address_components are google.maps.GeocoderAddressComponent objects // which are documented at http://goo.gle/3l5i5Mr for (const component of place.address_components) { // @ts-ignore remove once typings fixed const componentType = component.types[0]; switch (componentType) { case "street_number": { address1 = `${component.long_name} ${address1}`; break; } case "route": { address1 += component.short_name; break; } case "postal_code": { postcode = `${component.long_name}${postcode}`; break; } case "postal_code_suffix": { postcode = `${postcode}-${component.long_name}`; break; } case "locality": document.querySelector("#locality").value = component.long_name; break; case "administrative_area_level_1": { document.querySelector("#state").value = component.short_name; break; } case "country": document.querySelector("#country").value = component.long_name; break; } } address1Field.value = address1; postalField.value = postcode; // After filling the form with address components from the Autocomplete // prediction, set cursor focus on the second address line to encourage // entry of subpremise information such as apartment, unit, or floor number. address2Field.focus(); } window.initAutocomplete = initAutocomplete;
Personalizzare il testo segnaposto
Per impostazione predefinita, il campo di testo creato dal servizio di completamento automatico contiene
un testo segnaposto standard. Per modificare il testo, imposta l'attributo
placeholder
sull'elemento input
:
<input id="searchTextField" type="text" size="50" placeholder="Anything you want!">
Nota: il testo segnaposto predefinito viene localizzato automaticamente. Se specifica il tuo valore segnaposto, devi gestire la localizzazione di questo valore nella tua applicazione. Per informazioni su come l'API Google Maps JavaScript sceglie la lingua da utilizzare, leggi la documentazione sulla localizzazione.
Per personalizzare l'aspetto del widget, consulta Stilizzazione dei widget Completamento automatico e Casella di ricerca.
Aggiungere un widget Casella di ricerca
SearchBox
consente agli utenti di eseguire una ricerca geografica basata su testo, ad esempio "pizza a New York" o "negozi di scarpe vicino a Robson Street".
Puoi collegare SearchBox
a un campo di testo e, man mano che
viene inserito il testo, il servizio restituirà le previsioni sotto forma di
elenco a discesa.
SearchBox
fornisce un elenco esteso di previsioni, che
possono includere luoghi (come definiti dall'API Places) e termini di ricerca
suggeriti. Ad esempio, se l'utente inserisce "pizza a new", l'elenco di selezione potrebbe
includere la frase "pizza a New York, NY" e i nomi di vari
punti vendita di pizza. Quando un utente seleziona un luogo dall'elenco,
le informazioni su quel luogo vengono restituite all'oggetto SearchBox e possono essere
recuperate dalla tua applicazione.
Il costruttore SearchBox
accetta due argomenti:
- Un elemento HTML
input
di tipotext
. Questo è il campo di input che il servizioSearchBox
monitorerà e a cui allegherà i risultati. - Un argomento
options
, che può contenere la proprietàbounds
:bounds
è un oggettogoogle.maps.LatLngBounds
che specifica l'area in cui cercare i luoghi. I risultati sono orientati verso, ma non limitati a, luoghi contenuti all'interno di questi limiti.
Il seguente codice utilizza il parametro bounds per orientare i risultati verso i luoghi all'interno di una particolare area geografica, specificata utilizzando le coordinate di latitudine/longitudine.
var defaultBounds = new google.maps.LatLngBounds( new google.maps.LatLng(-33.8902, 151.1759), new google.maps.LatLng(-33.8474, 151.2631)); var input = document.getElementById('searchTextField'); var searchBox = new google.maps.places.SearchBox(input, { bounds: defaultBounds });
Modificare l'area di ricerca per SearchBox
Per modificare l'area di ricerca di un SearchBox
esistente, chiama
setBounds()
sull'oggetto SearchBox
e passa l'oggetto
LatLngBounds
pertinente.
Recupero delle informazioni sul luogo
Quando l'utente seleziona un elemento dai suggerimenti allegati alla casella di ricerca, il servizio attiva un evento places_changed
. Puoi
chiamare getPlaces()
sull'oggetto SearchBox
per
recuperare un array contenente diverse previsioni, ognuna delle quali è un
oggetto PlaceResult
.
Per saperne di più sull'oggetto PlaceResult
, consulta la documentazione sui
risultati dei dettagli del luogo.
TypeScript
// Listen for the event fired when the user selects a prediction and retrieve // more details for that place. searchBox.addListener("places_changed", () => { const places = searchBox.getPlaces(); if (places.length == 0) { return; } // Clear out the old markers. markers.forEach((marker) => { marker.setMap(null); }); markers = []; // For each place, get the icon, name and location. const bounds = new google.maps.LatLngBounds(); places.forEach((place) => { if (!place.geometry || !place.geometry.location) { console.log("Returned place contains no geometry"); return; } const icon = { url: place.icon as string, size: new google.maps.Size(71, 71), origin: new google.maps.Point(0, 0), anchor: new google.maps.Point(17, 34), scaledSize: new google.maps.Size(25, 25), }; // Create a marker for each place. markers.push( new google.maps.Marker({ map, icon, title: place.name, position: place.geometry.location, }) ); if (place.geometry.viewport) { // Only geocodes have viewport. bounds.union(place.geometry.viewport); } else { bounds.extend(place.geometry.location); } }); map.fitBounds(bounds); });
JavaScript
// Listen for the event fired when the user selects a prediction and retrieve // more details for that place. searchBox.addListener("places_changed", () => { const places = searchBox.getPlaces(); if (places.length == 0) { return; } // Clear out the old markers. markers.forEach((marker) => { marker.setMap(null); }); markers = []; // For each place, get the icon, name and location. const bounds = new google.maps.LatLngBounds(); places.forEach((place) => { if (!place.geometry || !place.geometry.location) { console.log("Returned place contains no geometry"); return; } const icon = { url: place.icon, size: new google.maps.Size(71, 71), origin: new google.maps.Point(0, 0), anchor: new google.maps.Point(17, 34), scaledSize: new google.maps.Size(25, 25), }; // Create a marker for each place. markers.push( new google.maps.Marker({ map, icon, title: place.name, position: place.geometry.location, }), ); if (place.geometry.viewport) { // Only geocodes have viewport. bounds.union(place.geometry.viewport); } else { bounds.extend(place.geometry.location); } }); map.fitBounds(bounds); });
Per personalizzare l'aspetto del widget, consulta Stilizzazione dei widget Completamento automatico e Casella di ricerca.
Recupero programmatico delle previsioni del servizio Place Autocomplete
Per recuperare le previsioni in modo programmatico, utilizza la classe
AutocompleteService
. AutocompleteService
non aggiunge controlli UI. Restituisce invece un array di oggetti di previsione, ognuno dei quali contiene il testo della previsione, informazioni di riferimento e dettagli su come il risultato corrisponde all'input dell'utente.
Questa opzione è utile se vuoi avere un maggiore controllo sull'interfaccia utente rispetto a quello
offerto da Autocomplete
e SearchBox
descritti sopra.
AutocompleteService
espone i seguenti metodi:
getPlacePredictions()
restituisce le previsioni dei luoghi. Nota: un "luogo" può essere un'attività, una posizione geografica o un punto d'interesse importante, come definito dall'API Places.getQueryPredictions()
restituisce un elenco esteso di previsioni, che possono includere luoghi (come definiti dall'API Places) e termini di ricerca suggeriti. Ad esempio, se l'utente inserisce "pizza a new", l'elenco di selezione potrebbe includere la frase "pizza a New York, NY" e i nomi di vari punti vendita di pizza.
Entrambi i metodi precedenti restituiscono un array di oggetti prediction nel seguente formato:
description
è la previsione corrispondente.distance_meters
è la distanza in metri del luogo daAutocompletionRequest.origin
specificato.matched_substrings
contiene un insieme di sottostringhe nella descrizione che corrispondono agli elementi nell'input dell'utente. Ciò è utile per evidenziare queste sottostringhe nella tua applicazione. In molti casi, la query viene visualizzata come sottostringa del campo della descrizione.length
è la lunghezza della sottostringa.offset
è l'offset del carattere, misurato dall'inizio della stringa di descrizione, in corrispondenza del quale viene visualizzata la sottostringa corrispondente.
place_id
è un identificatore testuale che identifica in modo univoco un luogo. Per recuperare informazioni sul luogo, passa questo identificatore nel campoplaceId
di una richiesta Places Details. Scopri di più su come fare riferimento a un luogo con un ID luogo.terms
è un array contenente gli elementi della query. Per un luogo, ogni elemento in genere costituisce una parte dell'indirizzo.offset
è l'offset del carattere, misurato dall'inizio della stringa di descrizione, in corrispondenza del quale viene visualizzata la sottostringa corrispondente.value
è il termine corrispondente.
L'esempio riportato di seguito esegue una richiesta di previsione delle query per la frase "pizza vicino a" e mostra il risultato in un elenco.
TypeScript
// This example retrieves autocomplete predictions programmatically from the // autocomplete service, and displays them as an HTML list. // This example requires the Places library. Include the libraries=places // parameter when you first load the API. For example: // <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places"> function initService(): void { const displaySuggestions = function ( predictions: google.maps.places.QueryAutocompletePrediction[] | null, status: google.maps.places.PlacesServiceStatus ) { if (status != google.maps.places.PlacesServiceStatus.OK || !predictions) { alert(status); return; } predictions.forEach((prediction) => { const li = document.createElement("li"); li.appendChild(document.createTextNode(prediction.description)); (document.getElementById("results") as HTMLUListElement).appendChild(li); }); }; const service = new google.maps.places.AutocompleteService(); service.getQueryPredictions({ input: "pizza near Syd" }, displaySuggestions); } declare global { interface Window { initService: () => void; } } window.initService = initService;
JavaScript
// This example retrieves autocomplete predictions programmatically from the // autocomplete service, and displays them as an HTML list. // This example requires the Places library. Include the libraries=places // parameter when you first load the API. For example: // <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places"> function initService() { const displaySuggestions = function (predictions, status) { if (status != google.maps.places.PlacesServiceStatus.OK || !predictions) { alert(status); return; } predictions.forEach((prediction) => { const li = document.createElement("li"); li.appendChild(document.createTextNode(prediction.description)); document.getElementById("results").appendChild(li); }); }; const service = new google.maps.places.AutocompleteService(); service.getQueryPredictions({ input: "pizza near Syd" }, displaySuggestions); } window.initService = initService;
CSS
HTML
<html> <head> <title>Retrieving Autocomplete Predictions</title> <link rel="stylesheet" type="text/css" href="./style.css" /> <script type="module" src="./index.js"></script> </head> <body> <p>Query suggestions for 'pizza near Syd':</p> <ul id="results"></ul> <!-- Replace Powered By Google image src with self hosted image. https://developers.google.com/maps/documentation/places/web-service/policies#other_attribution_requirements --> <img class="powered-by-google" src="https://storage.googleapis.com/geo-devrel-public-buckets/powered_by_google_on_white.png" alt="Powered by Google" /> <!-- The `defer` attribute causes the script to execute after the full HTML document has been parsed. For non-blocking uses, avoiding race conditions, and consistent behavior across browsers, consider loading using Promises. See https://developers.google.com/maps/documentation/javascript/load-maps-js-api for more information. --> <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg&callback=initService&libraries=places&v=weekly" defer ></script> </body> </html>
Prova campione
Token di sessione
AutocompleteService.getPlacePredictions()
possono utilizzare i token di sessione (se implementati) per raggruppare le richieste di completamento automatico ai fini della fatturazione. I token di sessione raggruppano le fasi di query e selezione di una ricerca di completamento automatico dell'utente in una sessione discreta ai fini della fatturazione. La sessione
inizia quando l'utente inizia a digitare una query e termina quando seleziona un
luogo. Ogni sessione può avere più query, seguite dalla selezione di un luogo.
Una volta terminata una sessione, il token non è più valido. La tua app deve
generare un nuovo token per ogni sessione. Ti consigliamo di utilizzare i token di sessione per
tutte le sessioni di completamento automatico. Se il parametro sessionToken
viene omesso o se riutilizzi un token di sessione, la sessione viene addebitata come se non fosse stato fornito alcun token di sessione (ogni richiesta viene fatturata separatamente).
Puoi utilizzare lo stesso token di sessione per effettuare una singola richiesta
Place Details
sul luogo risultante da una chiamata a AutocompleteService.getPlacePredictions()
.
In questo caso, la richiesta di completamento automatico viene combinata con la richiesta Place Details e la chiamata viene addebitata come una normale richiesta Place Details. Non sono previsti costi per la
richiesta di completamento automatico.
Assicurati di trasmettere un token di sessione univoco per ogni nuova sessione. L'utilizzo dello stesso token per più di una sessione Autocomplete invaliderà queste sessioni e tutte le richieste Autocomplete nelle sessioni non valide verranno addebitate singolarmente utilizzando lo SKU Autocomplete per richiesta. Scopri di più sui token di sessione.
L'esempio seguente mostra la creazione di un token di sessione, che viene poi passato in un
AutocompleteService
(la funzione displaySuggestions()
è stata omessa per brevità):
// Create a new session token. var sessionToken = new google.maps.places.AutocompleteSessionToken(); // Pass the token to the autocomplete service. var autocompleteService = new google.maps.places.AutocompleteService(); autocompleteService.getPlacePredictions({ input: 'pizza near Syd', sessionToken: sessionToken }, displaySuggestions);
Assicurati di trasmettere un token di sessione univoco per ogni nuova sessione. L'utilizzo dello stesso token per più di una sessione comporta l'addebito individuale di ogni richiesta.
Scopri di più sui token di sessione.
Stilizzazione dei widget Completamento automatico e Casella di ricerca
Per impostazione predefinita, gli elementi della UI forniti da Autocomplete
e
SearchBox
sono stilizzati per l'inclusione in una mappa Google. Ti consigliamo di
modificare lo stile in base al tuo sito. Sono disponibili le seguenti classi CSS. Tutte le classi elencate di seguito si applicano sia ai widget
Autocomplete
sia a quelli SearchBox
.

Classe CSS | Descrizione |
---|---|
pac-container |
L'elemento visivo contenente l'elenco delle previsioni restituite dal
servizio Place Autocomplete. Questo elenco viene visualizzato come elenco a discesa sotto il widget
Autocomplete o SearchBox . |
pac-icon |
L'icona visualizzata a sinistra di ogni elemento nell'elenco dei pronostici. |
pac-item |
Un elemento nell'elenco delle previsioni fornite dal widget
Autocomplete o SearchBox . |
pac-item:hover |
L'elemento quando l'utente passa il puntatore del mouse sopra. |
pac-item-selected |
L'elemento quando l'utente lo seleziona utilizzando la tastiera. Nota: gli elementi selezionati saranno membri di questo corso e del corso pac-item .
|
pac-item-query |
Un intervallo all'interno di un pac-item che costituisce la parte principale della
previsione. Per le località geografiche, contiene un nome di luogo, ad esempio
"Sydney", o un nome e un numero di via, ad esempio "10 King Street". Per le
ricerche basate su testo, ad esempio "pizza a New York", contiene il testo completo
della query. Per impostazione predefinita, pac-item-query è colorato
di nero. Se nel pac-item è presente altro testo, questo si trova
al di fuori di pac-item-query e ne eredita lo stile da
pac-item . Per impostazione predefinita è colorato di grigio. Il testo aggiuntivo
è in genere un indirizzo. |
pac-matched |
La parte della previsione restituita che corrisponde all'input dell'utente. Per
impostazione predefinita, questo testo corrispondente viene evidenziato in grassetto. Tieni presente che il
testo corrispondente può trovarsi ovunque all'interno di pac-item . Non fa necessariamente parte di pac-item-query e potrebbe trovarsi in parte all'interno di pac-item-query e in parte nel testo rimanente in pac-item . |
Ottimizzazione di Place Autocomplete (legacy)
Questa sezione descrive le best practice per aiutarti a sfruttare al meglio il servizio Place Autocomplete (legacy).
Ecco alcune linee guida generali:
- Il modo più rapido per sviluppare un'interfaccia utente funzionante è utilizzare il widget Place Autocomplete (legacy) dell'API Maps JavaScript, il widget Place Autocomplete (legacy) di Places SDK for Android o il controllo UI Place Autocomplete (legacy) di Places SDK for iOS.
- Sviluppa una comprensione dei campi di dati essenziali di Place Autocomplete (legacy) fin dall'inizio.
- I campi di distorsione della località e limitazione della località sono facoltativi, ma possono avere un impatto significativo sulle prestazioni del completamento automatico.
- Utilizza la gestione degli errori per assicurarti che la tua app funzioni correttamente se l'API restituisce un errore.
- Assicurati che la tua app gestisca i casi in cui non è presente alcuna selezione e offra agli utenti un modo per continuare.
Best practice per l'ottimizzazione dei costi
Ottimizzazione di base dei costi
Per ottimizzare il costo dell'utilizzo del servizio Place Autocomplete (legacy), utilizza le maschere dei campi nei widget Place Details (legacy) e Place Autocomplete (legacy) per restituire solo i campi dati del luogo di cui hai bisogno.
Ottimizzazione avanzata dei costi
Valuta l'implementazione programmatica di Place Autocomplete (legacy) per accedere ai prezzi per richiesta e richiedere i risultati dell'API Geocoding sul luogo selezionato anziché su Place Details (legacy). Il prezzo per richiesta abbinato all'API Geocoding è più conveniente del prezzo per sessione (basato sulla sessione) se vengono soddisfatte entrambe le seguenti condizioni:
- Se hai bisogno solo della latitudine/longitudine o dell'indirizzo del luogo selezionato dall'utente, l'API Geocoding fornisce queste informazioni a un costo inferiore rispetto a una chiamata a Place Details (legacy).
- Se gli utenti selezionano un suggerimento di completamento automatico entro una media di quattro o meno richieste di completamento automatico di Places (legacy), il prezzo per richiesta potrebbe essere più conveniente rispetto al prezzo per sessione.
La tua applicazione richiede informazioni diverse dall'indirizzo e dalla latitudine/longitudine della previsione selezionata?
Sì, sono necessari ulteriori dettagli
Utilizza il completamento automatico dei luoghi basato sulla sessione (legacy) con Places Details (legacy).
Poiché la tua applicazione richiede Place Details (legacy) come il nome del luogo, lo stato dell'attività o l'orario di apertura, l'implementazione di Place Autocomplete (legacy) deve utilizzare un token di sessione (a livello di programmazione o integrato nei widget JavaScript, Android o iOS). per sessione più gli SKU di dati di Places applicabili a seconda dei campi di dati del luogo che richiedi.1
Implementazione del widget
La gestione delle sessioni è integrata automaticamente nei widget JavaScript, Android o iOS. Sono incluse sia le richieste Place Autocomplete (legacy) sia la richiesta Place Details (legacy) nella previsione selezionata. Assicurati di specificare il parametro fields
per richiedere solo i
campi dati del luogo di cui hai bisogno.
Implementazione programmatica
Utilizza un token di sessione con le richieste Place Autocomplete (legacy). Quando richiedi Dettagli luogo (legacy) sulla previsione selezionata, includi i seguenti parametri:
- L'ID luogo dalla risposta di Place Autocomplete (legacy)
- Il token di sessione utilizzato nella richiesta Place Autocomplete (legacy)
- Il parametro
fields
che specifica i campi di dati del luogo di cui hai bisogno
No, servono solo l'indirizzo e la posizione
L'API Geocoding potrebbe essere un'opzione più conveniente rispetto a Places Details (legacy) per la tua applicazione, a seconda delle prestazioni dell'utilizzo di Place Autocomplete (legacy). L'efficienza di Place Autocomplete (legacy) di ogni applicazione varia a seconda di ciò che inseriscono gli utenti, di dove viene utilizzata l'applicazione e se sono state implementate le best practice per l'ottimizzazione del rendimento.
Per rispondere alla seguente domanda, analizza il numero medio di caratteri digitati da un utente prima di selezionare una previsione di completamento automatico di Place (legacy) nella tua applicazione.
In media, gli utenti selezionano una previsione di completamento automatico di Places (legacy) in quattro o meno richieste?
Sì
Implementa Place Autocomplete (legacy) in modo programmatico senza token di sessione e chiama l'API Geocoding sulla previsione del luogo selezionato.
L'API Geocoding fornisce indirizzi e coordinate di latitudine/longitudine. L'invio di quattro richieste Place Autocomplete (legacy) - Per Request più una chiamata all'API Geocoding relativa alla previsione del luogo selezionato costa meno di Place Autocomplete (legacy) - Per Session per sessione.1
Valuta la possibilità di utilizzare le best practice per il rendimento per aiutare gli utenti a ottenere la previsione che cercano in un numero ancora minore di caratteri.
No
Utilizza il completamento automatico dei luoghi basato sulla sessione (legacy) con Places Details (legacy).
Poiché il numero medio di richieste che prevedi di effettuare prima che un utente selezioni una previsione di Place Autocomplete (legacy) supera il costo dei prezzi per sessione, l'implementazione di Place Autocomplete (legacy) deve utilizzare un token di sessione sia per le richieste Place Autocomplete (legacy) sia per la richiesta Place Details (legacy) associata per sessione.1
Implementazione del widget
La gestione delle sessioni è integrata automaticamente nei widget JavaScript, Android o iOS. Sono incluse sia le richieste Place Autocomplete (legacy) sia la richiesta Place Details (legacy) nella previsione selezionata. Assicurati di specificare il parametro fields
per assicurarti di richiedere solo i campi Dati di base.
Implementazione programmatica
Utilizza un token di sessione con le richieste Place Autocomplete (legacy). Quando richiedi Dettagli luogo (legacy) sulla previsione selezionata, includi i seguenti parametri:
- L'ID luogo dalla risposta di Place Autocomplete (legacy)
- Il token di sessione utilizzato nella richiesta Place Autocomplete (legacy)
- Il parametro
fields
che specifica i campi Dati di base come indirizzo e geometria
Valuta la possibilità di ritardare le richieste di completamento automatico di Places (legacy)
Puoi utilizzare strategie come il ritardo di una richiesta di completamento automatico di Places (legacy) finché l'utente non ha digitato i primi tre o quattro caratteri, in modo che la tua applicazione effettui meno richieste. Ad esempio, se effettui richieste di completamento automatico di Places (legacy) per ogni carattere dopo che l'utente ha digitato il terzo carattere, se l'utente digita sette caratteri e seleziona una previsione per la quale effettui una richiesta dell'API Geocoding, il costo totale sarà per 4 completamenti automatici di Places (legacy) per richiesta + geocodifica.1
Se il ritardo delle richieste può portare la tua richiesta programmatica media al di sotto di quattro, puoi seguire le indicazioni per l'implementazione di Place Autocomplete (legacy) con l'API Geocoding. Tieni presente che il ritardo delle richieste può essere percepito come latenza dall'utente, che potrebbe aspettarsi di vedere le previsioni a ogni nuovo tasto premuto.
Valuta la possibilità di utilizzare le best practice per il rendimento per aiutare gli utenti a ottenere la previsione che cercano con un numero inferiore di caratteri.
-
Per i costi, consulta i listini prezzi di Google Maps Platform.
Best practice per le prestazioni
Le seguenti linee guida descrivono i modi per ottimizzare il rendimento di Place Autocomplete (legacy):
- Aggiungi limitazioni per paese, priorità alla località, e (per le implementazioni programmatiche) preferenza della lingua all'implementazione di Place Autocomplete (legacy). La preferenza della lingua non è necessaria con i widget, poiché questi scelgono le preferenze della lingua dal browser o dal dispositivo mobile dell'utente.
- Se Place Autocomplete (legacy) è accompagnato da una mappa, puoi impostare la posizione in base all'area visibile della mappa.
- Nelle situazioni in cui un utente non sceglie una delle previsioni di Place Autocomplete (legacy), in genere perché nessuna di queste previsioni corrisponde all'indirizzo del risultato desiderato, puoi riutilizzare l'input originale dell'utente per tentare di ottenere risultati più pertinenti:
- Se prevedi che l'utente inserisca solo informazioni sull'indirizzo, riutilizza l'input utente originale in una chiamata all'API Geocoding.
- Se prevedi che l'utente inserisca query per un luogo specifico in base al nome o all'indirizzo, utilizza una richiesta Trova luogo (legacy). Se i risultati sono previsti solo in una regione specifica, utilizza l'aggiustamento della località.
- Gli utenti che inseriscono indirizzi di locali secondari, ad esempio indirizzi di unità o appartamenti specifici all'interno di un edificio. Ad esempio, l'indirizzo ceco "Stroupežnického 3191/17, Praha" restituisce una previsione parziale in Place Autocomplete (legacy).
- Utenti che inseriscono indirizzi con prefissi di segmenti stradali come "23-30 29th St, Queens" a New York City o "47-380 Kamehameha Hwy, Kaneohe" sull'isola di Kauai nelle Hawaii.
Limiti di utilizzo
Quote
Per informazioni su quota e prezzi, consulta la documentazione su utilizzo e fatturazione per l'API Places.