Panoramica
Le funzioni della libreria Places dell'API Maps JavaScript consentono alla tua applicazione di cercare luoghi (definiti in questa API come stabilimenti, località geografiche o punti di interesse importanti) contenuti in un'area definita, ad esempio i limiti di una mappa o intorno a un punto fisso.
L'API Places offre una funzionalità di completamento automatico che puoi utilizzare per dare alle tue applicazioni il comportamento di ricerca predittiva del campo di ricerca di Google Maps. Quando un utente inizia a digitare un indirizzo, il completamento automatico compila il resto. Per saperne di più, consulta la documentazione sul completamento automatico.
Per iniziare
Se non hai familiarità con l'API Maps JavaScript o con JavaScript, ti consigliamo di esaminare JavaScript e ottenere una chiave API prima di iniziare.
Caricare la libreria
Il servizio Places è una libreria autonoma, separata dal codice principale
dell'API Maps JavaScript. Per utilizzare la funzionalità contenuta
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 saperne di più, consulta la panoramica delle librerie.
Aggiungi l'API Places all'elenco delle limitazioni delle API della chiave API
L'applicazione di limitazioni delle API alle chiavi limita l'utilizzo della chiave API a una o più API o SDK. Le richieste a un'API o a un SDK associati alla chiave API verranno elaborate. Le richieste riguardanti SDK e API non associati alla chiave API non andranno a buon fine. Per limitare l'utilizzo di una chiave API con la libreria Places, API Maps JavaScript:- Vai alla console Google Cloud.
- Fai clic sul menu a discesa del progetto e seleziona il progetto che contiene la chiave API che vuoi proteggere.
- Fai clic sul pulsante del menu
e seleziona Google Maps Platform > Credenziali.
- Nella pagina Credenziali, fai clic sul nome della chiave API che vuoi proteggere.
- Nella pagina Limita e rinomina chiave API, imposta le limitazioni:
- Restrizioni delle API
- Seleziona Limita chiave.
- Fai clic su Seleziona API e seleziona sia API Maps JavaScript che API Places.
(Se una delle API non è elencata, devi abilitarla.)
- Fai clic su SALVA.
Utilizzo e limiti
Quote
La libreria Places condivide una quota di utilizzo con l'API Places, come descritto nella documentazione sui limiti di utilizzo dell'API Places.
Norme
L'utilizzo di Places Library, Maps JavaScript API deve essere conforme alle norme descritte per l'API Places.
Place Searches
Con il servizio Places puoi eseguire i seguenti tipi di ricerche:
- Find Place from Query restituisce un luogo in base a una query di testo (ad esempio, il nome o l'indirizzo di un luogo).
- Find Place from Phone Number restituisce un luogo in base a un numero di telefono.
- Ricerca nelle vicinanze restituisce un elenco di luoghi nelle vicinanze in base alla posizione di un utente.
- Ricerca di testo restituisce un elenco di luoghi nelle vicinanze in base a una stringa di ricerca, ad esempio "Pizza".
- Le richieste Place Details restituiscono informazioni più dettagliate su un luogo specifico, incluse le recensioni degli utenti.
Le informazioni restituite possono includere attività commerciali, come ristoranti, negozi e uffici, nonché risultati di "geocodifica", che indicano indirizzi, aree politiche come paesi e città e altri punti di interesse.
Richieste Find Place
Una richiesta Find Place ti consente di cercare un luogo tramite una query di testo o un numero di telefono. Esistono due tipi di richieste Trova luogo:
Trova luogo dalla query
Find Place from Query accetta un input di testo e restituisce un luogo. L'input può
essere qualsiasi tipo di dati di Places, ad esempio il nome o l'indirizzo di un'attività. Per effettuare una
richiesta Trova luogo da query, chiama il metodo
findPlaceFromQuery()
PlacesService, che accetta i seguenti parametri:
query(obbligatorio) La stringa di testo su cui eseguire la ricerca, ad esempio "ristorante" o "Via Principale 123". Deve essere un toponimo, un indirizzo o una categoria di attività. Qualsiasi altro tipo di input può generare errori e non è garantito che restituisca risultati validi. L'API Places restituirà le corrispondenze candidate in base a questa stringa e ordinerà i risultati in base alla loro pertinenza percepita.fields(obbligatorio) Uno o più campi che specificano i tipi di dati di Places da restituire.locationBias(facoltativo) Coordinate che definiscono l'area di ricerca. Può essere uno dei seguenti:- Un insieme di coordinate lat/lng specificate come LatLngLiteral o oggetto LatLng
- Confini rettangolari (due coppie di coordinate di latitudine/longitudine o un oggetto LatLngBounds)
- Raggio (in metri) centrato su una coppia di coordinate lat/lng
Devi anche passare un metodo di callback a findPlaceFromQuery(),
per gestire l'oggetto dei risultati e la risposta google.maps.places.PlacesServiceStatus.
L'esempio seguente mostra una chiamata a findPlaceFromQuery(),
che cerca "Museum of Contemporary Art Australia" e include i campi
name e geometry.
var map; var service; var infowindow; function initMap() { var sydney = new google.maps.LatLng(-33.867, 151.195); infowindow = new google.maps.InfoWindow(); map = new google.maps.Map( document.getElementById('map'), {center: sydney, zoom: 15}); var request = { query: 'Museum of Contemporary Art Australia', fields: ['name', 'geometry'], }; var service = new google.maps.places.PlacesService(map); service.findPlaceFromQuery(request, function(results, status) { if (status === google.maps.places.PlacesServiceStatus.OK) { for (var i = 0; i < results.length; i++) { createMarker(results[i]); } map.setCenter(results[0].geometry.location); } }); }
Trova luogo da numero di telefono
Find Place from Phone Number accetta un numero di telefono e restituisce un luogo. Per
effettuare una richiesta Trova luogo da numero di telefono, chiama il
metodo findPlaceFromPhoneNumber() di PlacesService, che accetta i seguenti parametri:
phoneNumber(obbligatorio) Un numero di telefono nel formato E.164.fields(obbligatorio) Uno o più campi che specificano i tipi di dati di Places da restituire.locationBias(facoltativo) Coordinate che definiscono l'area in cui eseguire la ricerca. Può essere uno dei seguenti:- Un insieme di coordinate lat/lng specificate come LatLngLiteral o oggetto LatLng
- Limiti rettangolari (quattro punti lat/lng o un oggetto LatLngBounds)
- Raggio (in metri) centrato su una coppia di coordinate lat/lng
Devi anche passare un metodo di callback a findPlaceFromPhoneNumber(),
per gestire l'oggetto dei risultati e la risposta google.maps.places.PlacesServiceStatus.
Campi (metodi Find Place)
Utilizza il parametro fields per specificare un array di tipi di dati sui luoghi da restituire.
Ad esempio: fields: ['formatted_address', 'opening_hours', 'geometry'].
Utilizza un punto quando specifichi valori composti. Ad esempio opening_hours.weekday_text.
I campi corrispondono ai risultati della ricerca di luoghi e sono suddivisi
in tre categorie di fatturazione: Basic, Contact e Atmosphere. I campi di base
vengono fatturati alla tariffa base e non comportano costi aggiuntivi. I campi Contatto e Atmosfera
vengono fatturati a una tariffa più elevata. Per ulteriori informazioni, consulta il foglio dei prezzi. Le attribuzioni (html_attributions) vengono sempre restituite a ogni chiamata, indipendentemente dal fatto che il campo sia stato richiesto.
Basic
La categoria Base include i seguenti campi:
business_status, formatted_address, geometry,
icon,icon_mask_base_uri, icon_background_color,
name, permanently_closed (ritirato),
photos, place_id, plus_code, types
Contatto
La categoria Contatto include il seguente campo:opening_hours (ritirato nella libreria Places, API Maps JavaScript. Utilizza una richiesta Place Details per ottenere i risultati di
opening_hours.
Atmosfera
La categoria Atmosfera include i seguenti campi:price_level, rating, user_ratings_total
I metodi findPlaceFromQuery() e findPlaceFromPhoneNumber() accettano lo stesso insieme di campi e possono restituire gli stessi campi nelle rispettive risposte.
Imposta la distorsione della posizione (metodi Find Place)
Utilizza il parametro locationBias per fare in modo che Find Place favorisca i risultati
in una determinata area. Puoi impostare locationBias nei seguenti
modi:
Per orientare i risultati verso un'area specifica:
locationBias: {lat: 37.402105, lng: -122.081974}
Definisci un'area rettangolare in cui cercare:
locationBias: {north: 37.41, south: 37.40, east: -122.08, west: -122.09}
Puoi anche utilizzare un LatLngBounds.
Definisci un raggio di ricerca (in metri), centrato su una determinata area:
locationBias: {radius: 100, center: {lat: 37.402105, lng: -122.081974}}
Richieste di ricerca nelle vicinanze
Una ricerca nelle vicinanze ti consente di cercare luoghi all'interno di un'area specifica per parola chiave o tipo. Una ricerca nelle vicinanze deve sempre includere una località, che può essere specificata in uno dei due modi seguenti:
- un
LatLngBounds. - un'area circolare definita come combinazione della proprietà
location, che specifica il centro del cerchio come oggettoLatLng, e un raggio, misurato in metri.
Una ricerca di luoghi nelle vicinanze viene avviata con una chiamata al metodo nearbySearch() di
PlacesService, che restituirà un array di oggetti
PlaceResult. Tieni presente che il metodo nearbySearch()
sostituisce il metodo search() a partire dalla versione 3.9.
service = new google.maps.places.PlacesService(map); service.nearbySearch(request, callback);
Questo metodo accetta una richiesta con i seguenti campi:
- Una delle seguenti opzioni:
bounds, che deve essere un oggettogoogle.maps.LatLngBoundsche definisce l'area di ricerca rettangolare. La distanza diagonale massima supportata per l'area del riquadro è di circa 100.000 metri.- un
locatione unradius; il primo accetta un oggettogoogle.maps.LatLng, mentre il secondo accetta un semplice numero intero che rappresenta il raggio del cerchio in metri. Il raggio massimo consentito è 50.000 metri. Tieni presente che quandorankByè impostato su DISTANCE, devi specificare unlocation, ma non puoi specificare unradiusobounds.
keyword(facoltativo): un termine da confrontare con tutti i campi disponibili, inclusi, a titolo esemplificativo, nome, tipo e indirizzo, nonché recensioni dei clienti e altri contenuti di terze parti.minPriceLevelemaxPriceLevel(facoltativo): limita i risultati ai soli luoghi all'interno dell'intervallo specificato. I valori validi sono compresi tra 0 (il più conveniente) e 4 (il più costoso), inclusi.nameDeprecato. Equivalente akeyword. I valori in questo campo vengono combinati con i valori nel campokeyworde passati come parte della stessa stringa di ricerca.openNow(facoltativo) — Un valore booleano, che indica che il servizio Places deve restituire solo i luoghi aperti al momento dell'invio della query. I luoghi che non specificano gli orari di apertura nel database di Google Places non verranno restituiti se includi questo parametro nella query. L'impostazioneopenNowsufalsenon ha alcun effetto.rankBy(facoltativo) specifica l'ordine in cui vengono elencati i risultati. I valori possibili sono:google.maps.places.RankBy.PROMINENCE(valore predefinito). Questa opzione ordina i risultati in base alla loro importanza. Il ranking favorirà i luoghi più importanti all'interno del raggio impostato rispetto ai luoghi nelle vicinanze che corrispondono, ma che sono meno importanti. L'evidenza può essere influenzata dal ranking di un luogo nell'indice di Google, dalla popolarità globale e da altri fattori. Quandogoogle.maps.places.RankBy.PROMINENCEè specificato, il parametroradiusè obbligatorio.google.maps.places.RankBy.DISTANCE. Questa opzione ordina i risultati in ordine crescente in base alla distanza dallocationspecificato (obbligatorio). Tieni presente che non puoi specificare unboundse/o unradiuspersonalizzato se specifichiRankBy.DISTANCE. Quando specifichiRankBy.DISTANCE, è necessario specificare uno o più valori trakeyword,nameotype.
type: limita i risultati ai luoghi che corrispondono al tipo specificato. Può essere specificato un solo tipo (se vengono forniti più tipi, tutti quelli successivi alla prima voce vengono ignorati). Consulta l'elenco dei tipi supportati.
Devi anche passare un metodo di callback a nearbySearch() per gestire l'oggetto dei risultati e la risposta google.maps.places.PlacesServiceStatus.
var map; var service; var infowindow; function initialize() { var pyrmont = new google.maps.LatLng(-33.8665433, 151.1956316); map = new google.maps.Map(document.getElementById('map'), { center: pyrmont, zoom: 15 }); var request = { location: pyrmont, 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]); } } }
Richieste di ricerca testuale
Il servizio Google Places Text Search è un servizio web che restituisce informazioni su un insieme di luoghi in base a una stringa, ad esempio "pizza a New York" o "negozi di scarpe vicino a Ottawa". Il servizio risponde con un elenco di luoghi corrispondenti alla stringa di testo e a qualsiasi preferenza di località impostata. La risposta alla ricerca includerà un elenco di luoghi. Puoi inviare una richiesta Place Details per maggiori informazioni su uno dei luoghi nella risposta.
Le ricerche di testo vengono avviate con una chiamata al metodo textSearch() di PlacesService.
service = new google.maps.places.PlacesService(map); service.textSearch(request, callback);
Questo metodo accetta una richiesta con i seguenti campi:
query(obbligatorio) La stringa di testo su cui eseguire la ricerca, ad esempio: "ristorante" o "Via Principale 123". Deve essere un nome di luogo, un indirizzo o una categoria di attività. Qualsiasi altro tipo di input può generare errori e non è garantito che restituisca risultati validi. Il servizio Places restituirà le corrispondenze candidate in base a questa stringa e ordinerà i risultati in base alla loro pertinenza percepita. Questo parametro diventa facoltativo se nella richiesta di ricerca viene utilizzato anche il parametrotype.- (Facoltativo)
openNow: un valore booleano, che indica che il servizio Places deve restituire solo i luoghi aperti al momento dell'invio della query. I luoghi che non specificano gli orari di apertura nel database di Google Places non verranno restituiti se includi questo parametro nella query. L'impostazioneopenNowsufalsenon ha alcun effetto.minPriceLevelemaxPriceLevel— Limita i risultati ai soli luoghi che rientrano nel livello di prezzo specificato. I valori validi sono compresi tra 0 (il più conveniente) e 4 (il più costoso) inclusi.- Una di queste opzioni:
bounds, che deve essere un oggettogoogle.maps.LatLngBoundsche definisce l'area di ricerca rettangolare. La distanza diagonale massima supportata per l'area del riquadro è di circa 100.000 metri.- un
locatione unradius. Puoi orientare i risultati verso un cerchio specificato passando un parametrolocatione un parametroradius. In questo modo, il servizio Places preferirà mostrare i risultati all'interno di questo cerchio. Potrebbero comunque essere visualizzati risultati al di fuori dell'area definita. La posizione accetta un oggettogoogle.maps.LatLnge il raggio accetta un semplice numero intero che rappresenta il raggio del cerchio in metri. Il raggio massimo consentito è di 50.000 metri.
type: limita i risultati ai luoghi che corrispondono al tipo specificato. È possibile specificare un solo tipo (se ne vengono forniti più di uno, tutti i tipi successivi alla prima voce vengono ignorati). Consulta l'elenco dei tipi supportati.
Devi anche passare un metodo di callback a textSearch() per gestire l'oggetto dei risultati e una risposta google.maps.places.PlacesServiceStatus.
var map; var service; var infowindow; function initialize() { var pyrmont = new google.maps.LatLng(-33.8665433,151.1956316); map = new google.maps.Map(document.getElementById('map'), { center: pyrmont, zoom: 15 }); var request = { location: pyrmont, radius: 500, query: 'restaurant' }; service = new google.maps.places.PlacesService(map); service.textSearch(request, callback); } function callback(results, status) { if (status == google.maps.places.PlacesServiceStatus.OK) { for (var i = 0; i < results.length; i++) { var place = results[i]; createMarker(results[i]); } } }
Risposte di ricerca
Codici di stato
L'oggetto risposta PlacesServiceStatus contiene lo stato della richiesta e può contenere informazioni di debug per aiutarti a capire perché la richiesta di luogo non è andata a buon fine. I valori di stato possibili sono:
INVALID_REQUEST: Questa richiesta non era valida.OK: La risposta contiene un risultato valido.OVER_QUERY_LIMIT: La pagina web ha superato la quota di richieste.REQUEST_DENIED: La pagina web non è autorizzata a utilizzare PlacesService.UNKNOWN_ERROR: impossibile elaborare la richiesta PlacesService a causa di un errore del server. Se riprovi, la richiesta potrebbe andare a buon fine.ZERO_RESULTS: Non è stato trovato alcun risultato per questa richiesta.
Risultati di ricerca di luoghi
Le funzioni findPlace(), nearbySearch() e
textSearch() restituiscono un array di oggetti
PlaceResult.
Ogni oggetto PlaceResult può includere le seguenti proprietà:
business_statusindica lo stato operativo del luogo, se si tratta di un'attività. Può contenere uno dei seguenti valori:OPERATIONALCLOSED_TEMPORARILYCLOSED_PERMANENTLY
business_statusnon viene restituito.formatted_addressè una stringa contenente l'indirizzo leggibile di questo luogo. La proprietàformatted_addressviene restituita solo per una ricerca di testo.Spesso questo indirizzo equivale all'indirizzo postale. Tieni presente che alcuni paesi, come il Regno Unito, non consentono la distribuzione di indirizzi postali reali a causa di limitazioni di licenza.
L'indirizzo formattato è composto logicamente da uno o più componenti dell'indirizzo. Ad esempio, l'indirizzo "111 8th Avenue, New York, NY" è composto dai seguenti componenti: "111" (il numero civico), "8th Avenue" (la strada), "New York" (la città) e "NY" (lo stato degli Stati Uniti).
Non analizzare l'indirizzo formattato in modo programmatico. Devi invece utilizzare i singoli componenti dell'indirizzo, che la risposta dell'API include oltre al campo dell'indirizzo formattato.
geometry: le informazioni relative alla geometria del luogo. Ad esempio:locationfornisce la latitudine e la longitudine del luogo.viewportdefinisce l'area visibile preferita sulla mappa quando visualizzi questo luogo.
permanently_closed(ritirato) è un flag booleano che indica se il luogo è stato chiuso in modo permanente o temporaneo (valoretrue). Non utilizzarepermanently_closed. Utilizza invecebusiness_statusper ottenere lo stato operativo delle attività.plus_code(vedi Open Location Code e plus code) è un riferimento di posizione codificato, derivato dalle coordinate di latitudine e longitudine, che rappresenta un'area: 1/8000 di grado per 1/8000 di grado (circa 14 m x 14 m all'equatore) o più piccola. I Plus Code possono essere utilizzati in sostituzione degli indirizzi stradali in luoghi in cui non esistono (dove gli edifici non sono numerati o le strade non hanno un nome).Il Plus Code è formattato come codice globale e codice composto:
global_codeè un prefisso di 4 caratteri e un codice locale di almeno 6 caratteri (849VCWC8+R9).compound_codeè un codice locale di almeno sei caratteri con una posizione esplicita (CWC8+R9, Mountain View, CA, USA). Non analizzare questi contenuti in modo programmatico.
html_attributions: un array di attribuzioni da visualizzare quando vengono mostrati i risultati di ricerca. Ogni voce dell'array contiene il testo HTML per una singola attribuzione. Nota:si tratta di un'aggregazione di tutte le attribuzioni per l'intera risposta di ricerca. Tutti gli oggettiPlaceResultnella risposta contengono quindi elenchi di attribuzione identici.iconrestituisce l'URL di un'icona PNG a colori di 71 x 71 px.icon_mask_base_urirestituisce l'URL di base per un'icona non colorata, senza l'estensione .svg o .png.icon_background_colorrestituisce il codice colore esadecimale predefinito per la categoria del luogo.name: il nome del luogo.opening_hourspuò contenere le seguenti informazioni:open_nowè un valore booleano che indica se il luogo è aperto al momento (ritirato nella libreria Places, API Maps JavaScript, utilizzautc_offset_minutesin alternativa).
place_idè un identificatore testuale che identifica in modo univoco un luogo. Per recuperare informazioni sul luogo, passa questo identificatore nella richiesta Place Details. Scopri di più su come fare riferimento a un luogo con un ID luogo.ratingcontiene la valutazione del luogo, da 0,0 a 5,0, in base alle recensioni degli utenti aggregate.typesUn array di tipi per questo luogo (ad es.["political", "locality"]o["restaurant", "lodging"]). Questo array può contenere più valori o essere vuoto. Potrebbero essere introdotti nuovi valori senza preavviso. Consulta l'elenco dei tipi supportati.vicinity: Un indirizzo semplificato del luogo, che include il nome della via, il numero civico e la località, ma non la provincia/lo stato, il codice postale o il paese. Ad esempio, la sede di Google a Sydney, in Australia, ha un valorevicinitydi5/48 Pirrama Road, Pyrmont.
Accedere a risultati aggiuntivi
Per impostazione predefinita, ogni ricerca di luoghi restituisce fino a 20 risultati per query. Tuttavia,
ogni ricerca può restituire fino a 60 risultati, suddivisi in tre pagine.
Sono disponibili pagine aggiuntive utilizzando l'oggetto PlaceSearchPagination. Per accedere a pagine aggiuntive, devi acquisire l'oggetto
PlaceSearchPagination utilizzando una funzione di callback. L'oggetto
PlaceSearchPagination è definito come:
hasNextPageuna proprietà booleana che indica se sono disponibili altri risultati.truequando è presente un'ulteriore pagina dei risultati.nextPage()una funzione che restituirà il set successivo di risultati. Dopo aver eseguito una ricerca, devi attendere due secondi prima che sia disponibile la pagina successiva dei risultati.
Per visualizzare il successivo insieme di risultati, chiama nextPage.
Ogni pagina di risultati deve essere visualizzata prima di visualizzare la pagina successiva di
risultati. Tieni presente che ogni ricerca viene conteggiata come una singola richiesta ai fini dei limiti di utilizzo.
L'esempio seguente mostra come modificare la funzione di callback per acquisire l'oggetto PlaceSearchPagination, in modo da poter inviare più richieste di ricerca.
TypeScript
// 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 initMap(): void { // Create the map. const pyrmont = { lat: -33.866, lng: 151.196 }; const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { center: pyrmont, zoom: 17, mapId: "8d193001f940fde3", } as google.maps.MapOptions ); // Create the places service. const service = new google.maps.places.PlacesService(map); let getNextPage: () => void | false; const moreButton = document.getElementById("more") as HTMLButtonElement; moreButton.onclick = function () { moreButton.disabled = true; if (getNextPage) { getNextPage(); } }; // Perform a nearby search. service.nearbySearch( { location: pyrmont, radius: 500, type: "store" }, ( results: google.maps.places.PlaceResult[] | null, status: google.maps.places.PlacesServiceStatus, pagination: google.maps.places.PlaceSearchPagination | null ) => { if (status !== "OK" || !results) return; addPlaces(results, map); moreButton.disabled = !pagination || !pagination.hasNextPage; if (pagination && pagination.hasNextPage) { getNextPage = () => { // Note: nextPage will call the same handler function as the initial call pagination.nextPage(); }; } } ); } function addPlaces( places: google.maps.places.PlaceResult[], map: google.maps.Map ) { const placesList = document.getElementById("places") as HTMLElement; for (const place of places) { if (place.geometry && place.geometry.location) { const image = { 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), }; new google.maps.Marker({ map, icon: image, title: place.name!, position: place.geometry.location, }); const li = document.createElement("li"); li.textContent = place.name!; placesList.appendChild(li); li.addEventListener("click", () => { map.setCenter(place.geometry!.location!); }); } } } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
// 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 initMap() { // Create the map. const pyrmont = { lat: -33.866, lng: 151.196 }; const map = new google.maps.Map(document.getElementById("map"), { center: pyrmont, zoom: 17, mapId: "8d193001f940fde3", }); // Create the places service. const service = new google.maps.places.PlacesService(map); let getNextPage; const moreButton = document.getElementById("more"); moreButton.onclick = function () { moreButton.disabled = true; if (getNextPage) { getNextPage(); } }; // Perform a nearby search. service.nearbySearch( { location: pyrmont, radius: 500, type: "store" }, (results, status, pagination) => { if (status !== "OK" || !results) return; addPlaces(results, map); moreButton.disabled = !pagination || !pagination.hasNextPage; if (pagination && pagination.hasNextPage) { getNextPage = () => { // Note: nextPage will call the same handler function as the initial call pagination.nextPage(); }; } }, ); } function addPlaces(places, map) { const placesList = document.getElementById("places"); for (const place of places) { if (place.geometry && place.geometry.location) { const image = { 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), }; new google.maps.Marker({ map, icon: image, title: place.name, position: place.geometry.location, }); const li = document.createElement("li"); li.textContent = place.name; placesList.appendChild(li); li.addEventListener("click", () => { map.setCenter(place.geometry.location); }); } } } window.initMap = initMap;
Prova campione
Place Details
Oltre a fornire un elenco di luoghi all'interno di un'area, il servizio Places può anche restituire informazioni dettagliate su un luogo specifico. Una volta che un luogo è stato restituito in una risposta di ricerca di luoghi, il suo ID luogo può essere utilizzato per richiedere ulteriori dettagli su quel luogo, come indirizzo completo, numero di telefono, valutazione degli utenti e recensioni e così via.
Richieste di Place Details
I dettagli del luogo vengono richiesti con una chiamata al metodo
getDetails() del servizio.
service = new google.maps.places.PlacesService(map); service.getDetails(request, callback);
Questo metodo accetta una richiesta contenente l'placeId di un luogo e i campi che indicano i tipi di dati di Places da restituire. Scopri di più su
come fare riferimento a un luogo con un ID luogo.
Accetta anche un metodo di callback, che deve gestire il codice di stato passato
nella risposta google.maps.places.PlacesServiceStatus, nonché
l'oggetto google.maps.places.PlaceResult.
var request = { placeId: 'ChIJN1t_tDeuEmsRUsoyG83frY4', fields: ['name', 'rating', 'formatted_phone_number', 'geometry'] }; service = new google.maps.places.PlacesService(map); service.getDetails(request, callback); function callback(place, status) { if (status == google.maps.places.PlacesServiceStatus.OK) { createMarker(place); } }
Campi (dettagli del luogo)
Il parametrofields accetta un array di stringhe (nomi dei campi).
Utilizza il parametro fields per specificare un array di tipi di dati sui luoghi da restituire.
Ad esempio: fields: ['address_components', 'opening_hours', 'geometry'].
Utilizza un punto quando specifichi valori composti. Ad esempio opening_hours.weekday_text.
I campi corrispondono ai risultati di Place Details e sono suddivisi in tre categorie di fatturazione: Basic, Contact e Atmosphere. I campi di base vengono fatturati alla tariffa base e non comportano costi aggiuntivi. I campi Contatto e Atmosfera vengono fatturati a una tariffa più elevata. Per ulteriori informazioni, consulta il foglio dei prezzi. Le attribuzioni (html_attributions) vengono sempre
restituite a ogni chiamata, indipendentemente dal fatto che siano state richieste.
Basic
La categoria Base include i seguenti campi:
address_components, adr_address, business_status,
formatted_address, geometry, icon,
icon_mask_base_uri, icon_background_color,name,
permanently_closed (ritirato),
photo, place_id, plus_code, type,
url, utc_offset (ritirato
nella libreria Places, API Maps JavaScript), utc_offset_minutes,
vicinity
Contatto
La categoria Contatto include i seguenti campi:
formatted_phone_number, international_phone_number,
opening_hours, website
Atmosfera
La categoria Atmosfera include i seguenti campi:
price_level, rating, reviews,
user_ratings_total
Scopri di più sui campi luogo. Per saperne di più su come vengono fatturate le richieste di dati sui luoghi, consulta Utilizzo e fatturazione.
Risposte a Place Details
Codici di stato
L'oggetto di risposta PlacesServiceStatus contiene lo stato della richiesta e può contenere informazioni di debug per aiutarti a capire perché la richiesta di dettagli del luogo non è andata a buon fine. I valori di stato possibili sono:
INVALID_REQUEST: Questa richiesta non era valida.OK: La risposta contiene un risultato valido.OVER_QUERY_LIMIT: La pagina web ha superato la quota di richieste.NOT_FOUNDLa località a cui viene fatto riferimento non è stata trovata nel database Places.REQUEST_DENIED: La pagina web non è autorizzata a utilizzare PlacesService.UNKNOWN_ERROR: impossibile elaborare la richiesta PlacesService a causa di un errore del server. Se riprovi, la richiesta potrebbe andare a buon fine.ZERO_RESULTS: Non è stato trovato alcun risultato per questa richiesta.
Risultati di Place Details
Una chiamata getDetails() riuscita restituisce un oggetto
PlaceResult con le seguenti proprietà:
address_components: un array contenente i singoli componenti applicabili a questo indirizzo.Ogni componente dell'indirizzo in genere contiene i seguenti campi:
types[]è un array che indica il tipo del componente dell'indirizzo. Consulta l'elenco dei tipi supportati.long_nameè la descrizione o il nome completo del componente dell'indirizzo restituito dal geocodificatore.short_nameè un nome testuale abbreviato per il componente dell'indirizzo, se disponibile. Ad esempio, un componente dell'indirizzo per lo stato dell'Alaska potrebbe avere unlong_namedi "Alaska" e unshort_namedi "AK" utilizzando l'abbreviazione postale di due lettere.
Tieni presente quanto segue in merito all'array
address_components[]:- L'array di componenti dell'indirizzo può contenere più componenti di
formatted_address. - L'array non include necessariamente tutte le entità politiche che
contengono un indirizzo, a parte quelle incluse in
formatted_address. Per recuperare tutte le entità politiche che contengono un indirizzo specifico, devi utilizzare il geocoding inverso, passando la latitudine/longitudine dell'indirizzo come parametro alla richiesta. - Non è garantito che il formato della risposta rimanga lo stesso tra le
richieste. In particolare, il numero di
address_componentsvaria in base all'indirizzo richiesto e può cambiare nel tempo per lo stesso indirizzo. Un componente può cambiare posizione nell'array. Il tipo di componente può cambiare. Un determinato componente potrebbe non essere presente in una risposta successiva.
business_statusindica lo stato operativo del luogo, se si tratta di un'attività. Può contenere uno dei seguenti valori:OPERATIONALCLOSED_TEMPORARILYCLOSED_PERMANENTLY
business_statusnon viene restituito.formatted_address: L'indirizzo leggibile di questo luogo.Spesso questo indirizzo equivale all'indirizzo postale. Tieni presente che alcuni paesi, come il Regno Unito, non consentono la distribuzione di indirizzi postali reali a causa di limitazioni di licenza.
L'indirizzo formattato è composto logicamente da uno o più componenti dell'indirizzo. Ad esempio, l'indirizzo "111 8th Avenue, New York, NY" è composto dai seguenti componenti: "111" (il numero civico), "8th Avenue" (la strada), "New York" (la città) e "NY" (lo stato degli Stati Uniti).
Non analizzare l'indirizzo formattato in modo programmatico. Devi invece utilizzare i singoli componenti dell'indirizzo, che la risposta dell'API include oltre al campo dell'indirizzo formattato.
formatted_phone_number: il numero di telefono del luogo, formattato in base alla convenzione regionale del numero.geometry: le informazioni relative alla geometria del luogo. Ad esempio:locationfornisce la latitudine e la longitudine del luogo.viewportdefinisce l'area visibile preferita sulla mappa quando visualizzi questo luogo.
permanently_closed(ritirato) è un flag booleano che indica se il luogo è chiuso in modo permanente o temporaneo (valoretrue). Non utilizzarepermanently_closed. Utilizza invecebusiness_statusper ottenere lo stato operativo delle attività.plus_code(vedi Open Location Code e plus code) è un riferimento di posizione codificato, derivato dalle coordinate di latitudine e longitudine, che rappresenta un'area: 1/8000 di grado per 1/8000 di grado (circa 14 m x 14 m all'equatore) o più piccola. I Plus Code possono essere utilizzati in sostituzione degli indirizzi stradali in luoghi in cui non esistono (dove gli edifici non sono numerati o le strade non hanno un nome).Il Plus Code è formattato come codice globale e codice composto:
global_codeè un prefisso di 4 caratteri e un codice locale di almeno 6 caratteri (849VCWC8+R9).compound_codeè un codice locale di almeno sei caratteri con una posizione esplicita (CWC8+R9, Mountain View, CA, USA). Non analizzare questi contenuti in modo programmatico.
html_attributions: il testo dell'attribuzione da visualizzare per questo risultato del luogo.icon: URL di una risorsa immagine che può essere utilizzata per rappresentare il tipo di questo luogo.international_phone_numbercontiene il numero di telefono del luogo in formato internazionale. Il formato internazionale include il codice paese ed è preceduto dal segno più (+). Ad esempio, ilinternational_phone_numberdell'ufficio di Google a Sydney, in Australia, è+61 2 9374 4000.name: il nome del luogo.utc_offsetDeprecato nella libreria Places, API Maps JavaScript, utilizzautc_offset_minutes.utc_offset_minutescontiene il numero di minuti di differenza tra il fuso orario attuale di questo luogo e il fuso orario UTC. Ad esempio, per i luoghi di Sydney, in Australia, durante l'ora legale, questo valore sarebbe 660 (+11 ore rispetto all'UTC), mentre per i luoghi della California al di fuori dell'ora legale sarebbe -480 (-8 ore rispetto all'UTC).opening_hourscontiene le seguenti informazioni:open_now(ritirato nella libreria Places, API Maps JavaScript; utilizza opening_hours.isOpen(). Per informazioni su come utilizzareisOpencon Place Details, consulta il video How to get opening hours in the Places API .) `open_now` è un valore booleano che indica se il luogo è aperto al momento.periods[]è un array di periodi di apertura che copre sette giorni, a partire da domenica, in ordine cronologico. Ogni periodo contiene:opencontiene una coppia di oggetti giorno e ora che descrivono l'orario di apertura del luogo:dayun numero da 0 a 6, corrispondente ai giorni della settimana, a partire da domenica. Ad esempio, 2 significa martedì.timepuò contenere un'ora del giorno nel formato hhmm a 24 ore (i valori sono compresi nell'intervallo 0000-2359). Iltimeverrà segnalato nel fuso orario del luogo.
closepuò contenere una coppia di oggetti giorno e ora che descrivono l'orario di chiusura del luogo. Nota: se un luogo è sempre aperto, la sezioneclosenon sarà presente nella risposta. Le applicazioni possono fare affidamento sulla rappresentazione di sempre aperto come periodoopencontenentedaycon valore 0 etimecon valore 0000, e nessunclose.
weekday_textè un array di sette stringhe che rappresentano gli orari di apertura formattati per ogni giorno della settimana. Se nella richiesta Place Details è stato specificato un parametrolanguage, Places Service formatta e localizza l'orario di apertura in modo appropriato per quella lingua. L'ordine degli elementi in questo array dipende dal parametrolanguage. Alcune lingue iniziano la settimana di lunedì, mentre altre di domenica.
permanently_closed(ritirato) è un flag booleano che indica se il luogo è chiuso in modo permanente o temporaneo (valoretrue). Non utilizzarepermanently_closed. Utilizza invecebusiness_statusper ottenere lo stato operativo delle attività.photos[]: un array di oggettiPlacePhoto. UnPlacePhotopuò essere utilizzato per ottenere una foto con il metodogetUrl()oppure puoi ispezionare l'oggetto per i seguenti valori:height: l'altezza massima dell'immagine, in pixel.width: la larghezza massima dell'immagine, in pixel.html_attributions: il testo di attribuzione da visualizzare con questa foto del luogo.
place_id: un identificatore testuale che identifica in modo univoco un luogo e può essere utilizzato per recuperare informazioni sul luogo utilizzando una richiesta Place Details. Scopri di più su come fare riferimento a un luogo con un ID luogo.rating: la valutazione del luogo, da 0,0 a 5,0, in base alle recensioni aggregate degli utenti.reviewsuna serie di massimo cinque recensioni. Ogni recensione è composta da diversi componenti:aspects[]contiene un array di oggettiPlaceAspectRating, ognuno dei quali fornisce una valutazione di un singolo attributo dell'attività. Il primo oggetto nell'array è considerato l'aspetto principale. OgniPlaceAspectRatingè definito come:typeil nome dell'aspetto che viene valutato. Sono supportati i seguenti tipi:appeal,atmosphere,decor,facilities,food,overall,qualityeservice.ratingla valutazione dell'utente per questo aspetto specifico, da 0 a 3.
author_nameil nome dell'utente che ha inviato la recensione. Le recensioni anonime sono attribuite a "Un utente Google". Se è stato impostato un parametro della lingua, la frase "Un utente Google" restituirà una stringa localizzata.author_urll'URL del profilo Google+ dell'utente, se disponibile.languageun codice lingua IETF che indica la lingua utilizzata nella recensione dell'utente. Questo campo contiene solo il tag della lingua principale e non il tag secondario che indica il paese o la regione. Ad esempio, tutte le recensioni in inglese sono contrassegnate come "en" e non come "en-AU" o "en-UK".ratingla valutazione complessiva dell'utente per questo luogo. Si tratta di un numero intero compreso tra 1 e 5.textla recensione dell'utente. Quando esamini una località con Google Places, le recensioni di testo sono considerate facoltative; pertanto, questo campo potrebbe essere vuoto.
typesUn array di tipi per questo luogo (ad es.["political", "locality"]o["restaurant", "lodging"]). Questo array può contenere più valori o essere vuoto. Potrebbero essere introdotti nuovi valori senza preavviso. Consulta l'elenco dei tipi supportati.url: URL della pagina Google ufficiale per questo luogo. Questa è la pagina di proprietà di Google che contiene le migliori informazioni disponibili sul luogo. Le applicazioni devono collegarsi a questa pagina o incorporarla in qualsiasi schermata che mostri risultati dettagliati sul luogo all'utente.vicinity: Un indirizzo semplificato del luogo, che include il nome della via, il numero civico e la località, ma non la provincia/lo stato, il codice postale o il paese. Ad esempio, la sede di Google a Sydney, in Australia, ha un valorevicinitydi5/48 Pirrama Road, Pyrmont. La proprietàvicinityviene restituita solo per una ricerca nelle vicinanze.websiteelenca il sito web autorevole di questo luogo, ad esempio la home page di un'attività.
Nota:le valutazioni multidimensionali potrebbero non essere disponibili per tutte le località. Se le recensioni sono troppo poche, la risposta con i dettagli includerà una valutazione precedente su una scala da 0,0 a 5,0 (se disponibile) o nessuna valutazione.
Fare riferimento a un luogo con un ID luogo
Un ID luogo è un riferimento univoco a un luogo su una mappa Google. Gli ID luogo sono disponibili per la maggior parte delle località, tra cui attività, punti di riferimento, parchi e incroci.
Per utilizzare un ID luogo nella tua app, devi prima cercarlo. L'ID è disponibile in PlaceResult di una richiesta di ricerca o dettagli di un luogo.
Puoi quindi utilizzare questo ID luogo per cercare i dettagli del luogo.
Gli ID luogo sono esenti dalle limitazioni della memorizzazione nella cache indicate nella sezione 3.2.3(b) dei Termini di servizio di Google Maps Platform. Puoi quindi memorizzare i valori dell'ID luogo per utilizzarli in un secondo momento. Per le best practice per l'archiviazione degli ID luogo, consulta la panoramica degli ID luogo.
var map; function initialize() { // Create a map centered in Pyrmont, Sydney (Australia). map = new google.maps.Map(document.getElementById('map'), { center: {lat: -33.8666, lng: 151.1958}, zoom: 15 }); // Search for Google's office in Australia. var request = { location: map.getCenter(), radius: '500', query: 'Google Sydney' }; var service = new google.maps.places.PlacesService(map); service.textSearch(request, callback); } // Checks that the PlacesServiceStatus is OK, and adds a marker // using the place ID and location from the PlacesService. function callback(results, status) { if (status == google.maps.places.PlacesServiceStatus.OK) { var marker = new google.maps.Marker({ map: map, place: { placeId: results[0].place_id, location: results[0].geometry.location } }); } } google.maps.event.addDomListener(window, 'load', initialize);
Place Photos
Utilizza la funzionalità Foto del luogo per aggiungere contenuti fotografici di alta qualità al tuo sito. Il servizio Foto ti consente di accedere a milioni di foto archiviate nel database di Places e Google+ Local. Quando ottieni informazioni su un luogo utilizzando una richiesta Place Details, vengono restituite le referenze fotografiche per i contenuti fotografici pertinenti. Le richieste di ricerca nelle vicinanze e di ricerca di testo restituiscono anche un singolo riferimento fotografico per luogo, se pertinente. Utilizzando il servizio Foto, puoi accedere alle foto a cui viene fatto riferimento e ridimensionare l'immagine alla dimensione ottimale per la tua applicazione.
Un array di oggetti PlacePhoto verrà restituito come parte dell'oggetto PlaceResult per qualsiasi richiesta getDetails(), textSearch() o nearbySearch() effettuata su un PlacesService.
Nota:il numero di foto restituite varia in base alla richiesta.
- Una ricerca nelle vicinanze o una ricerca di testo restituirà al massimo un oggetto
PlacePhoto. - Una richiesta Details restituirà fino a dieci oggetti
PlacePhoto.
Puoi richiedere l'URL dell'immagine associata chiamando il metodo
PlacePhoto.getUrl() e passando un oggetto
PhotoOptions valido. Utilizza l'oggetto PhotoOptions per specificare l'altezza e la larghezza massime dell'immagine. Se
specifichi un valore sia per maxHeight sia per maxWidth,
il servizio fotografico ridimensionerà l'immagine alla più piccola delle due dimensioni, mantenendo
le proporzioni originali.
Il seguente snippet di codice accetta un oggetto luogo e aggiunge un indicatore alla mappa se esiste una foto. L'immagine predefinita del marcatore viene sostituita da una versione ridotta della foto.
function createPhotoMarker(place) { var photos = place.photos; if (!photos) { return; } var marker = new google.maps.Marker({ map: map, position: place.geometry.location, title: place.name, icon: photos[0].getUrl({maxWidth: 35, maxHeight: 35}) }); }
Le foto restituite dal servizio Foto provengono da una serie di
posizioni, tra cui le foto caricate dai proprietari delle attività e dagli utenti. Nella maggior parte dei casi, queste foto possono essere utilizzate senza attribuzione o l'attribuzione richiesta è inclusa nell'immagine. Tuttavia, se l'elemento
photo restituito include un valore nel
campo html_attributions, devi includere l'attribuzione
aggiuntiva nella tua applicazione ovunque visualizzi l'immagine.