La geocodifica è la procedura di conversione degli indirizzi ("1600 Amphitheatre Parkway, Mountain View, CA") in coordinate geografiche (37.423021, -122.083739), che puoi utilizzare per posizionare o posizionare la mappa. Le API di Google Maps Platform offrono due approcci alla geocodifica:
- Geocodifica lato client, che viene eseguita nel browser, generalmente in risposta all'azione dell'utente. L'API Maps JavaScript fornisce classi che fanno richieste per te. Questo approccio è descritto nella documentazione dell'API Maps JavaScript.
- Geocodifica lato server HTTP, che consente al server di eseguire query dirette sui server di Google per individuare i codici geografici. L'API Geocoding è il servizio web che fornisce questa funzionalità. In genere, integri questo servizio con altro codice che esegue lato server. La geocodifica lato server è descritta nella documentazione relativa all'API Geocoding.
Esempi di geocodifica lato client e lato server
Di seguito è riportato un esempio di geocodifica lato client che prende un indirizzo, lo geocodifica, sposta il centro della mappa in quella posizione e vi aggiunge un indicatore:
geocoder = new google.maps.Geocoder(); geocoder.geocode({ 'address': address }, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { map.setCenter(results[0].geometry.location); var marker = new google.maps.Marker({ map: map, position: results[0].geometry.location }); } });
Per altri esempi, consulta la documentazione dell'API Maps JavaScript.
Ecco un esempio di utilizzo di Python per eseguire una richiesta di geocodifica lato server:
import urllib2 address="1600+Amphitheatre+Parkway,+Mountain+View,+CA" key="my-key-here" url="https://maps.googleapis.com/maps/api/geocode/json?address=%s&key=%s" % (address, key) response = urllib2.urlopen(url) jsongeocode = response.read()
Verrà generato un oggetto JSON con i contenuti seguenti:
{ "status": "OK", "results": [ { "types": street_address, "formatted_address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA", "address_components": [ { "long_name": "1600", "short_name": "1600", "types": street_number }, { "long_name": "Amphitheatre Pkwy", "short_name": "Amphitheatre Pkwy", "types": route }, { "long_name": "Mountain View", "short_name": "Mountain View", "types": [ "locality", "political" ] }, { "long_name": "San Jose", "short_name": "San Jose", "types": [ "administrative_area_level_3", "political" ] }, { "long_name": "Santa Clara", "short_name": "Santa Clara", "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" ] }, { "long_name": "94043", "short_name": "94043", "types": postal_code } ], "geometry": { "location": { "lat": 37.4220323, "lng": -122.0845109 }, "location_type": "ROOFTOP", "viewport": { "southwest": { "lat": 37.4188847, "lng": -122.0876585 }, "northeast": { "lat": 37.4251799, "lng": -122.0813633 } } } } ] }
Il geocodificatore lato server fornisce anche un formato XML come alternativa a JSON. Per altri esempi, consulta la documentazione relativa all'API Geocoding e le librerie client per Python e altri linguaggi.
Considerazioni su quota e costi
Costi di geocodifica, quote e limiti di frequenza guidano le strategie descritte in questo documento.
Costo
I limiti di quota giornaliera (QPD) non sono più in uso per le richieste di geocodifica. Invece, ogni richiesta di geocodifica, sia lato client tramite il browser che lato server tramite il servizio web dell'API Geocoding, viene fatturata a ogni prezzo. Per gestire i costi di utilizzo, ti consigliamo di limitare la quota giornaliera.
Limiti di frequenza
Il servizio di geocodifica è limitato a 50 QPS (query al secondo), calcolato come la somma delle query lato client e lato server.
Quando esegui richieste di geocodifica lato client a intervalli periodici, ad esempio in un'app per dispositivi mobili, le richieste potrebbero restituire errori se tutti gli utenti effettuano richieste contemporaneamente (ad esempio, tutte allo stesso secondo di ogni minuto). Per evitare che ciò accada, prendi in considerazione uno dei seguenti modi:
- Introdurre intervalli casuali nelle richieste (tremolio). Assicurati che le richieste siano casuali nell'intera base utenti.
- Se sviluppi per Android, utilizza una sveglia ripetuta inesatta.
- Se stai sviluppando per Android, seleziona una strategia di località appropriata.
Memorizzazione nella cache
Consulta i criteri dell'API Geocoding sulla memorizzazione nella cache.
Quando utilizzare la geocodifica lato client
La risposta breve è "quasi sempre". Ecco alcuni dei motivi:
- La richiesta e la risposta lato client offrono agli utenti un'esperienza più veloce e interattiva.
- Una richiesta lato client può includere informazioni che migliorano la qualità della geocodifica: lingua dell'utente, regione e area visibile.
In particolare, la geocodifica lato client è la soluzione migliore quando gli indirizzi di geocodifica sono basati sull'input dell'utente.
Esistono due architetture di base per la geocodifica lato client:
- Esegui la geocodifica e la visualizzazione completamente nel browser. Ad esempio, l'utente inserisce un indirizzo nella tua pagina. L'applicazione lo geocodifica. La pagina utilizza quindi il codice geografico per creare un indicatore sulla mappa. Oppure la tua app esegue alcune semplici analisi utilizzando la geocodifica. Nessun dato viene inviato al tuo server. Questo riduce il carico sul server.
- Esegui la geocodifica nel browser e inviala al server. Ad esempio, l'utente inserisce un indirizzo nella tua pagina. L'applicazione la geocodifica nel browser. L'app invia i dati al tuo server. Il server risponde con alcuni dati, come i punti d'interesse nelle vicinanze. In questo modo puoi personalizzare una risposta in base ai tuoi dati.
Quando utilizzare la geocodifica lato server
La geocodifica lato server è la soluzione migliore per le applicazioni che richiedono di geocodificare indirizzi senza l'input di un client. Un esempio comune è quando ottieni un set di dati che viene reso indipendente dall'input dell'utente, ad esempio se hai un set fisso, limitato e noto di indirizzi che richiedono la geocodifica. La geocodifica lato server può essere utile anche come backup quando la geocodifica lato client non va a buon fine.
Alcune possibili preoccupazioni sono un aumento non necessario della latenza per l'utente e risultati di geocodifica di qualità inferiore rispetto al lato client perché nella richiesta sono disponibili meno informazioni.