Ottimizzazione dell'utilizzo della quota durante la geocodifica

La geocodifica è il processo di conversione degli indirizzi ("1600 Amphitheatre Parkway, Mountain View, CA") in coordinate geografiche (37.423021, -122.083739), che puoi utilizzare per posizionare indicatori o posizionare la mappa. Le API Google Maps Platform forniscono due approcci alla geocodifica:

  • Geocodifica lato client, che viene eseguita nel browser, in genere in risposta all'azione dell'utente. L'API Maps JavaScript fornisce classi che effettuano le richieste per tuo conto. Questo approccio è descritto nella documentazione relativa all'API Maps JavaScript.
  • Geocodifica lato server HTTP, che consente al tuo server di eseguire query direttamente sui server di Google per trovare i codici geografici. L'API Geocoding è il servizio web che fornisce questa funzionalità. In genere, lo integri con un altro codice in esecuzione sul lato server. La geocodifica lato server è descritta nella documentazione relativa all'API Geocoding.

Esempi di geocodifica lato client e lato server

Ecco un esempio di geocodifica lato client che acquisisce un indirizzo, lo geocodifica, sposta il centro della mappa in quella posizione e aggiunge un indicatore lì:

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 relativa all'API Maps JavaScript.

Ecco un esempio in cui viene utilizzato Python per effettuare 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()

Viene generato un oggetto JSON con i seguenti contenuti:

{
  "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 in 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

I costi, le quote e i limiti di frequenza della geocodifica guidano le strategie descritte in questo documento.

Costo

I limiti di quota al giorno (QPD) non vengono più utilizzati per le richieste di geocodifica. Invece, ogni richiesta di geocodifica, indipendentemente dal fatto che sia lato client tramite browser o lato server tramite il servizio web dell'API Geocoding, viene fatturata a un prezzo per singolo. Per gestire il costo di utilizzo, ti consigliamo di limitare la quota giornaliera.

Limiti di frequenza

La frequenza del servizio di geocodifica è limitata a 3000 QPM (query al minuto), calcolata come 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 una delle seguenti opzioni:

  • Introduci intervalli casuali nelle tue richieste (tremolio). Assicurati che le richieste siano casuali nell'intera base utenti.
  • Se sviluppi per Android, utilizza una sveglia ricorrente inesatta.
  • Se sviluppi per Android, seleziona una strategia di località appropriata.

Memorizzazione nella cache

Consulta i criteri dell'API Geocoding per la memorizzazione nella cache.

Quando utilizzare la geocodifica lato client

La risposta breve è "quasi sempre". Ecco i motivi:

  • Le richieste e le risposte lato client offrono un'esperienza più rapida e interattiva agli utenti.
  • Una richiesta lato client può includere informazioni che migliorano la qualità della geocodifica: lingua, regione e area visibile dell'utente.

In particolare, la geocodifica lato client è ideale per la geocodifica di indirizzi in base all'input dell'utente.

Esistono due architetture di base per la geocodifica lato client:

  • Esegui la geocodifica e il display interamente nel browser. Ad esempio, l'utente inserisce un indirizzo nella tua pagina. La tua applicazione la geocodifica. Dopodiché, la pagina utilizza il geocodifica per creare un indicatore sulla mappa. Oppure la tua app esegue alcune semplici analisi utilizzando il geocodifica. Nessun dato viene inviato al 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. La tua applicazione la geocodifica nel browser. L'app invia quindi i dati al server. Il server risponde con alcuni dati, ad esempio i punti d'interesse nelle vicinanze. Ciò ti consente di personalizzare una risposta in base ai tuoi dati.

Quando utilizzare la geocodifica lato server

La geocodifica lato server è ideale per le applicazioni che richiedono di geocodificare gli indirizzi senza input di un client. Un esempio comune è quando ottieni un set di dati che viene fornito indipendentemente dall'input dell'utente, ad esempio se hai un insieme fisso, limitato e noto di indirizzi che richiedono la geocodifica. La geocodifica lato server può essere utile anche come backup per i casi in cui la geocodifica lato client ha esito negativo.

Alcuni possibili problemi sono un aumento non necessario della latenza per l'utente e la qualità dei risultati di geocodifica è inferiore rispetto al lato client, in quanto la richiesta contiene meno informazioni.