Почтовые индексы в определенном диапазоне - PullRequest
2 голосов
/ 08 июня 2011

У меня есть база данных с серией записей (не более 10 тысяч), где одним из полей является почтовый индекс.

Я хочу создать сценарий, который при наличии почтового индекса и радиуса мили (например, 50 миль, 100 миль) позволяет найти все записи, которые находятся в этом диапазоне.

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

Есть ли способ сделать это, используя простые вычисления, где база данных не нужна?

ПРИМЕЧАНИЕ: точность не имеет большого значения. Если он работает на 60 миль при вводе 50 миль, это прекрасно.

EDIT

Я замечаю много ответов, которые включают получение широты / долготы почтового индекса, однако в базе данных хранятся только почтовые индексы, поэтому я могу предположить, что это включает в себя задним числом получение / сохранение широты / долготы каждой записи в а база данных тоже?

Ответы [ 6 ]

2 голосов
/ 08 июня 2011

Другим вариантом, который может или не может быть подходящим в этой ситуации, является использование округов при поиске радиуса. Для большинства проектов, над которыми я работал, пользователь знает свою страну и знаком с ней. Вы можете купить округ в базу данных (и город / штат / и т. Д.) За 20-40 долларов. Это то, что можно многократно использовать в разных проектах. Это не обязательно дает вам точную возможность делать радиус 10/25/50/100 миль, но может позволить вам выполнить поиск радиуса в моем регионе на основе запрошенного почтового индекса.

2 голосов
/ 08 июня 2011

Нет.Почтовые коды действительно следуют определенной логике на высоком уровне , но алгоритмическое отображение между почтовым индексом и местоположением отсутствует (т. Е. Почтовые индексы присваиваются местоположению, а не вычисляются для местоположения - этот процесс контролируется почтовым органом (USPS в США), но он всегда будет учитывать негеографические факторы, например, плотность населения, следовательно, невозможность вычисления почтового индекса из местоположения или наоборотVersa).

Итак, вам понадобится эта "здоровенная база данных", чтобы сообщить вам, какой почтовый индекс принадлежит какому-либо местоположению;как только у вас есть местоположение, вы можете вычислить, какие записи находятся в радиусе, как обычно.

(Вы можете запросить веб-сервис, но это просто скрывает базу данных в облаке - в какой-то момент, кто-то должен проверить, где физически лежит 90210.

2 голосов
/ 08 июня 2011

Если точность не является проблемой, вы можете построить долготу и широту центра почтового индекса или приблизительную оценку центра. Затем вы можете с помощью скрипта рассчитать расстояние между каждым из центров, используя формулы в списке здесь . Нет необходимости использовать формулу haversine, как показано здесь , то есть для предельной точности, которая вам не нужна. Тригонометрические и обратные тригонометрические функции тратят много вычислительных ресурсов и являются пустой тратой. Каждый раз запрашивать расстояние и заставлять MySQL выполнять такую ​​сложную формулу для каждого почтового индекса - просто пустая трата ресурсов.

Если вы должны делать это много раз каждый день, может быть быстрее (компромисс скорости и скорости здесь) просто сохранить расстояние между каждым почтовым индексом. Общее количество записей в такой таблице хранения представляет собой квадрат числа почтовых индексов, которые у вас есть. Проходя десятки тысяч почтовых индексов каждый раз, чтобы вычислить, что потребляет огромные вычислительные мощности, не говоря уже о том, что он медленнее для конечного пользователя.

Кроме того, подобный вопрос уже задавался здесь ранее, пожалуйста, посмотрите на принятый ответ на этот вопрос, он относится к вашей ситуации: Рассчитайте расстояние между почтовыми индексами и пользователями

0 голосов
/ 08 июня 2011

Один из вариантов - использовать Google Maps API, чтобы найти широту и длину вашего местоположения. Затем вам нужно будет указать в своей базе данных лат и лонг для каждого из ваших почтовых индексов, и вы напишете скрипт для расчета оттуда.

0 голосов
/ 08 июня 2011

Вы можете использовать карты Google, чтобы получить широту и долготу для этого почтового индекса, запрос может быть, как этот "почтовый индекс"

И чтобы вы могли прочитать этот http://www.movable -type.co.uk / scripts / latlong.html , чтобы узнать, как рассчитать расстояние между точками

Вот как это сделать, используя SQL http://www.movable -type.co.uk / scripts / latlong-db.html , сначала рассчитайте диапазон и выполните поиск по этому диапазону (он будет работать быстрее)

0 голосов
/ 08 июня 2011

Главное, что вам нужно - это перевести эти почтовые индексы в геокоординаты (т. Е. Пары широты и долготы).Получив это, вы можете посмотреть эту презентацию , в которой подробно объясняется, как выполнять поиск по заданным координатам.

...