Servizio di geocodifica

Panoramica

La geocodifica è il processo di conversione degli indirizzi (come "1600 Amphitheatre Parkway, Mountain View, CA") in coordinate geografiche (come latitudine 37.423021 e longitudine -122.083739), che puoi utilizzare per posizionare 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 fornisce una classe Geocoder per la geocodifica e la geocodifica inversa in modo dinamico, a partire dall'input dell'utente. Se invece vuoi geocodificare indirizzi noti e statici, consulta il servizio web di geocodifica.

Come iniziare

Prima di utilizzare il servizio Geocoding nell'API Maps JavaScript, assicurati che l'API Geocoding sia attivata nella console Google Cloud, nello stesso progetto che hai configurato per l'API Maps JavaScript.

Per visualizzare l'elenco delle API abilitate:

  1. Vai alla console Google Cloud.
  2. Fai clic sul pulsante Seleziona un progetto, quindi seleziona lo stesso progetto che hai configurato per l'API Maps JavaScript e fai clic su Apri.
  3. Nell'elenco delle API nella Dashboard, cerca API Geocoding.
  4. Se vedi l'API nell'elenco, significa che è tutto a posto. Se l'API non è nell'elenco, abilitala:
    1. Nella parte superiore della pagina, seleziona ABILITA API per visualizzare la scheda Libreria. In alternativa, seleziona Raccolta dal menu laterale a sinistra.
    2. Cerca l'API Geocoding, quindi selezionala dall'elenco dei risultati.
    3. Seleziona ABILITA. Al termine della procedura, l'API Geocoding viene visualizzata nell'elenco delle API sulla Dashboard.

Prezzi e norme

Prezzi

Il 16 luglio 2018 è entrato in vigore un nuovo piano tariffario di pagamento a consumo per Maps, Routes e Places. Per scoprire di più sui nuovi prezzi e limiti di utilizzo per l'utilizzo del servizio JavaScript Geocoding, consulta Utilizzo e fatturazione per l'API Geocoding.

Criteri

L'utilizzo del servizio Geocoding deve essere conforme alle norme descritte per l'API Geocoding.

Richieste di geocodifica

L'accesso al servizio Geocoding è asincrono, in quanto l'API di Google Maps deve effettuare una chiamata a un server esterno. Per questo motivo, devi passare un metodo di callback da eseguire al completamento 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 tuo codice tramite l'oggetto del costruttore google.maps.Geocoder. Il metodo Geocoder.geocode() avvia una richiesta al servizio di geocodifica, passando un valore letterale oggetto GeocoderRequest contenente i termini di input e un metodo di callback da eseguire alla ricezione 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.
         o
    location: il valore LatLng (o LatLngLiteral) per il quale vuoi ottenere l'indirizzo leggibile più vicino. Il geocodificatore esegue un codice geocodificato inverso. Per saperne di più, consulta la sezione Reverse geocodifica.
         o
    placeId: l'ID del luogo per il quale vuoi ottenere l'indirizzo leggibile più vicino. Leggi ulteriori informazioni sul recupero di un indirizzo per un ID luogo.

Parametri facoltativi:

  • bounds: l'elemento LatLngBounds all'interno della quale differenziare i risultati per geocodificare in modo più evidente. Il parametro bounds influenzerà solo i risultati del geocodificatore, ma non limiteranno del tutto. Scopri di più sulla differenziazione dell'area visibile di seguito.
  • componentRestrictions: utilizzato per limitare i risultati a un'area specifica. Leggi ulteriori informazioni sul filtro dei componenti di seguito.
  • region: il codice regione, specificato come sottotag di regione Unicode a due caratteri (non numerico). Nella maggior parte dei casi, questi tag vengono mappati direttamente a valori a due caratteri familiari ccTLD ("dominio di primo livello"). Il parametro region influirà solo sui risultati del geocodificatore, ma non limitarli completamente. Scopri di più sulla differenziazione dei codici per regione di seguito.

Risposte di geocodifica

Il servizio di geocodifica richiede l'esecuzione di un metodo di callback al momento del recupero dei risultati del geocodificatore. Questo callback deve passare due parametri per contenere il codice results e un codice status, in questo ordine.

Risultati di geocodifica

