Формула диапазона расстояния Zipcode. Какая формула верна?
-
26-09-2019 - |
Вопрос
Мне нужно найти все почтовые почки с определенным диапазоном от Zipcode. У меня есть все Zipcode Lat / Lon в БД.
Я нашел два формула онлайн, которые немного отличаются друг от друга. Какой из них правильный?
Формула 1:
def latRange = range/69.172
def lonRange = Math.abs(range/(Math.cos(Math.toRadians(zip.latitude)) * 69.172));
def minLat = zip.latitude - latRange
def maxLat = zip.latitude + latRange
def minLon = zip.longitude - lonRange
def maxLon = zip.longitude + lonRange
Формула 2: (идентична формулы, за исключением следующих :)
def lonRange = Math.abs(range/(Math.cos(zip.latitude) * 69.172));
(Второй не имеет Math.toRadians
) После того, как я получаю Min / Max LAT / LON, я намерен искать таблицу БД, используя между критериями между критериями. Какая формула верна?
Решение
Это зависит от единиц вашей латы / длинного. Если они находятся в градусах, вам нужно преобразовать в радианы.
Другие советы
Я бы предложил позволить DB сделать всю тяжелую подъем. Несколько DB имеют геокоптанты, но вот пара примеров: Монгодб, postgres + postgis.
Если ваши данные широты и долготы еще не в радианах, то вам нужно будет использовать тот, который преобразует. Вы должны знать, что то, как вещи настроены сейчас, вы получите квадратный спектр.
Вы будете лучше выполнить расчет расстояния в вашем запросе MySQL, используя теорему Пифагорейской, чтобы найти расстояние, чтобы вы закончить циркулярный спектр. Этот вопрос должен помочь вам начать с этого: MySQL Выберите Zipcodes в X Km / Miles в пределах досягаемости Y .
Если вам нужно улучшить его производительность, вы можете указать его, используя Сфинкс.