Share
php logo

Il logo di Php

Ho creato questo script quando, per sviluppare mobile.italysquare.com, avevo la necessità di sapere quali hotel erano nelle vicinanze della posizione gps rilevata dall’iPhone, ma non avevo le informazioni di latitudine e longitudine sulla tabella MySql degli hotels.

A questo punto ho creato due nuove colonne (più la colonna accuracy con i valori che vedrai spiegati sotto) sulla tabella hotel e le ho valorizzate con update partendo dall’indirizzo della struttura e tramite lo script sotto, che necessita di due files (BaseGeocode.php e GoogleGeocode.php) che potere scaricare zippati qui.

Di seguito il programma che aggiorna la tabella con le informazioni latitude/longitude da indirizzo con l’ausilio dei potenti mezzi di Google map.

Buon lavoro!

<?php
/*

Aggiunge le informazioni di lat/long/accuratezza su una tabella MySql partendo da un indirizzo tipo via citta' ecc..
Restituisce questo vettore:

 Array
 (
 [Response] => Array
 (
 [Status] => 200
 [Request] => geocode
 )

 [Placemarks] => Array
 (
 [0] => Array
 (
 [Accuracy] => 8
 [Country] => US
 [AdministrativeArea] => NY
 [SubAdministrativeArea] => Monroe
 [Locality] => Rochester
 [Thoroughfare] => 1 Lomb Memorial Dr
 [PostalCode] => 14623
 [Latitude] => 43.092108
 [Longitude] => -77.675238
 )

 )

Possibili valori di accuratezza (da: code.google.com/apis/maps/documentation/geocoding/#GeocodingAccuracy):

0     Unknown accuracy.
1     Country level accuracy.
2     Region (state, province, prefecture, etc.) level accuracy.
3     Sub-region (county, municipality, etc.) level accuracy.
4     Town (city, village) level accuracy.
5     Post code (zip code) level accuracy.
6     Street level accuracy.
7     Intersection level accuracy.
8     Address level accuracy.
9     Premise (building name, property name, shopping center, etc.) level accuracy.

)
*/

// ... qui ometto alcuni miei include.... come quelli per aprire il db e parametri vari... poi:

include "includes/GoogleGeocode.php";

$data_ora = strftime("%Y/%m/%d - %H:%M:%S");
$apiKey = $googlemapkey; // da generare su code.google.com/apis/maps/signup.html

// Connect to the MySQL server
if (!($connection = @ mysql_connect($hostname, $username, $password)))
 showerror();

if (!(mysql_select_db($databasename, $connection)))
 showerror();

print "*********** INIZIO ***************<br>";

$query =  "SELECT * FROM is_hotel";
$query .= " and hotel_lat <> ''";
$query .= " order by hotel_id";

print $query ."<br>";

if (!($result = @ mysql_query($query, $connection)))
 showerror();

$row = mysql_fetch_array($result);

while ($row)
{
 $i++;
 $nomestru = $row["hotel_nomestru"];
 $id = $row["hotel_ID"];
 $indirizzo = $row["hotel_indirizzo"];
 $comune = $row["hotel_comune_nome"];
 $comune_cap = $row["hotel_comune_cap"];
 $comune_prov = $row["hotel_comune_prov"];

 $geo = new GoogleGeocode( $apiKey );
 $stringa = utf8_encode("$indirizzo, $comune, $comune_cap, Italia");
 $coord = $geo->geocode($stringa);

 //    se lettura googlemap andata bene (200) e l'accuratezza è accettabile procede all'aggiornamento

 if (($coord['Response']['Status'] == 200) and ($coord['Placemarks'][0]['Accuracy'] >= 8))
 {
 $out1 = "UPDATE is_hotel set hotel_accuracy = ".$coord['Placemarks'][0]['Accuracy'].", hotel_lat = ".$coord['Placemarks'][0]['Latitude'].", hotel_long = ".$coord['Placemarks'][0]['Longitude'].                    " where hotel_ID = $id";
 //print $out1."<br>";
 //    esegue l'update direttamente sul DB
 if (!(@ mysql_query ($out1, $connection)))
 showerror();
 print ">>>>> OK >>>>>> $id -- $nomestru -- " . $stringa . ">>".$coord['Placemarks'][0]['Latitude']."<< >>".$coord['Placemarks'][0]['Longitude']."<< >>".$coord['Placemarks'][0]['Accuracy']."<< <br>";
 $a++;
 }
 else
 print "NON AGGIORNATO: $id -- $nomestru -- " . $stringa . " >>" .$coord['Response']['Status']."<< >>".$coord['Placemarks'][0]['Accuracy']."<< <br>";

 $row = mysql_fetch_array($result);
}

print "Letti records: ".$i."<br>";
print "Aggiornati   : ".$a."<br>";
print "******** FINE *********";
?>