Как правильно сохранить почтовый адрес
Привет, Хабр!
Мы в HumanFactor парсим адреса в особо крупных размерах. Наши продукты упрощают ввод контактных данных и работу с ними.
За 10 лет работы в результате анализа многочисленных исключений в российских адресах мы выработали правила хранения адресов, при соблюдении которых вы не потеряете важную информацию.
Недавно на Хабре нас попросили привести примеры необычных адресов, в связи с чем и написана эта статья.
Номер дома — не число, а строка
Начнем с моего любимого места — города Электростали в Московской области. Как в любом уважающем себя городе, в нем есть проспект Ленина. Советское время кончилось, а проспект растёт и развивается. Недавно там построили новые дома.
Обычно при строительстве новых домов им присваивают номера в порядке продолжения. Если строительство домов происходит с начала улицы, где помещать рядом с домом 1 дом 36 нелогично, то просто начинают новую улицу.
Строительство новых домов на этом проспекте было запланировано с его начала. Однако новую улицу решили не делать, а продлить проспект Ленина, прибавив цифру 0 слева от номера новым домам.
То есть адреса Электросталь пр Ленина 4 и Электросталь пр Ленина 04 — это два разных адреса.
К сожалению, этот случай в России не единственный.
Вывод: храните номер дома как строку, чтобы не потерять лидирующий ноль.
Кстати, недавно нам пришёл такой адрес от клиента: 675018, Амурская, Моховая падь п, дом Л-1. Необычный дом, не правда ли? Мы не нашли его на картах, но он есть в ФИАС. Мы пока разбираемся, насколько корректно существование дома с лидирующей литерой, но вполне вероятно, что дом существует, так как его указал реальный клиент.
Почтовый индекс важен
Бывает, что в городе две улицы называются одинаково. Например, в Москве две улицы 8 марта. Различить их можно только по индексу.
Или, например, Россия, Архангельская область, Устьянский район, деревня Бережная на карте Яндекса встречается в трёх местах. Не знаешь индекс — письмо не дойдёт.
Вывод: сохраняйте почтовый индекс объекта.
Без типов никуда
Индексы важны, но не всегда достаточны для определения улицы и даже населённого пункта. Бывает, что у разных населённых пунктов один и тот же почтовый индекс:
- Россия, край Забайкальский, р-н Агинский, пгт Агинское, ул Олимпийская, индекс: 687000
- Россия, край Забайкальский, р-н Агинский, с Амитхаша, ул Олимпийская, индекс: 687000
То есть крайне важно хранить тип населённого пункта.
То же самое относится и к типам улиц: если в Яндексе набрать «Москва Пушкинская» и нажать «Найти», то Яндекс покажет Пушкинскую набережную, хотя есть ещё улица и площадь.
Вывод: сохраняйте тип населенного пункта и улицы.
Бывают адреса без улицы. И даже без дома.
Иногда мы встречаем адреса без улицы. Редко — в городах, чаще — в населённых пунктах. Адрес «Алтай, пгт Шебалино, дом 2» действительно существует (и там готовят вкусные пирожки).
Случается, что у дома нет номера, только корпус. Так, например, живут люди в Зеленограде и микрорайоне Супонево в Звенигороде: Звенигород, Супонево, корп 1.
Вывод: если при сохранении адреса в базу у вас включена проверка на пустые значения, то:
- Разрешайте сохранять адрес без улицы;
- Разрешайте сохранять адрес без номера дома, если указан корпус.
Бережно относитесь к литерам
Номер дома определяет отдельное сооружение. Литеры — это строения, пристройки и т.п., находящиеся на территории дома. Например, если дом имеет номер 4, то его пристройка может иметь номер 4А1, подвал — 4Б1, забор — 4I, строение — 4В, щитовая в отдельном сооружении — 4Г.
В связи с поступающими в адрес Управления вопросами о правилах использования обозначений при литеровке строений и сооружений разъясняем правила, принятые в технической инвентаризации.Все отдельные элементы участка (строения, сооружения, тротуары, мостовые и пр.) должны быть пролитерованы.Основные строения и сооружения литеруются заглавными буквами русского алфавита А, Б, В и т.д. (кроме использования литеры Г, предназначенной для служебных строений и сооружений).Пристройки, подвал, мезонин, мансарда и т.д. литеруются буквами того основного строения, в составе которого они расположены, с добавлением цифрового значения их номера по порядку описи: А1, А2 или Б2, Б4 и т.д. Холодная пристройка литеруется строчными буквами русского алфавита соответственно литере основного строения: а1, а2 или б1, б2 и т.д. Служебные строения и сооружения литеруются заглавной буквой Г с добавлением цифрового обозначения по номеру описи: Г1, Г2 и т.д. Ворота, заборы и дворовые замощения литеруются римскими цифрами: I, II, III и т.д. Возможна ситуация, когда количество строений и сооружений, расположенных на одном земельном участке превышает число букв русского алфавита. Существующие правила присвоения строениям литер не освещают подобного варианта. Считаем необходимым, с учетом требований Инструкции, в этом случае использовать сочетания двух букв русского алфавита, например, АБ, АВ… АЯ, БВ, БГ… БЯ и т. д. Согласно Инструкции о порядке проведения работ по упорядочению нумерации строений в г. Ленинграде и его пригородах административного подчинения, утвержденной начальником Бюро технической инвентаризации Исполкома Ленсовета 12.09.1974 г., домовладению присваивается один номер, независимо от количества основных строений расположенных в нем. Местоположение строений на участке определяется его литерой. Частным случаем такого домовладения является группа строений, объединенная одним земельным участком, например, территория промышленного предприятия.При выделении самостоятельного земельного участка из состава ранее сформированного земельного участка и необходимости присвоения ему самостоятельного адреса используется корпусная система, при которой строению дополнительно к основному номеру дома присваивается номер корпуса, например, корпус 1. Изменение литер на строения на вновь сформированных земельных участках при этом производить не обязательно.(см «Инструкция о проведении учета жилищного фонда в Россйской Федерации»)
Правила литерования действуют по всей России, но только в Питере их особенно любят. Адрес, содержащий несколько литер, — нормальная ситуация для Питера: г. Санкт-Петербург ул. Маркина, д. 16Б, литера А.
Некоторые литеры легко перепутать с номерами: литера З похожа на цифру 3 (как бы вы прочитали адрес Москва Звездный 23 с З?), литеру Ч в рукописном шрифте можно спутать с четвёркой. Литеры Й и Я выглядят как сокращения (Дом 4й — это 4 литер й или четвертый?).
Можно разделять номер дома и литеру словом «литер», чтобы адреса вроде Звездного бульвара воспринимались более однозначно. Например, так: Москва Звездный 23 литер З.
Выводы:
- Не удаляйте литеры у домов.
- Выделяйте под хранение литеры несколько символов (мы храним три).
- Разделяйте номер дома и литеру.
На этом всё. В качестве примера посмотрите структуру ответа, который возвращает API Dadata.ru. При такой структуре хранения адреса описанные выше проблемы не должны вас коснуться.