L'oggetto GeocoderResult rappresenta un singolo risultato di geocodifica. Una richiesta di codici geografici può restituire più oggetti 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[] è un array che indica il tipo di indirizzo del risultato restituito. Questo array contiene un insieme di zero o più tag che identificano il tipo di caratteristica restituito nel risultato. Ad esempio, un codice geografico di "Chicago" restituisce "località", che indica che "Chicago" è una città, e "politica", che indica che si tratta di un'entità politica. Consulta ulteriori informazioni sui tipi di indirizzo e sui tipi di componenti dell'indirizzo di seguito.
  • formatted_address è una stringa contenente l'indirizzo leggibile di questa posizione.

    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 restrizioni 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 civico), "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 la risposta dell'API include in aggiunta al campo dell'indirizzo formattato.

  • address_components[] è un array contenente i componenti separati applicabili a questo indirizzo.

    In genere, ciascun componente dell'indirizzo contiene i seguenti campi:

    • types[] è un array che indica il tipo del componente indirizzo. Consulta l'elenco dei tipi supportati.
    • long_name è la descrizione testuale o il nome del componente dell'indirizzo come restituito dal geocodificatore.
    • short_name è un nome testuale abbreviato per il componente indirizzo, se disponibile. Ad esempio, un componente dell'indirizzo per lo stato dell'Alaska può avere un long_name di "Alaska" e un short_name di "AK" utilizzando l'abbreviazione postale a due lettere.

    Tieni presente quanto segue in merito all'array address_components[]:

    • L'array di componenti dell'indirizzo potrebbe contenere più componenti rispetto a formatted_address.
    • L'array non include necessariamente tutte le entità politiche che contengono un indirizzo, tranne quelle incluse in formatted_address. Per recuperare tutte le entità politiche che contengono un indirizzo specifico, devi utilizzare la geocodifica inversa, trasmettendo 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_components varia 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ò essere modificato. In una risposta successiva potrebbe mancare un componente specifico.

    Consulta ulteriori informazioni sui tipi di indirizzo e sui tipi di componenti dell'indirizzo di seguito.

  • partial_match indica che il geocodificatore non ha restituito una corrispondenza esatta per la richiesta originale, anche se è riuscita a corrispondere a una parte dell'indirizzo richiesto. Ti consigliamo di esaminare la richiesta originale per verificare la presenza di errori ortografici e/o un indirizzo incompleto.

    Le corrispondenze parziali si verificano più spesso per indirizzi che non esistono nella località indicata nella richiesta. Le corrispondenze parziali possono anche essere restituite quando una richiesta corrisponde a due o più località nella stessa località. Ad esempio, "Hillpar St, Bristol, UK" restituirà una corrispondenza parziale per Henry Street e Henrietta Street. Tieni presente che se una richiesta include un componente dell'indirizzo errato, il servizio di geocodifica potrebbe suggerire un indirizzo alternativo. Anche i suggerimenti attivati in questo modo verranno contrassegnati come corrispondenza parziale.

  • place_id è un identificatore univoco di un luogo, che può essere utilizzato con altre API di Google. Ad esempio, puoi utilizzare place_id con la libreria dell'API Google Places per ottenere i dettagli di un'attività locale, come numero di telefono, orari di apertura, recensioni degli utenti e altro ancora. Consulta la panoramica di 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 il valore di latitudine e longitudine geocodificate. Tieni presente che viene restituita questa posizione come oggetto LatLng, 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 (di solito su una strada) interpolata tra due punti precisi (ad esempio gli incroci). In genere, i risultati interpolati vengono restituiti quando i codici geografici sui tetti non sono disponibili per un indirizzo.
      • GEOMETRIC_CENTER indica che il risultato restituito è il centro geometrico di un risultato come 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 (restituito facoltativamente) archivia LatLngBounds, 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 tecnicamente fanno parte della città, ma non devono essere restituite nell'area visibile.

Gli indirizzi verranno restituiti dal geocodificatore utilizzando l'impostazione della lingua preferita del browser o la lingua specificata durante il caricamento del codice JavaScript dell'API mediante il parametro language. Per maggiori informazioni, consulta Localizzazione.

Tipi di indirizzo e tipi di componenti degli indirizzi

L'array types[] in GeocoderResult 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 il tipo political e locality.

