Как представить диапазоны адресов улиц для поиска географического местоположения? - PullRequest
0 голосов
/ 26 февраля 2011

У меня есть следующие типы входов:

Zone 1 =>
  Alabama street, 1 to 135, west side
  Alabama street, 2 to 144, east side
  Bahama square, 2 to 4
Zone 2 =>
  Bahama square, 5 to 8
  Cecil street, 3 to 27

и т.д.

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

Если мне дано географическое местоположение (широта, долгота), как я могу сопоставить это значение с зоной в указанном выше контексте? Очевидно, что поиск в Google Maps даст мне адрес, но как дальше? Каков наилучший способ представления данных такого типа (диапазонов адресов) для эффективного создания зоны?

(Вау, 3 вопроса в течение 1)

Ответы [ 2 ]

2 голосов
/ 26 февраля 2011

При условии, что вы будете полагаться на внешний источник (например, Google или Yahoo PlaceFinder) для обратного геокодирования, вы получите номер улицы и улицу (предположим, что город, штат и т. Д. Все совпадают). Если у вас есть улица и номер улицы, вопрос к вашей «базе данных» зон.

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

Однако, вероятно, было бы более надежным (т. Е. Меньше подвержено ошибкам из-за вариаций названия + номера), чтобы создать индекс для нормализованной формы названия улицы. Когда вы запрашиваете индекс, вы будете опрашивать каждый уличный узел, чтобы узнать, попадает ли число, которое у вас есть, в диапазон.

Так, например, ваш индекс может выглядеть так:

w. alabama ==> 1 <to> 135 ==> zone 1
e. alabama ==> 2 <to> 144 ==> zone 1
    bahama ==> 2 <to> 4 ==> zone 1
           ==> 5 <to> 8 ==> zone 2
etc.

Выше показано, что я нормализовал адреса улиц (регистр плюс учет таких вещей, как «запад» и «восток») способом, который синхронизирован с моим внешним обратным геокодером. Затем я реализую поиск диапазона на втором уровне индекса (именно поэтому я и написал, подразумевая, что вам необходимо реализовать эту логику), чтобы мне не приходилось перечислять все числа между ними. ПРИМЕЧАНИЕ. Многие детали формата / представления здесь будут зависеть от обычаев, которым подчиняется ваш источник обратного геокодирования, поэтому важно, чтобы вы рассмотрели каноническую / нормализованную форму этих данных , иначе получить много ложных негативов.

Конечно, вы могли бы сделать многое из этого с помощью реляционной БД, в зависимости от их поддержки индексов диапазона. Но если у вас нет одного удобного устройства или вы не хотите интегрировать его, я думаю, что вышеприведенный пользовательский индекс будет работать.

1 голос
/ 27 февраля 2011

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

Мое решение было бы сформировать шейп-файл для зоны, а затем проверить, еслиширота / долгота адреса для проверки находится в шейп-файле.Вот некоторые детали подхода:

  1. Используйте обратный API, чтобы получить широту / долготу каждой конечной точки улицы (например, 1 Вт. Алабама, 135 Вт. Алабама и т. Д.).

  2. Используйте эти конечные точки для создания многоугольной фигуры (шейп-файла) вокруг вашей зоны.

  3. Используйте обратный API, чтобы получить широту / долготу адреса дляcheck.

  4. Проверьте, находится ли этот широта / длина в форме многоугольника.

Если вы решили использовать сопоставление по адресу, вотссылка на почтовый стандарт США для адресов.Вы можете использовать этот стандарт для нормализации своих адресов.

http://pe.usps.gov/text/pub28/welcome.htm

Andrew The Team на OpenGeoCode.Org

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...