Qualche mese fa abbiamo visto un esempio complesso su come trasformare un indirizzo civico passato in coordinate geografiche (latitudine e longitudine), attraverso l’uso di api di Google Maps e in particolare del geocode.
In quel caso si trattava di un esempio completo, con delle aggiunte, ma Google ci mette a disposizione uno script molto più semplice per ricavare latitudine, longitudine e altitudine da un indirizzo passato.
Di seguito vi propongo uno script, liberamente scaricabile, che permette di ricavare le coordinate dall’indirizzo passato. Funziona da solo senza aggiunte: questo significa che potrete metterlo online sul vostro sito e richiamarlo come una comune pagina php.
Il codice stampa a video le coordinate. Per interazioni più complesse (per esempio, salvataggio delle coordinate nel database) potete dare un’occhiata al link che trovate in fondo all’articolo.
Il codice non ha bisogno di grandi spiegazioni e i commenti dovrebbero essere sufficienti per capirne la dinamica.
Vi basterà cambiare soltanto l’indirizzo di partenza, contenuto nella variabile address
.
Download script
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
//Inizializza il ritardo nella velocità del geocode $delay=0; $base_url="http://maps.google.com/maps/geo?output=xml&key=abcdefg"; $geocode_pending=true; while($geocode_pending){ //Questa è l'unica variabile da modificare: scrivere qui l'indirizzo civico $address="Via dietro Anfiteatro, 37121 Verona"; $id=1; $request_url=$base_url."&q=".urlencode($address); $xml=simplexml_load_file($request_url) or die("url non caricato"); $status=$xml->Response->Status->code; //Il geocode ha avuto successo if(strcmp($status, "200")==0){ $geocode_pending=false; $coordinates=$xml->Response->Placemark->Point->coordinates; $coordinatesSplit=explode(",", $coordinates); // In ordine nell'array si trova: Longitude, Latitude, Altitude $lng=$coordinatesSplit[0]; $lat=$coordinatesSplit[1]; $alt=$coordinatesSplit[2]; echo $lat." --- ".$lng." --- ".$alt; //Il geocode è sttato inviato troppo velocemente }elseif(strcmp($status, "620")==0){ $delay+=100000; //Il geocode non ha avuto successo }else{ $geocode_pending=false; echo "Address ".$address." failed to geocoded. "; echo "Received status ".$status."\n"; } usleep($delay); } |