У меня есть запрос к базе данных sql, чтобы найти все соответствующие почтовые индексы в пределах заданного радиуса от заданного почтового индекса (таблица db содержит информацию о долготе и широте).
Я использовал этот алгоритм, который нашел здесь, в stackoverflow:
$sql = 'ВЫБРАТЬ отдельный(ZipCode) FROM zipcode WHERE (3958*3.1415926*sqrt((Latitude-'.$lat.')*(Latitude-'.$lat.') + cos(Latitude/57.29578) cos('.$lat.'/57.29578)(Долгота-'.$lon.')*(Долгота-'.$lon.'))/180) ‹= '.$radius.';' ;
Он работает, но я обнаружил, что результаты не совсем такие, как ожидалось. Например, если я выполняю поиск в радиусе 40 миль от 11572 (Оушенсайд, штат Нью-Йорк), он не возвращает количество почтовых индексов Манхэттена (т. е. 10023), которые явно находятся в пределах этого радиуса 40 миль.
Я надеюсь, что у кого-то может быть альтернативный подход?
спасибо, Марк