У семи программистов адрес без дома

- КиТ :: Будь в СЕТИ!

Мы в HumanFactorLabs парсим адреса в особо крупных размерах

Наши продукты ввод контактных данных и работу с ними.

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

Недавно на Хабре нас попросили привести примеры необычных адресов, в связи с чем и написана эта статья.

Номер дома — не число, а строка

Начнем с моего любимого места – города Электростали в Московской области. Как в любом уважающем себя городе, в нем есть проспект Ленина. Советское время кончилось, а проспект растёт и развивается. Недавно там построили новые дома.

Обычно при строительстве новых домов им присваивают номера в порядке продолжения. Если строительство домов происходит с начала улицы, где помещать рядом с домом 1 дом 36 нелогично, то просто начинают новую улицу.

Строительство новых домов на этом проспекте было запланировано с его начала. Однако новую улицу решили не делать, а продлить проспект Ленина, прибавив цифру 0 слева от номера новым домам.

То есть адреса Электросталь пр Ленина 4 и Электросталь пр Ленина 04 — это два разных адреса.

К сожалению, этот случай в России не единственный.

Вывод: храните номер дома как строку, чтобы не потерять лидирующий ноль.

Кстати, недавно нам пришёл такой адрес от клиента: 675018, Амурская, Моховая падь п, дом Л-1. Необычный дом, не правда ли? Мы не нашли его на картах, но он есть в ФИАС. Мы пока разбираемся, насколько корректно существование дома с лидирующей литерой, но вполне вероятно, что дом существует, так как его указал реальный клиент.

Почтовый индекс важен

Бывает, что в городе две улицы называются одинаково. Например, в Москве две улицы 8 марта. Различить их можно только по индексу.

Или, например, Россия, Архангельская область, Устьянский район, деревня Бережная на карте Яндекса встречается в трёх местах. Не знаешь индекс — письмо не дойдёт.

Вывод: сохраняйте почтовый индекс объекта.

Без типов никуда

Индексы важны, но не всегда достаточны для определения улицы и даже населённого пункта. Бывает, что у разных населённых пунктов один и тот же почтовый индекс:

Россия, край Забайкальский, р-н Агинский, пгт Агинское, ул Олимпийская, индекс: 687000 Россия, край Забайкальский, р-н Агинский, с Амитхаша, ул Олимпийская, индекс: 687000

То есть крайне важно хранить тип населённого пункта.

То же самое относится и к типам улиц: если в Яндексе набрать “Москва Пушкинская” и нажать “Найти”, то Яндекс покажет Пушкинскую набережную, хотя есть ещё улица и площадь.

Вывод: сохраняйте тип населенного пункта и улицы.

Бывают адреса без улицы. И даже без дома.

Иногда мы встречаем адреса без улицы. Редко — в городах, чаще — в населённых пунктах. Адрес “Алтай, пгт Шебалино, дом 2” действительно существует (и там готовят вкусные пирожки).

Случается, что у дома нет номера, только корпус. Так, например, живут люди в Зеленограде и микрорайоне Супонево в Звенигороде: Звенигород, Супонево, корп 1.

Вывод: если при сохранении адреса в базу у вас включена проверка на пустые значения, то:

Разрешайте сохранять адрес без улицы; Разрешайте сохранять адрес без номера дома, если указан корпус.

Бережно относитесь к литерам

Номер дома определяет отдельное сооружение. Литеры — это строения, пристройки и т.п., находящиеся на территории дома. Например, если дом имеет номер 4, то его пристройка может иметь номер 4А1, подвал — 4Б1, забор — 4I, строение — 4В, щитовая в отдельном сооружении — 4Г. Правила литерования действуют по всей России, но только в Питере их особенно любят. ?Адрес, содержащий несколько литер, — нормальная ситуация для Питера: г. Санкт-Петербург ул. Маркина, д. 16Б, литера А.

(Скриншот из Питера, сделан с карт )

Некоторые литеры легко перепутать с номерами: литера З похожа на цифру 3 (как бы вы прочитали адрес Москва Звездный 23 с З?), литеру Ч в рукописном шрифте можно спутать с четвёркой. Литеры Й и Я выглядят как сокращения (Дом 4й — это 4 литер й или четвертый?).

Можно разделять номер дома и литеру словом “литер”, чтобы адреса вроде Звездного бульвара воспринимались более однозначно. Например, так: Москва Звездный 23 литер З.

Выводы:

Не удаляйте литеры у домов. Выделяйте под хранение литеры несколько символов (мы храним три). Разделяйте номер дома и литеру.

На этом всё. В качестве примера посмотрите структуру ответа, который возвращает . При такой структуре хранения адреса описанные выше проблемы не должны вас коснуться.

ПодпискаБудь в СЕТИ! Новости социальных сетей - всегда актуальное
 
Группы: ВК | OK | Tg