Google Maps per tutti - 3

Proseguiamo con la serie di tutorials sulle Google Map API e vediamo come si fa ad ottenere le coordinate di un posto, dato il suo indirizzo testuale.

In questo caso, l'oggetto che ci serve utilizzare è il Geocoder, pertanto dovremo inserire nel codice della nostra pagina una riga:

var geo = new GClientGeocoder();  

GClientGeocoder è l'oggetto che gestisce le comunicazioni tra la pagina Web e Google Maps. 

Il metodo da utilizzare per effettuare le interrogazioni è il seguente:

geo.getLocations(search, function (result))

dove search è la stringa che contiene la funzione è function è la funzione di callback che deve essere richiamata quando Google restituisce il risultato. 

Gli oggetti restituiti sono di tipo Placemark, quindi per estrarre i dati di interesse, si deve effettuare un ciclo sui risultati. Ad esempio:

for (var i=0; i<result.Placemark.length; i++) {
                  var p = result.Placemark[i].Point.coordinates;
                  var marker = new GMarker(new GLatLng(p[1],p[0]));

mentre lo stato della richiesta è contenuto nella proprietà:

result.Status.code

e può variare da G_GEO_SUCCESS in caso di successo a vari messaggi che indicano qual'è il tipo di errore incontrato.

Ad esempio, nell'esempio sotto riportato, il codice di errore viene gestito con un array associativo:

      reasons[G_GEO_SUCCESS]            = "Successo";
      reasons[G_GEO_MISSING_ADDRESS]    = "Indirizzo mancante: Indirizzo nullo o inesistente.";
      reasons[G_GEO_UNKNOWN_ADDRESS]    = "Indirizzo sconosciuto:  L'indirizzo inserito non è stato trovato, prova a controllare che sia stato scritto correttamente.";
      reasons[G_GEO_UNAVAILABLE_ADDRESS]= "Indirizzo non disponibile: L'indirizzo non può essere riportato per limitazioni contrattuali di Google Maps";
      reasons[G_GEO_BAD_KEY]            = "Bad Key: Sbagliato! Rivolgiti a mader@tesene.it per sapere come far funzionare questa pagina";
      reasons[G_GEO_TOO_MANY_QUERIES]   = "Troppe Queries: Sono state effettuate troppe queries da questo sito.";
      reasons[G_GEO_SERVER_ERROR]       = "Errore lato server.";
     
In caso di fallimento, poi viene riportato un messaggio con:

             var reason="Code "+result.Status.code;
              if (reasons[result.Status.code]) {
                reason = reasons[result.Status.code]
              }
              alert('Non trovato: "'+search+ '" ' + reason);

Se invece si ottengono dei risultati validi, vengono elencati e messi sulla cartina i relativi segnaposto.

if (result.Placemark.length >= 1) {
                document.getElementById("message").innerHTML = "Volevi dire:";
                // Loop nei risultati

               for (var i=0; i<result.Placemark.length; i++) {                  var p = result.Placemark[i].Point.coordinates;                  var marker = new GMarker(new GLatLng(p[1],p[0]));
                  document.getElementById("message").innerHTML += "<br/>"+(i+1)+": <a xhref='javascript:place(" +p[1]+","+p[0]+")'>"+ result.Placemark[i].address+"</a>";
                map.addOverlay(marker);
                }
                document.getElementById("message").innerHTML += "<br/>Se il risultato non è quello che desideravi, prova ad aggiungere informazioni";
              }

Da osservare che le alternative che Google fornisce, sono solitamente sullo stesso livello, per cui un C.so Roma non sarà mai messo come alternativa alla città di Roma, e simili.  

Per vedere come si applicano in pratica i concetti appena illustrati, è utile guardare la seguente demo:

Geocoder Demo

 


Aumenta la diffusione di questo articolo View blog reactions

1 Commento a “Google Maps per tutti - 3”

  1. Area sviluppo Tesene » Blog Archive » I 25 articoli più letti su questo blog nei primi 6 mesi del 2008 scrive:

    […] Google Maps per tutti - 3 […]

Scrivi un commento

Per inviare un commento devi fare il login.