Dit is de beste manier die ik heb gevonden. Het vereist natuurlijk dat u al uw postcodes lat/lon in de database hebt gecodeerd.
// 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;
}
Je zou gewoon in deze functie moeten kunnen vallen. Geef het de $lat en $lon door van de postcode waarvoor je de straal wilt hebben, voeg de optionele straal toe en krijg een lijst met postcodes terug.
Je zou dit heel gemakkelijk kunnen wijzigen om alle gebruikers met postcode IN (radius_sql) te krijgen en je lijstgebruikers terug te krijgen.
Veel plezier met coderen!