I seguenti tipi sono supportati e restituiti dal geocodificatore sia nei tipi di indirizzo sia nei tipi di componenti dell'indirizzo:

  • street_address indica un indirizzo preciso.
  • route indica una route con nome (ad esempio "US 101").
  • intersection indica un incrocio principale, generalmente costituito da due strade principali.
  • political indica un'entità politica. Solitamente, questo tipo indica un poligono con un'amministrazione civile.
  • country indica l'entità politica nazionale e in genere è il tipo di ordine più elevato restituito dal geocodificatore.
  • administrative_area_level_1 indica un'entità civile di primo ordine al di sotto del livello di paese. Negli Stati Uniti, questi livelli amministrativi sono gli stati. Non tutte le nazioni presentano questi livelli amministrativi. Nella maggior parte dei casi, i nomi brevi admins_area_level_1 corrisponderanno strettamente alle suddivisioni ISO 3166-2 e ad altri elenchi molto diffusi. Tuttavia, ciò non è garantito perché i nostri risultati di geocodifica sono basati su una varietà di segnali e dati sulla posizione.
  • administrative_area_level_2 indica un'entità civile di secondo ordine inferiore al paese. Negli Stati Uniti, questi livelli amministrativi sono contee. Non tutte le nazioni presentano questi livelli amministrativi.
  • administrative_area_level_3 indica un'entità civile di terzo ordine al di sotto del livello di paese. Questo tipo indica una divisione civile minore. Non tutte le nazioni presentano questi livelli amministrativi.
  • administrative_area_level_4 indica un'entità civile di quarto ordine inferiore al paese. Questo tipo indica una divisione civile minore. Non tutte le nazioni presentano questi livelli amministrativi.
  • administrative_area_level_5 indica un'entità civile di quinto ordine inferiore al paese. Questo tipo indica una divisione civile minore. Non tutte le nazioni presentano questi livelli amministrativi.
  • administrative_area_level_6 indica un'entità civile di sesto ordine inferiore al livello nazionale. Questo tipo indica una divisione civile minore. Non tutte le nazioni presentano questi livelli amministrativi.
  • administrative_area_level_7 indica un'entità civile di settimo ordine inferiore al paese. Questo tipo indica una divisione civile minore. Non tutte le nazioni presentano questi livelli amministrativi.
  • colloquial_area indica un nome alternativo di uso comune per l'entità.
  • locality indica un'entità politica di città o città incorporata.
  • sublocality indica un'entità civile di primo ordine al di sotto di una località. Per alcune località potrebbe essere disponibile uno dei seguenti tipi aggiuntivi: da sublocality_level_1 a sublocality_level_5. Ogni livello di circoscrizione rappresenta un'entità civile. I numeri più grandi indicano un'area geografica più piccola.
  • neighborhood indica un quartiere denominato
  • premise indica una località con nome, in genere un edificio o un insieme di edifici con un nome comune
  • subpremise indica un'entità di primo ordine sotto una località con nome, in genere un singolo edificio all'interno di una serie di edifici con un nome comune.
  • plus_code indica un riferimento a una posizione codificato, derivato da latitudine e longitudine. I Plus Code possono essere utilizzati in sostituzione degli indirizzi in luoghi in cui non sono presenti (dove gli edifici non sono numerati o le strade non hanno nomi). Per maggiori dettagli, visita la pagina https://plus.codes.
  • postal_code indica un codice postale utilizzato per l'invio della posta nel paese.
  • natural_feature indica una caratteristica naturale evidente.
  • airport indica un aeroporto.
  • park indica un parco denominato.
  • point_of_interest indica un punto d'interesse con nome. In genere, questi "PDI" sono entità locali di spicco che non rientrano facilmente in un'altra categoria, ad esempio "Empire State Building" o "Torre Eiffel".

Un elenco vuoto di tipi indica che non esistono tipi noti per il componente indirizzo specifico, ad esempio Lieu-dit in Francia.

Oltre a quanto sopra, i componenti dell'indirizzo possono includere i tipi indicati di seguito.

Nota: questo elenco non è esaustivo ed è soggetto a modifiche.

  • floor indica il piano dell'indirizzo di un edificio.
  • In genere, establishment indica un luogo che non è stato ancora classificato.
  • landmark indica un luogo nelle vicinanze utilizzato come riferimento per facilitare la navigazione.
  • point_of_interest indica un punto d'interesse con nome.
  • parking indica un parcheggio.
  • post_box indica una casella postale specifica.
  • postal_town indica un raggruppamento di aree geografiche, come locality e sublocality, utilizzato per gli indirizzi postali in alcuni paesi.
  • room indica la stanza presso l'indirizzo di un edificio.
  • street_number indica il numero civico preciso.
  • bus_station, train_station e transit_station indicano la posizione di una fermata di autobus, treno o 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 la codifica geografica è riuscita ma non ha restituito alcun risultato. Questo può verificarsi se al geocodificatore è stato trasmesso un codice address inesistente.
  • "OVER_QUERY_LIMIT" indica che hai superato la tua quota.
  • "REQUEST_DENIED" indica che la tua richiesta è stata rifiutata. La pagina web non è autorizzata a utilizzare il geocodificatore.
  • "INVALID_REQUEST" indica in genere che la query (address, components o latlng) non è presente.
  • "UNKNOWN_ERROR" indica che non è stato possibile elaborare la richiesta a causa di un errore del server. Se riprovi, la richiesta potrebbe andare a buon fine.
  • "ERROR" indica che la richiesta è scaduta o che si è verificato un problema nel contattare i server di Google. Se riprovi, la richiesta potrebbe andare a buon fine.

