формула диапазона почтового индекса. Какая формула верна? - PullRequest
2 голосов
/ 26 октября 2010

Мне нужно найти все почтовые индексы с определенным диапазоном из почтового индекса.У меня есть весь почтовый индекс широта / долгота в БД.

Я нашел в Интернете две формулы, которые немного отличаются друг от друга.Какой из них правильный?

Формула 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: (идентична формуле 1, за исключением следующего:)

def lonRange = Math.abs(range/(Math.cos(zip.latitude) * 69.172));

(Второйу одного нет Math.toRadians) После того, как я получу минимальную / максимальную широту / долготу, я намереваюсь искать таблицу БД, используя критерии между ними. Какая формула верна?

Ответы [ 3 ]

1 голос
/ 26 октября 2010

Зависит от единиц вашего лата / лонга. Если они выражены в градусах, вам необходимо перевести в радианы.

0 голосов
/ 26 октября 2010

Я бы предложил, чтобы БД делал всю тяжелую работу. Несколько БД имеют гео-надстройки, но вот пара примеров: MongoDB , postgres + postgis

0 голосов
/ 26 октября 2010

Если ваши данные о широте и долготе еще не в радианах, вам нужно использовать тот, который конвертирует.Вы должны знать, однако, что, как все настроено сейчас, вы получите диапазон квадрат .

Вам будет лучше выполнять вычисление расстояния в вашем запросе MySQL,используя теорему Пифагора, чтобы найти расстояние, вы получите диапазон круговой .Этот вопрос должен помочь вам начать с этого: mySQL выбирает почтовые индексы в пределах x км / миль в диапазоне y .

Если вам нужно улучшить его производительность, вы можете индексировать его, используя Sphinx .

...