Panoramica
La geocodifica è il processo di conversione degli indirizzi (come "1600 Amphitheatre Parkway, Mountain View, CA") in coordinate geografiche (come la latitudine 37.423021 e longitudine -122.083739), che puoi utilizzare per posizionare gli indicatori o posizionare la mappa.
La geocodifica inversa è il processo di conversione delle coordinate geografiche in un indirizzo leggibile. Consulta la sezione Geocodifica inversa (ricerca di indirizzi).
Puoi anche utilizzare il geocodificatore per trovare l'indirizzo di un determinato ID luogo.
L'API Maps JavaScript offre una classe Geocoder per la geocodifica e la geocodifica inversa in modo dinamico dall'input dell'utente. Se invece vuoi geocodificare indirizzi statici e geocodificati, consulta il servizio web di geocodifica.
Come iniziare
Prima di utilizzare il servizio Geocoding nell'API Maps JavaScript, assicurati che l'API Geocoding sia abilitata nella console Google Cloud, nello stesso progetto che hai configurato per l'API Maps JavaScript.
Per visualizzare l'elenco delle API abilitate:
- Vai a Google Cloud Console.
- Fai clic sul pulsante Seleziona un progetto, quindi scegli lo stesso progetto che hai impostato per l'API Maps JavaScript e fai clic su Apri.
- Nell'elenco delle API nella dashboard, cerca API Geocoding.
- Se vedi l'API nell'elenco, non devi fare altro. Se l'API non è elencata, abilitala:
- Nella parte superiore della pagina, seleziona ABILITA API per visualizzare la scheda Raccolta. In alternativa, dal menu a sinistra, seleziona Raccolta.
- Cerca l'API Geocoding, quindi selezionala dall'elenco dei risultati.
- Seleziona ABILITA. Al termine, l'API Geocoding verrà visualizzata nell'elenco delle API nella Dashboard.
Prezzi e norme
Prezzi
A partire dal 16 luglio 2018 è entrato in vigore un nuovo piano con pagamento a consumo per Maps, Routes e Places. Per scoprire di più sui nuovi prezzi e sui limiti di utilizzo per l'utilizzo del servizio Geocoding JavaScript, consulta la pagina Utilizzo e fatturazione per l'API Geocoding.
Norme
L'utilizzo del servizio Geocoding deve essere conforme alle norme descritte per l'API Geocoding.
Richieste di geocodifica
L'accesso al servizio Geocoding è asincrono, dato che l'API Google Maps deve effettuare una chiamata a un server esterno. Per questo motivo, devi superare un metodo di callback da eseguire al termine della richiesta. Questo metodo di callback elabora i risultati. Tieni presente che il geocodificatore potrebbe restituire più di un risultato.
Puoi accedere al servizio di geocodifica dell'API di Google Maps all'interno del codice tramite l'oggetto costruttore google.maps.Geocoder
. Il metodo Geocoder.geocode()
avvia una richiesta al servizio di geocodifica, trasmettendo un valore letterale di oggetto GeocoderRequest
contenente i termini di input e un metodo di callback da eseguire al ricevimento della risposta.
Il valore letterale dell'oggetto GeocoderRequest
contiene i seguenti campi:
{ address: string, location: LatLng, placeId: string, bounds: LatLngBounds, componentRestrictions: GeocoderComponentRestrictions, region: string }
Parametri obbligatori:devi fornire uno solo dei seguenti campi:
address
: l'indirizzo che vuoi geocodificare.
oppure
location
: l'elementoLatLng
(oLatLngLiteral
) per il quale vuoi ottenere l'indirizzo più facilmente leggibile. Il geocodificatore esegue una codifica geografica inversa. Per ulteriori informazioni, consulta la pagina Geocodifica inversa.
oppure
placeId
: l'ID del luogo per il quale vuoi ottenere l'indirizzo più vicino e leggibile. Scopri di più sul recupero di un indirizzo per un ID luogo.
Parametri facoltativi:
bounds
:LatLngBounds
all'interno dei quali eseguire una polarizzazione dei risultati di geocodifica in modo più evidente. Il parametrobounds
influenza solo i risultati del geocodificatore, non limitandoli. Di seguito puoi trovare ulteriori informazioni sulla previsione dell'area visibile .componentRestrictions
: utilizzato per limitare i risultati a un'area specifica. Consulta ulteriori informazioni sul filtro dei componenti di seguito.region
: il codice della regione, specificato come sottotag Unicode di due caratteri (non numerico). Nella maggior parte dei casi, questi tag vengono mappati direttamente a familiari valori ccTLD ("dominio di primo livello") a due caratteri. Il parametroregion
influirà solo sui risultati del geocodificatore, senza limitarli. Scopri di più sulla previsione del codice regione di seguito.
Risposte di geocodifica
Il servizio Geocoding richiede un metodo di callback per l'esecuzione al momento del recupero
dei risultati del geocodificatore. Questo callback deve passare due parametri per contenere
results
e un codice status
, in questo ordine.
Risultati di geocodifica
L'oggetto GeocoderResult
rappresenta un singolo
risultato di geocodifica. Una richiesta di geocodifica può restituire più oggetti di risultato:
results[]: { types[]: string, formatted_address: string, address_components[]: { short_name: string, long_name: string, postcode_localities[]: string, types[]: string }, partial_match: boolean, place_id: string, postcode_localities[]: string, geometry: { location: LatLng, location_type: GeocoderLocationType viewport: LatLngBounds, bounds: LatLngBounds } }
Questi campi sono spiegati di seguito:
types[]
è una matrice che indica il tipo di indirizzo del risultato restituito. Questo array contiene un insieme di zero o più tag che identificano il tipo di funzionalità restituita nel risultato. Ad esempio, un codice geografico di "Chicago" restituisce "Località" che indica che "Chicago" è una città e restituisce anche "politica" che indica un'entità politica. Di seguito troverai ulteriori informazioni sui tipi di indirizzi e sui componenti degli indirizzi.formatted_address
è una stringa contenente l'indirizzo leggibile di questa località.Spesso questo indirizzo corrisponde all'indirizzo postale. Tieni presente che alcuni paesi, come il Regno Unito, non consentono la distribuzione degli indirizzi postali veri a causa di limitazioni relative alle licenze.
L'indirizzo formattato è logicamente composto da uno o più componenti dell'indirizzo. Ad esempio, l'indirizzo "111 8th Avenue, New York, NY" è costituito dai seguenti componenti: "111" (il numero della via), "8th Avenue" (il percorso), "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 includono la risposta dell'API oltre al campo dell'indirizzo formattato.
address_components[]
è un array contenente i componenti distinti applicabili a questo indirizzo.In genere, ogni componente dell'indirizzo contiene i seguenti campi:
types[]
è una matrice che indica il tipo del componente dell'indirizzo. Consulta l'elenco dei tipi supportati.long_name
è la descrizione completa del testo o il nome del componente dell'indirizzo restituito dal Geocoder.short_name
è un nome testuale abbreviato per il componente dell'indirizzo, se disponibile. Ad esempio, un componente dell'indirizzo dello stato dell'Alaska potrebbe averelong_name
come "Alaska" e unshort_name
in "AK" usando l'abbreviazione postale di due lettere.
Tieni presente i seguenti fatti relativi all'array
address_components[]
:- La matrice dei componenti dell'indirizzo può contenere più componenti rispetto a
formatted_address
. - L'array non include necessariamente tutte le entità politiche che contengono un indirizzo, oltre a quelle incluse in
formatted_address
. Per recuperare tutte le entità politiche contenenti un indirizzo specifico, devi utilizzare la geocodifica inversa, passando la latitudine/longitudine dell'indirizzo come parametro alla richiesta. - Non è garantito che il formato della risposta rimanga invariato tra le richieste. In particolare, il numero di
address_components
varia in base all'indirizzo richiesto e può cambiare nel tempo per lo stesso indirizzo. Un componente può modificare la posizione nell'array. Il tipo di componente può cambiare. Un componente particolare potrebbe mancare in una risposta successiva.
Di seguito troverai ulteriori informazioni sui tipi di indirizzi e sui componenti degli indirizzi.
-
partial_match
indica che il geocodificatore non ha restituito una corrispondenza esatta per la richiesta originale, anche se è riuscita a trovare una corrispondenza con una parte dell'indirizzo richiesto. Ti consigliamo di esaminare la richiesta originale per individuare errori di ortografia e/o un indirizzo incompleto.Nella maggior parte dei casi, le corrispondenze parziali si verificano per gli indirizzi stradali che non esistono nella località trasmessa nella richiesta. Le corrispondenze parziali possono anche essere restituite quando una richiesta corrisponde a due o più sedi nella stessa località. Ad esempio, "Hillpar St, Bristol, UK" restituirà una corrispondenza parziale sia per Henry Street che per Henrietta Street. Tieni presente che se una richiesta include un componente dell'indirizzo con errori ortografici, il servizio di geocodifica potrebbe suggerire un indirizzo alternativo. Anche i suggerimenti attivati in questo modo verranno contrassegnati come corrispondenze parziali.
place_id
è un identificatore univoco di un luogo, che può essere utilizzato con altre API di Google. Ad esempio, potete utilizzare laplace_id
con la libreria API di Google Places per ottenere dettagli su un'attività locale, come numero di telefono, orari di apertura, recensioni degli utenti e altro ancora. Consulta la panoramica dell'ID luogo.postcode_localities[]
è un array che indica tutte le località contenute in un codice postale ed è presente solo quando il risultato è un codice postale che contiene più località.geometry
contiene le seguenti informazioni:location
contiene la latitudine geocodificata e il valore della longitudine. Tieni presente che restituiamo questa posizione come oggettoLatLng
, non come stringa formattata.location_type
archivia dati aggiuntivi sulla località specificata. Al momento sono supportati i seguenti valori:ROOFTOP
indica che il risultato restituito riflette un codice geografico preciso.RANGE_INTERPOLATED
indica che il risultato restituito riflette un'approssimazione (generalmente su una strada) interpolata tra due punti precisi (ad esempio incroci). I risultati interpolati vengono generalmente restituiti quando i codici geografici panoramici non sono disponibili per un indirizzo.GEOMETRIC_CENTER
indica che il risultato restituito è il centro geometrico di un risultato, ad esempio una polilinea (ad esempio una strada) o un poligono (regione).APPROXIMATE
indica che il risultato restituito è approssimativo.
viewport
archivia l'area visibile consigliata per il risultato restituito.bounds
(opzione facoltativa) restituisce ilLatLngBounds
che può contenere completamente il risultato restituito. Tieni presente che questi limiti potrebbero non corrispondere all'area visibile consigliata. Ad esempio, San Francisco include le Isole Farallon, che sono tecnicamente parte della città, ma non devono essere restituite nell'area visibile.
Gli indirizzi verranno restituiti dal Geocoder utilizzando l'impostazione della lingua preferita del browser o la lingua specificata durante il caricamento del codice JavaScript dell'API utilizzando il parametro language
. Per maggiori informazioni, consulta la pagina
Localizzazione.
Tipi di indirizzi e tipi di componenti per indirizzi
L'array types[]
nel
GeocoderRisultato
indica il
tipo di indirizzo. L'array types[]
può anche essere restituito all'interno di un GeocoderAddressComponent per indicare il tipo di particolare componente dell'indirizzo. Gli indirizzi restituiti dal geocodificatore possono avere più tipi; i tipi possono essere considerati tag.
Ad esempio, molte città sono codificate con i tipi political
e locality
.
I seguenti tipi sono supportati e restituiti dal geocodificatore sia nei tipi di indirizzi che nei tipi di componenti degli indirizzi:
street_address
indica un indirizzo esatto.route
indica un percorso denominato (ad esempio "US 101").intersection
indica un incrocio principale, generalmente di due strade principali.political
indica un'entità politica. In genere, questo tipo indica un poligono di una qualche amministrazione civile.country
indica l'entità politica nazionale ed è in genere il tipo di ordine più alto restituito dal Geocoder.administrative_area_level_1
indica una persona giuridica del primo ordine al di sotto del livello nazionale. All'interno degli Stati Uniti, questi livelli amministrativi sono stati definiti come stati. Non tutti i paesi presentano questi livelli amministrativi. Nella maggior parte dei casi, i nomi brevi di admin_area_level_1 corrisponderanno molto meglio alle suddivisioni ISO 3166-2 e ad altri elenchi diffusi; tuttavia, ciò non è garantito in quanto i nostri risultati di geocodifica si basano su una serie di indicatori e dati sulla posizione.administrative_area_level_2
indica una persona giuridica del secondo ordine al di sotto del livello nazionale. Negli Stati Uniti, questi livelli amministrativi sono contee. Non tutti i paesi presentano questi livelli amministrativi.administrative_area_level_3
indica una persona giuridica del terzo ordine al di sotto del livello nazionale. Questo tipo indica una divisione civile minore. Non tutti i paesi presentano questi livelli amministrativi.administrative_area_level_4
indica una persona giuridica del quarto ordine al di sotto del livello nazionale. Questo tipo indica una divisione civile minore. Non tutti i paesi presentano questi livelli amministrativi.administrative_area_level_5
indica una persona giuridica del quinto ordine al di sotto del livello nazionale. Questo tipo indica una divisione civile minore. Non tutti i paesi presentano questi livelli amministrativi.administrative_area_level_6
indica una persona giuridica del sesto ordine al di sotto del livello nazionale. Questo tipo indica una divisione civile minore. Non tutti i paesi presentano questi livelli amministrativi.administrative_area_level_7
indica una persona giuridica del settimo ordine al di sotto del livello nazionale. Questo tipo indica una divisione civile minore. Non tutti i paesi presentano questi livelli amministrativi.colloquial_area
indica un nome alternativo di uso comune per l'entità.locality
indica un'entità politica costituita da una città o da un'altra città.sublocality
indica una entità civile del primo ordine in una località. Per alcune località potrebbero essere presenti uno dei seguenti tipi aggiuntivi: dasublocality_level_1
asublocality_level_5
. Ogni livello di periferica è un'entità civile. I numeri più grandi indicano un'area geografica più piccola.neighborhood
indica un quartiere denominatopremise
indica una posizione denominata, in genere un edificio o una raccolta di edifici con un nome comunesubpremise
indica un'entità del primo ordine sotto una località denominata, in genere un edificio singolare all'interno di una raccolta di edifici con un nome comuneplus_code
indica un riferimento località codificato, derivato dalla latitudine e dalla longitudine. I plus code possono essere utilizzati per sostituire gli indirizzi in luoghi in cui non esistono (gli edifici non sono numerati o le strade non hanno un nome). Per informazioni dettagliate, consulta https://plus.codes.postal_code
indica un codice postale utilizzato per indirizzare la posta all'interno del paese.natural_feature
indica una caratteristica naturale ben visibile.airport
indica un aeroporto.park
indica un parco denominato.point_of_interest
indica un punto di interesse denominato. In genere, questi "PDI" sono entità locali di spicco che non si adattano facilmente ad altre categorie, come "Empire State Building" o "Torre Eiffel".
Un elenco vuoto di tipi indica che non ci sono tipi noti per il componente dell'indirizzo particolare, ad esempio Lieu-dit in Francia.
Oltre a quanto descritto sopra, i componenti dell'indirizzo potrebbero includere i tipi indicati di seguito.
Nota: questo elenco non è completo ed è soggetto a modifiche.
floor
indica il piano dell'indirizzo di un edificio.establishment
in genere indica un luogo che non è stato ancora classificato.landmark
indica un luogo nelle vicinanze utilizzato come riferimento per agevolare la navigazione.point_of_interest
indica un punto di interesse denominato.parking
indica un parcheggio o una struttura di parcheggio.post_box
indica una casella postale specifica.postal_town
indica un raggruppamento di aree geografiche, ad esempiolocality
esublocality
, utilizzato per gli indirizzi postali in alcuni paesi.room
indica la stanza di un indirizzo di un edificio.street_number
indica il numero esatto della via.bus_station
,train_station
etransit_station
indicano la posizione di una fermata di autobus, treno o di trasporto pubblico.
Codici di stato
Il codice status
potrebbe restituire uno dei seguenti valori:
"OK"
indica che non si sono verificati errori; l'indirizzo è stato analizzato correttamente e è stato restituito almeno un codice geografico."ZERO_RESULTS"
indica che il codice geografico è riuscito, ma non ha restituito risultati. Questo può succedere se il geocodificatore ha trasmesso unaddress
inesistente."OVER_QUERY_LIMIT"
indica che hai superato la quota."REQUEST_DENIED"
indica che la tua richiesta è stata rifiutata. La pagina web non è autorizzata a utilizzare il geocodificatore.- Generalmente
"INVALID_REQUEST"
indica che la query (address
,components
olatlng
) è mancante. "UNKNOWN_ERROR"
indica che non è stato possibile elaborare la richiesta a causa di un errore del server. Se provi di nuovo, la richiesta potrebbe avere esito positivo."ERROR"
indica che la richiesta è scaduta o si è verificato un problema nel contattare i server di Google. Se provi di nuovo, la richiesta potrebbe avere esito positivo.
In questo esempio, codifichiamo un indirizzo e posizioniamo un indicatore ai valori di latitudine e longitudine restituiti. Tieni presente che il gestore viene trasmesso come letterale di funzione anonima.
var geocoder; var map; function initialize() { geocoder = new google.maps.Geocoder(); var latlng = new google.maps.LatLng(-34.397, 150.644); var mapOptions = { zoom: 8, center: latlng } map = new google.maps.Map(document.getElementById('map'), mapOptions); } function codeAddress() { var address = document.getElementById('address').value; geocoder.geocode( { 'address': address}, function(results, status) { if (status == 'OK') { map.setCenter(results[0].geometry.location); var marker = new google.maps.Marker({ map: map, position: results[0].geometry.location }); } else { alert('Geocode was not successful for the following reason: ' + status); } }); } <body onload="initialize()"> <div id="map" style="width: 320px; height: 480px;"></div> <div> <input id="address" type="textbox" value="Sydney, NSW"> <input type="button" value="Encode" onclick="codeAddress()"> </div> </body>
Differenza dell'area visibile
Puoi indicare al servizio di geocodifica di preferire i risultati all'interno di una determinata area visibile (espressi come riquadro di delimitazione). Per farlo, imposta il parametro
bounds
all'interno del valore letterale
dell'oggetto GeocoderRequest
per definire i limiti di questa area visibile. Tieni presente che la differenziazione preferisce solo i risultati entro i limiti; se esistono risultati più pertinenti al di fuori di questi limiti, potrebbero essere inclusi.
Ad esempio, un codice geografico per "Winnetka" in genere restituisce questo sobborgo di Chicago:
{ "types":["locality","political"], "formatted_address":"Winnetka, IL, USA", "address_components":[{ "long_name":"Winnetka", "short_name":"Winnetka", "types":["locality","political"] },{ "long_name":"Illinois", "short_name":"IL", "types":["administrative_area_level_1","political"] },{ "long_name":"United States", "short_name":"US", "types":["country","political"] }], "geometry":{ "location":[ -87.7417070, 42.1083080], "location_type":"APPROXIMATE" }, "place_id": "ChIJW8Va5TnED4gRY91Ng47qy3Q" }
Tuttavia, se specifichi un parametro bounds
che definisce un riquadro di delimitazione per la valle di San Fernando di Los Angeles, questo codice geografico restituisce il quartiere denominato "Winnetka" in quella località:
{ "types":["sublocality","political"], "formatted_address":"Winnetka, California, USA", "address_components":[{ "long_name":"Winnetka", "short_name":"Winnetka", "types":["sublocality","political"] },{ "long_name":"Los Angeles", "short_name":"Los Angeles", "types":["administrative_area_level_3","political"] },{ "long_name":"Los Angeles", "short_name":"Los Angeles", "types":["administrative_area_level_2","political"] },{ "long_name":"California", "short_name":"CA", "types":["administrative_area_level_1","political"] },{ "long_name":"United States", "short_name":"US", "types":["country","political"] }], "geometry":{ "location": [34.213171,-118.571022], "location_type":"APPROXIMATE" }, "place_id": "ChIJ0fd4S_KbwoAR2hRDrsr3HmQ" }
Differenziazione del codice regione
Puoi impostare il Servizio di geocodifica in modo che restituisca risultati espliciti in una determinata regione utilizzando il parametro region
. Questo parametro accetta un codice di regione, specificato come sottotag Unicode di due caratteri (non numerico). Questi tag vengono mappati direttamente a familiari ccTLD ("dominio di primo livello")
valori di due caratteri come "uk" in "co.uk" ad esempio. In alcuni casi, il tag region
supporta anche i codici ISO-3166-1, che talvolta differiscono dai valori ccTLD ("GB" per "Gran Bretagna".
Quando utilizzi il parametro region
:
- Specifica un solo paese o una sola regione. Più valori vengono ignorati e ciò potrebbe comportare una richiesta non riuscita.
- Utilizza solo tag secondari a due caratteri per regione (formato CLDR Unicode). Tutti gli altri input comporteranno errori.
- Sono supportati solo i paesi e le regioni elencati in Dettagli di copertura di Google Maps Platform.
Le richieste di geocodifica possono essere inviate per ogni dominio in cui l'applicazione Google Maps principale offre la geocodifica. Tieni presente che la differenziazione preferisce solo i risultati relativi a un dominio specifico; se esistono risultati più pertinenti al di fuori di questo dominio, potrebbero essere inclusi.
Ad esempio, un codice geografico per "Toledo" restituisce questo risultato, poiché il dominio predefinito per il Geocoding Service è impostato sugli Stati Uniti:
{ "types":["locality","political"], "formatted_address":"Toledo, OH, USA", "address_components":[{ "long_name":"Toledo", "short_name":"Toledo", "types":["locality","political"] },{ "long_name":"Ohio", "short_name":"OH", "types":["administrative_area_level_1","political"] },{ "long_name":"United States", "short_name":"US", "types":["country","political"] }], "place_id": "ChIJeU4e_C2HO4gRRcM6RZ_IPHw" }
Un codice geografico per "Toledo" con il campo region
impostato su 'es'
(Spagna) restituirà la città spagnola:
{ "types":["locality","political"], "formatted_address":"Toledo, España", "address_components":[{ "long_name":"Toledo", "short_name":"Toledo", "types":["locality","political"] },{ "long_name":"Toledo", "short_name":"TO", "types":["administrative_area_level_2","political"] },{ "long_name":"Castilla-La Mancha", "short_name":"CM", "types":["administrative_area_level_1","political"] },{ "long_name":"España", "short_name":"ES", "types":["country","political"] }], "place_id": "ChIJ8f21C60Lag0R_q11auhbf8Y" }
Filtro dei componenti
Puoi impostare il Servizio di geocodifica in modo che restituisca i risultati degli indirizzi limitati a un'area specifica utilizzando un filtro dei componenti. Specifica il filtro nel parametro
componentRestrictions
. I valori dei filtri supportano gli stessi metodi di correzione ortografica e corrispondenza parziale di altre richieste di geocodifica.
Il geocodificatore restituisce solo i risultati che corrispondono a tutti i filtri dei componenti. In altre parole, valuta le specifiche del filtro come AND, non come OR.
Un filtro dei componenti è costituito da uno o più dei seguenti elementi:
route
corrisponde al nome lungo o breve di un percorso.locality
corrisponde ai tipi di località e località secondarie.administrativeArea
corrisponde a tutti i livelli dell'area amministrativa.postalCode
corrisponde ai codici postali e ai prefissi dei codici postali.country
corrisponde a un nome paese o a un codice paese ISO 3166-1 di due lettere. Nota: l'API segue lo standard ISO per la definizione dei paesi e il filtro funziona meglio quando viene utilizzato il codice ISO corrispondente del paese.
L'esempio seguente mostra l'utilizzo del parametro
componentRestrictions
per filtrare in base a
country
e postalCode
:
function codeAddress() { geocoder.geocode({ componentRestrictions: { country: 'AU', postalCode: '2000' } }, function(results, status) { if (status == 'OK') { map.setCenter(results[0].geometry.location); var marker = new google.maps.Marker({ map: map, position: results[0].geometry.location }); } else { window.alert('Geocode was not successful for the following reason: ' + status); } }); }
Geocodifica inversa (ricerca di indirizzi)
Il termine geocodifica si riferisce generalmente alla traduzione di un indirizzo leggibile in una località su una mappa. Il processo di conversazione di una località sulla mappa in un indirizzo facilmente leggibile si definisce geocodifica inversa.
Invece di fornire un address
testuale, fornisci una coppia latitudine/longitudine separata da virgola nel parametro location
.
L'esempio seguente geocodifica un valore di latitudine/longitudine e centra la mappa in quella posizione, visualizzando una finestra informativa con l'indirizzo formattato:
TypeScript
function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 8, center: { lat: 40.731, lng: -73.997 }, } ); const geocoder = new google.maps.Geocoder(); const infowindow = new google.maps.InfoWindow(); (document.getElementById("submit") as HTMLElement).addEventListener( "click", () => { geocodeLatLng(geocoder, map, infowindow); } ); } function geocodeLatLng( geocoder: google.maps.Geocoder, map: google.maps.Map, infowindow: google.maps.InfoWindow ) { const input = (document.getElementById("latlng") as HTMLInputElement).value; const latlngStr = input.split(",", 2); const latlng = { lat: parseFloat(latlngStr[0]), lng: parseFloat(latlngStr[1]), }; geocoder .geocode({ location: latlng }) .then((response) => { if (response.results[0]) { map.setZoom(11); const marker = new google.maps.Marker({ position: latlng, map: map, }); infowindow.setContent(response.results[0].formatted_address); infowindow.open(map, marker); } else { window.alert("No results found"); } }) .catch((e) => window.alert("Geocoder failed due to: " + e)); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 8, center: { lat: 40.731, lng: -73.997 }, }); const geocoder = new google.maps.Geocoder(); const infowindow = new google.maps.InfoWindow(); document.getElementById("submit").addEventListener("click", () => { geocodeLatLng(geocoder, map, infowindow); }); } function geocodeLatLng(geocoder, map, infowindow) { const input = document.getElementById("latlng").value; const latlngStr = input.split(",", 2); const latlng = { lat: parseFloat(latlngStr[0]), lng: parseFloat(latlngStr[1]), }; geocoder .geocode({ location: latlng }) .then((response) => { if (response.results[0]) { map.setZoom(11); const marker = new google.maps.Marker({ position: latlng, map: map, }); infowindow.setContent(response.results[0].formatted_address); infowindow.open(map, marker); } else { window.alert("No results found"); } }) .catch((e) => window.alert("Geocoder failed due to: " + e)); } window.initMap = initMap;
Prova di esempio
Tieni presente che nell'esempio precedente abbiamo mostrato il primo risultato selezionando results[0]
. Il geocodificatore inverso restituisce spesso più di un risultato. Gli indirizzi geocodificati non sono semplici indirizzi, ma qualsiasi
nome geografico da assegnare a una località. Ad esempio, quando geocodifica un punto nella città di Chicago, il punto geocodificato può essere etichettato come indirizzo, come città (Chicago), come stato (Illinois) o come paese (Stati Uniti). Sono tutti indirizzi al geocodificatore. Il geocodificatore inverso restituisce tutti questi risultati.
Il geocodificatore inverso corrisponde a entità politiche (paesi, province, città e quartieri), indirizzi e codici postali.
Ecco un esempio dell'elenco di indirizzi che potrebbe restituire la query indicata sopra:
results[0].formatted_address: "277 Bedford Ave, Brooklyn, NY 11211, USA" results[1].formatted_address: "Grand St/Bedford Av, Brooklyn, NY 11211, USA" results[2].formatted_address: "Williamsburg, Brooklyn, NY, USA" results[3].formatted_address: "Brooklyn, NY, USA" results[4].formatted_address: "New York, NY, USA" results[5].formatted_address: "Brooklyn, NY 11211, USA" results[6].formatted_address: "Kings County, NY, USA" results[7].formatted_address: "New York-Northern New Jersey-Long Island, NY-NJ-PA, USA" results[8].formatted_address: "New York Metropolitan Area, USA" results[9].formatted_address: "New York, USA"
Gli indirizzi vengono restituiti nel miglior modo possibile. In genere,
l'indirizzo più esatto è il risultato più in evidenza, in questo caso.
Tieni presente che restituiamo diversi tipi di indirizzi, dall'indirizzo più specifico a entità politiche meno specifiche, come quartieri, città, contee, stati e così via. Se vuoi trovare una corrispondenza con un indirizzo più generale, ti consigliamo di controllare il campo results[].types
.
Nota: la geocodifica inversa non è una scienza esatta. Il geocodificatore tenterà di trovare la posizione indirizzabile più vicina entro un determinato margine di tolleranza.
Recupero di un indirizzo per un ID luogo
Inserisci un placeId
per trovare l'indirizzo di un determinato ID luogo. L'ID luogo è un identificatore univoco che può essere utilizzato con altre API di Google. Ad
esempio, puoi fornire placeId
restituito
dall'API Roads per ottenere
l'indirizzo per un punto di aggancio. Per ulteriori informazioni sugli ID luogo, consulta la
panoramica sull'ID del luogo.
Quando fornisci un placeId
, la richiesta non può contenere nessuno dei seguenti campi:
address
latLng
location
componentRestrictions
L'esempio seguente accetta un ID luogo, trova l'indirizzo corrispondente e centra la mappa in quella posizione. Inoltre, viene visualizzata una finestra informativa che mostra l'indirizzo formattato del luogo pertinente:
TypeScript
// Initialize the map. function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 8, center: { lat: 40.72, lng: -73.96 }, } ); const geocoder = new google.maps.Geocoder(); const infowindow = new google.maps.InfoWindow(); (document.getElementById("submit") as HTMLElement).addEventListener( "click", () => { geocodePlaceId(geocoder, map, infowindow); } ); } // This function is called when the user clicks the UI button requesting // a geocode of a place ID. function geocodePlaceId( geocoder: google.maps.Geocoder, map: google.maps.Map, infowindow: google.maps.InfoWindow ) { const placeId = (document.getElementById("place-id") as HTMLInputElement) .value; geocoder .geocode({ placeId: placeId }) .then(({ results }) => { if (results[0]) { map.setZoom(11); map.setCenter(results[0].geometry.location); const marker = new google.maps.Marker({ map, position: results[0].geometry.location, }); infowindow.setContent(results[0].formatted_address); infowindow.open(map, marker); } else { window.alert("No results found"); } }) .catch((e) => window.alert("Geocoder failed due to: " + e)); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
// Initialize the map. function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 8, center: { lat: 40.72, lng: -73.96 }, }); const geocoder = new google.maps.Geocoder(); const infowindow = new google.maps.InfoWindow(); document.getElementById("submit").addEventListener("click", () => { geocodePlaceId(geocoder, map, infowindow); }); } // This function is called when the user clicks the UI button requesting // a geocode of a place ID. function geocodePlaceId(geocoder, map, infowindow) { const placeId = document.getElementById("place-id").value; geocoder .geocode({ placeId: placeId }) .then(({ results }) => { if (results[0]) { map.setZoom(11); map.setCenter(results[0].geometry.location); const marker = new google.maps.Marker({ map, position: results[0].geometry.location, }); infowindow.setContent(results[0].formatted_address); infowindow.open(map, marker); } else { window.alert("No results found"); } }) .catch((e) => window.alert("Geocoder failed due to: " + e)); } window.initMap = initMap;