In questo esempio, geocodificato un indirizzo e posizioniamo un indicatore in corrispondenza dei valori di latitudine e longitudine restituiti. Tieni presente che il gestore viene passato come valore letterale di funzione anonimo.

  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>

Visualizza esempio.

Differenziazione dell'area visibile

Puoi indicare al servizio di geocodifica di preferire i risultati all'interno di una determinata area visibile (espressa 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 solo preferisce i risultati entro i limiti; se esistono risultati più pertinenti al di fuori di questi limiti, possono essere inclusi.

Ad esempio, un codice geografico per "Winnetka" restituisce in genere 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 San Fernando Valley 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 Geocoding in modo che restituisca risultati differenziati per una determinata regione utilizzando esplicitamente il parametro region. Questo parametro accetta un codice regione, specificato come sottotag Unicode a due caratteri (non numerico). Questi tag sono mappati direttamente a valori a due caratteri familiari ccTLD ("dominio di primo livello"), ad esempio "uk" in "co.uk". In alcuni casi, il tag region supporta anche i codici ISO-3166-1, che a volte differiscono dai valori ccTLD (ad esempio "GB" per "Gran Bretagna").

Quando utilizzi il parametro region:

  • Specifica solo un paese o una regione. Più valori vengono ignorati e potrebbero generare una richiesta non riuscita.
  • Utilizza solo sottotag di regione a due caratteri (formato Unicode CLDR). Tutti gli altri input causeranno errori.
  • Sono supportati solo i paesi e le regioni elencati nei dettagli sulla copertura di Google Maps Platform.

Le richieste di geocodifica possono essere inviate per ogni dominio in cui l'applicazione principale di Google Maps offre la geocodifica. Tieni presente che la differenziazione preferisce solo i risultati per un dominio specifico; se sono presenti risultati più pertinenti al di fuori di questo dominio, potrebbero essere inclusi.

Ad esempio, un geocodificato per "Toledo" restituisce questo risultato, poiché il dominio predefinito per il servizio di geocodifica è 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 geocodificato 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 risultati per indirizzi limitati a un'area specifica, utilizzando un filtro dei componenti. Specifica il filtro nel parametro componentRestrictions. I valori del filtro 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. Ciò significa che 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 di area amministrativa.
  • postalCode corrisponde ai codici postali e ai prefissi dei codici postali.
  • country corrisponde al nome di un paese o al codice paese ISO 3166-1 di due lettere. Nota: l'API segue lo standard ISO per la definizione dei paesi e il filtro funziona al 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 generalmente si riferisce alla traduzione di un indirizzo leggibile in una località su una mappa. La procedura per tradurre una località sulla mappa in un indirizzo leggibile da una persona è nota come geocodifica inversa.

Anziché specificare un valore testuale address, fornisci una coppia di latitudine/longitudine separata da virgole nel parametro location.

Il seguente esempio geocodifica un valore di latitudine/longitudine e centra la mappa in tale 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;
Visualizza esempio

Prova Samples

Tieni presente che nell'esempio precedente abbiamo mostrato il primo risultato selezionando results[0]. Il geocodificatore inverso spesso restituisce più di un risultato. Gli indirizzi geocodificati non sono solo indirizzi postali, ma qualsiasi modo per assegnare un nome geografico a una località. Ad esempio, quando geocodifica un punto nella città di Chicago, il punto geocodificato può essere etichettato come indirizzo, città (Chicago), stato (Illinois) o paese (Stati Uniti). Sono tutti indirizzi inviati al geocodificatore. Il geocodificatore inverso restituisce tutti questi risultati.

Il geocodificatore inverso corrisponde a entità politiche (paesi, province, città e quartieri), vie e codici postali.

Ecco un esempio dell'elenco di indirizzi che la query precedente potrebbe restituire:

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 nell'ordine dal migliore al meno corrispondente. In genere, l'indirizzo più esatto è il risultato più in evidenza, come 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 associare un indirizzo più generico, ti consigliamo di controllare il campo results[].types.

Nota: la geocodifica inversa non è una scienza esatta. Il geocodificatore cercherà di trovare la località indirizzabile più vicina all'interno di una certa tolleranza.

Recupero di un indirizzo per un ID luogo

Fornisci 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 il valore placeId restituito dall'API Roads per ottenere l'indirizzo di un punto agganciato. Per ulteriori informazioni sugli ID luogo, consulta la panoramica degli ID 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. Viene visualizzata anche una finestra informativa con 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;
Visualizza esempio

Prova Samples