Condividi su Facebook
Google Maps Geocoding
Scritto da: Monska il 24/02/2012 alle 15:20
Tag: Programmazione, Geolocazione, PHP, Internet, API.Visto 1215 volte.


Google Maps

Nonostante l'uso sempre più massivo del servizio di Google per quanto riguarda le mappe all'interno di siti e di applicazioni, non tutti conoscono il servizio di Geocoding di Google, che permette di trasformare un indirizzo esteso in coordinate geografiche correttamente interpretabili dal servizio Google Maps.
Attraverso questo servizio si può finalmente evitare di compilare i dati di latitudine e longitudine del punto che si vuole tracciare sulla mappa, ma basta l'indirizzo "human readable" per posizionare un marker sulla mappa.

Il servizio API di Geocoding è molto semplice da implementare in qualsiasi linguaggio. Si tratta di un semplice servizio API REST che, a fronte di una richiesta HTTP GET con i corretti paramentri, ritorna una struttura dati sotto forma di oggetto JSON o XML.

Questi dati risultano facilmente processabili per estrarre le nostre coordinate da utilizzare nella fase successiva di creazione della mappa.
Cliccando sul tipo di output potete vedere un esempio di output JSON o XML.

Avendo sviluppato un modulo PHP per la trasformazione di questi indirizzi estesi in coordinate geografiche, vi riproponiamo la classe e un esempio di utilizzo di seguito.


Code:

<?php
// Classe di Geocoding

class geocoding
{
   private $endpoint;
   private $output;
   
   public function __construct()
   {   
      $this->endpoint = "https://maps.googleapis.com/maps/api/geocode/";
      $this->setOutput("json");
   }
   
   public function setOutput($out)
   {
      $type = array("json","xml");
      // $type[0] is default value
      if(in_array($out,$type))
         $this->output = $out;
      else
         $this->output = $type[0];
   }
   
   public function resolveAddress($address)
   {
      $url = $this->endpoint.$this->output."?address=".urlencode($address)."&sensor=false";
      $c = curl_init();
      curl_setopt($c, CURLOPT_URL, $url);
      curl_setopt($c, CURLOPT_HEADER, 0);
      curl_setopt($c, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
      curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
      $res = curl_exec($c);
      curl_close($c);
      
      $res = json_decode($res);
      if($res->status == "OK")
      {
         $tmp = $res->results[0]->geometry->location;
         $ret['lat'] = $tmp->lat;
         $ret['lng'] = $tmp->lng;
         return $ret;
      }
      else
      {
         return NULL;
      }
   }
}

?>

<?php
// Script di test della classe Geocoding

$g = new geocoding();
$data = $g->resolveAddress("Garibaldi F.s., Piazza Sigmund Freud, Milano");
?>

Come potete vedere dal codice del metodo "resolveAddress", la nostra classe processa la risposta per ritornare alla variabile "$data" dell'esempio un array contenente solo le variabili lat e lng, che sono i dati che effettivante servono alla costruzione della mappa.
Attenzione: ricordiamo che negli script che utilizzano la classe di Geocoding è necessario gestire il

Code:

return NULL;

che avviene nel caso in cui il servizio non sia in grado di darci risposte valide.

Per ogni altro approfondimento in merito al servizio di Google Geocoding vi rimandiamo alla pagina di descrizioni delle API cliccando quì.

Buona programmazione a tutti.


15/05/2012 - 18:50:33Sgisgi dice:
scusami ma per stampare in html lat o long?
16/05/2012 - 11:37:32Monska dice:
Ciao Sgisgi,
seguendo l'esempio, la variabile $data è un array associativo che ha come chiavi "lat" e "lng".
Per stamparle in una pagina puoi usare questa riga di codice:
<?php echo "LAT: ".$data['lat']." - LNG: ".$data['lng']."<br />"; ?>

Spero sia tutto chiaro.

Aggiungi un commento:
Nick:
captchaInserire il codice:





Licenza Creative Commons

Blog CodiceASbarre.Net di CodiceASbarre.Net sotto licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Italia License.
Lavoro basato su www.codiceasbarre.net.
Ulteriori permessi in merito questa licenza possono essere richiesti a info@codiceasbarre.net.


Link ad altri blog: