allora... l'utente immette l'indirizzo in una form che manda tutto a questa funzione 
	Codice PHP:
	
public static function  lat_long($indirizzo){        
         $cordinate = array();        
         if (!is_string($indirizzo))die("gli indirizzi devono essere mandati come stringa");             
         $encoding_address = urlencode($indirizzo);          
         $GoogleAPI = 'http://maps.google.com/maps/api/geocode/xml?address='.$encoding_address.'&sensor=false';          
         $XMLresult = file_get_contents($GoogleAPI);            
         $XMLobject = new SimpleXMLElement($XMLresult);         
         if($XMLobject->status=='OK') {
                $cordinate['lat'] = $XMLobject->result->geometry->location->lat;          
                $cordinate['long'] = $XMLobject->result->geometry->location->lng;        
         }        
         return $cordinate;    
} 
 
poi tutto passa attraverso questa query:
	Codice PHP:
	
"SELECT TOP 3 *, (6378.8 * ACOS(SIN(".$lat." / 57.2958) * SIN(lat / 57.2958) + COS(".$lat." / 57.2958) * COS(lat / 57.2958)  * COS(lon / 57.2958 - ".$long." / 57.2958))) AS distanza             FROM luoghi
        WHERE lat IS NOT NULL AND lon IS NOT NULL AND ".$lat.">=lat-0.9 AND ".$lat."<=lat+0.9 AND ".$long.">=lon-0.9 AND ".$long."<=lon+0.9
        AND (6378.8 * ACOS(SIN(".$lat." / 57.2958) * SIN(lat / 57.2958) + COS(".$lat." / 57.2958) * COS(lat / 57.2958)  * COS(lon / 57.2958 - ".$long." / 57.2958)))< 100 ORDER BY distanza ASC " 
 
in pratica ho ridotto tutti i record ad un "raggio" (in realtà è un quadrato) di 100km dal luogo di partenza (ricordo che per passare dal raggio in km a radianti bisogna moltiplicare per 0,009) in modo da poter snellire le operazioni da db