Ето най-добрия начин, който намерих. Разбира се, това ще изисква всичките си пощенски кодове lat/lon да са кодирани в базата данни.
// 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;
}
Трябва да можете просто да пуснете тази функция. Предайте му $lat и $lon на пощенския код, за който искате радиуса, включете незадължителния радиус и вземете обратно списък с пощенски кодове.
Можете много лесно да промените това, за да получите всички потребители с пощенски код IN (radius_sql) и да върнете потребители в списъка си.
Приятно кодиране!