Här är det bästa sättet jag har hittat. Naturligtvis kommer det att kräva att du har alla dina postnummer lat/lon kodade 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 borde bara kunna släppa in den här funktionen. Skicka $lat och $lon för postnumret du vill ha radien för, inkludera den valfria radien och få tillbaka en lista med postnummer.
Du kan mycket enkelt ändra detta för att få alla användare till postnummer IN (radius_sql) och få dina listaanvändare tillbaka.
Lycka till med kodningen!