Her er den bedste måde, jeg har fundet. Det kræver selvfølgelig, at du har alle dine postnumre lat/lon kodet i databasen.
// get all the zipcodes within the specified radius - default 20
function zipcodeRadius($lat, $lon, $radius)
{
$radius = $radius ? $radius : 20;
$sql = 'SELECT distinct(ZipCode) FROM zipcode WHERE (3958*3.1415926*sqrt((Latitude-'.$lat.')*(Latitude-'.$lat.') + cos(Latitude/57.29578)*cos('.$lat.'/57.29578)*(Longitude-'.$lon.')*(Longitude-'.$lon.'))/180) <= '.$radius.';';
$result = $this->db->query($sql);
// get each result
$zipcodeList = array();
while($row = $this->db->fetch_array($result))
{
array_push($zipcodeList, $row['ZipCode']);
}
return $zipcodeList;
}
Du burde bare kunne droppe denne funktion. Giv den $lat og $lon for det postnummer, du vil have radius for, inkluder den valgfri radius, og få en liste over postnumre tilbage.
Du kan meget nemt ændre dette for at få alle brugere med postnummer IN (radius_sql) og få dine listebrugere tilbage.
God kodning!