У меня есть запрос к базе данных sql, чтобы найти все подходящие zipcodes в пределах заданного радиуса от заданного zipcode (таблица db содержит информацию о долготе и широте).Альтернативный алгоритм поиска радиуса zipcode?
Я использовал этот алгоритм, который я нашел здесь, на StackOverflow:
$ SQL = 'SELECT отчетливый (ZipCode) FROM почтовый индекс WHERE (3958 * 3,1415926 * SQRT ((широта -' $ ш '). *. (Широта - '. $ Lat.') + Cos (Широта/57.29578) cos ('. $ Lat.'/57.29578) (Долгота - '. $ Lon.') * (Долгота - '. $ Lon.'))/180) < = '. $ Radius.'; ';
Он функционирует, но я нахожу, что результаты не совсем так, как ожидалось. Например, если я выполняю поиск в радиусе 40 миль от 11572 (Oceanside, NY), он не возвращает ряд почтовых индексов Манхэттена (т. Е. 10023), которые явно находятся в радиусе 40 миль.
Я надеюсь, что у кого-то может быть альтернативный подход?
благодарит, Mark
try: where sqrt (pow (Latitute - '$ .lat', 2) + pow (Longitude - '. $ Lon', 2)) <= '$ .radius' – rocketspacer
Я мог догадаться, что проблема в том, что это измеряет центры почтовых индексов в радиусе 40 миль - и вы, вероятно, хотите, и почтовые индексы с площадью и радиусом 40 миль. Звучит ли это так? – gbtimmon
Я дал этот выстрел, nmtuan, но он вернул огромный список намного выше заданного радиуса 40 миль и вызвал фатальное исключение таймаута. – zargosh