Как «Дадата» находит адреса по координатам (и где мы взяли справочник)
Весной мы добавили в API DaData.ru фичу «Адрес по координатам», она же «Обратное геокодирование». Название прозрачно намекает: метод принимает геокоординаты и находит вагон данных об адресе.
Солидный продукт с той же функциональностью сделал «Яндекс» — он называется «Геокодер». Но сервис «Яндекса» бесплатен только для открытых некоммерческих проектов. Стандартный же тариф — от 120 000 ₽ в год — подходит не всем.
Мы подумали — если сделать бесплатную или недорогую альтернативу, разработчики наверняка скажут спасибо. И сделали, благо подготовили к тому времени сильные стартовые позиции:
В статье расскажу, как мы создали «Адрес по координатам»: собрали справочник, наладили поиск и упаковали все в готовый метод.
Откуда берем данные и чем ищем по географическим объектам
Подступаясь к задаче, мы изучили готовые решения: где взять справочник координат с адресами и как потом искать по этому справочнику географические объекты. Оказалось, за нужными инструментами даже не придется далеко ходить.
Адресные объекты получаем из ФИАС — Федеральной информационной адресной системе. Это самый полный из открытых и официальных адресных справочников. Подробно о нем мы писали на «Хабре», а для этого материала важны четыре факта:
Адресные объекты, загруженные из ФИАС вместе с ID, — основа нашего справочника для обратного геокодирования.
Координаты загружаем из OpenStreetMap (OSM). OSM — проект со свободной лицензией: энтузиасты собирают координаты всевозможных объектов и выкладывают для всех желающих.
Если по-простому, OSM — это набор точек, линий и полигонов на карте. У каждого объекта свое описание, тип и набор геокоординат.

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

Список источников публикуют на специальной странице в «Вики» проекта
Выгрузки состоят из PBF-файлов — этот формат используют вместо XML как более компактный. Превратить PBF в OSM XML ничего не стоит, с конвертацией справится куча одобренных сообществом утилит.
Для собственного справочника мы берем адресные объекты из ФИАС, а затем ищем их координаты в OSM. Если нашли, сохраняем объединенные данные. В итоге получаем такое пересечение ФИАС и OSM.
И все это замечательно, но есть одна проблема: с качеством данных в OSM дела обстоят непросто. Координаты объектов часто не соответствуют реальности.
Полигоны для регионов и районов адекватны. А для городов и ниже — уже не очень.
Поэтому основная работа, и с большой форой — это собрать из OSM адекватные данные и отсеять брак. Задача настолько объемная, что я отвел под нее в статье отдельный раздел.
Дома, которых нет в ФИАС, загружаем тоже из OSM. Выше я уже говорил, что в ФИАС отсутствуют десятки тысяч домов. Это даже не проблема, а просто реальность, фон. Поэтому мы пополняем свой справочник домами из OSM. Но только теми, для которых в ФИАС существует улица.
Разумеется, у пришедших из OSM зданий нет ФИАС ID. Поэтому мы идентифицируем их как ФИАС-код родителя + номер дома.
По справочнику ищем с помощью прекрасного Lucene — нашего многолетнего помощника. За наводку спасибо сведущему индийцу, написавшему пост Indexing Geographical Data With Lucene (хорошее дополнение — материал A dive into spatial search algorithms — о k-d-деревьях, на которых построен алгоритм поиска).
Как только мы узнали об у́дали Lucine, проблема с поиском решилась почти сама. Делов осталось — пройтись наждачкой.
Пока все выглядит просто, но это лишь малая часть работы. Никакого поиска адреса по координатам не получилось бы, не собери мы приличный справочник.
Как собрали базу координат и адресов
Для начала выложу багаж: прочитав статью, быстро сделать подобный справочник не получится. Мы собираем его с 2014 года, постоянно дополняя. Об этом чертовски длинном пути я и расскажу.
Самое сложное — это перебрать кординаты, которые пришли из OSM. На старте мы выверяли их как могли, в том числе руками. Главная цель тогда — получить опорные точки в крупных городах и сделать из них эталонный справочник. Теперь, когда точек опоры много, проверять новые данные вручную почти не приходится. За раз мы добавляем в эталонный справочник по 200 000–300 000 адресов с координатами. И вот как это делаем.
Формируем из OSM-тегов полные адреса́. В OSM-выгрузках составные части адресов хранятся как разные теги.
На следующем шаге нам понадобятся строки, поэтому пробегаем по тегам и собираем из них полный адрес.
Из тегов собираем строку д. Булатниково, Центральная улица, 103.
Прогоняем каждый адрес из OSM через сервис стандартизации «Дадаты». Он приводит адреса к единому формату «Как в ФИАС»:
Адреса́ приходят от сервиса стандартизованными, хоть сейчас шли письмо или бандероль.
д. Булатниково, Центральная улица, 103
↓
API стандартизации DaData.ru
↓
142718, Московская обл, Ленинский р-н, с Булатниково, ул Центральная, д 103. a8b6a52f-e96d-4ec3-a0ff-641013ab0445
a8b6a52f-e96d-4ec3-a0ff-641013ab0445 — это ФИАС ID адреса.
Адреса́, которые не получилось сопоставить с ФИАС, «Дадата» помечает флажком. Их разбираем вручную, вариантов несколько.

Распарсил выгрузку, а там — путаница в тегах
Стандартизованные дома, улицы и населенные пункты мы храним как одну точку. Для улицы и населенного пункта эта точка — центр. В итоге все адресные объекты лежат в одной таблице, внутри — адрес, ФИАС ID, широта и долгота.
| Адрес | ФИАС ID | Широта | Долгота |
|---|---|---|---|
| 142718, Московская обл, Ленинский р-н, с Булатниково, ул Центральная, д 103 | a8b6a52f-e96d-4ec3-a0ff-641013ab0445 | 55.558773 | 37.667103 |
| 119034, г Москва, пер Турчанинов, д 6 стр 2 | 8c925e61-9173-48b3-999e-dc85c86d89e7 | 55.737096 | 37.597190 |
Проверяем, насколько адекватны загруженные координаты. Для этого специальной утилитой смотрим, попадают ли координаты нового объекта в полигон родительского региона или района. Вхождения в город не требуем — не все города точно освещены в OSM, для многих данные не обновляют.
Если адрес сообщает, что объект находится в Омской области, будь добр по координатам попадать в ее полигон.
Эталонные полигоны мы загружаем из OSM и храним как есть — в формате GeoJSON.
Чтобы выбрать, к какому полигону примерить точку, заглядываем в отдельную таблицу. Здесь мы сопоставили префиксы КЛАДР-кодов и ID полигонов: находишь для адреса КЛАДР-код и смотришь, какой полигон соответствует.

КЛАДР-код — это уникальный идентификатор, который использовали еще до появления ФИАС. Находить этот код для адреса умеет миллион сервисов
Утилита разрешает объекту отстоять от положенного полигона на 1 700 метров. Это правило добавили из-за шоссе, которые часто выходят за границы региона. Но расстояние больше 1 700 метров — признак ошибки, так говорит статистика.
На этом для городов и улиц проверка заканчивается.
Еще раз, построже, проверяем загруженные координаты домов. В дело снова вступает упомянутая утилита, и вот что она делает.

Соседей найти несложно: 1. Берем новый дом и находим ФИАС ID родителя. 2. Выбираем из эталонного справочника дома́, у родителей которых тот же ФИАС ID
Проверку проходят только дома, которые удалены от надежных коллег не более чем на 150 метров. Причем каждый новый дом, прошедший проверку, мы учитываем при разборе следующих.
В эталонном справочнике хранятся дома № 1, 2 и 3 по улице Коммунаров.
В новых данных пришли дома № 5, 6 и 7 по той же улице. Судя по координатам, новые дома стоят рядом.
Утилита видит, что дом № 5 находится рядом с домами № 1, 2 и 3 и добавляет его в эталонный справочник. Значит, дома № 6 и 7 тоже проходят проверку.
А дальше решается судьба пришедших из OSM данных:
Делим прошедшие проверку объекты на две части. Они пойдут в разные таблички нашего эталонного справочника.

В первой таблице — все объекты с ФИАС ID до домов: регионы, населенные пункты, улицы. Во второй — дома́ и ссылка на родителя из первой таблицы
Две таблицы нужны, чтобы назначить ключи отсутствующим в ФИАС домам. У них нет собственного ФИАС-кода, поэтому делаем вот как:
В итоге здания без ФИАС-кода мы идентифицируем по ключу ФИАС ID родителя + номер дома.
Справочник готов, осталось протестировать. За ночь прогоняем сервис по функциональным тестам и тестируем производительность. Скорость проверяем на Москве, запрашивая все дома в радиусе трех километров. Чтобы уж наверняка. Конечно, обложили все автотестами.
Главное после обновления — чтобы не стало хуже.
Поиск адреса по координатам для пользователя
На вход методу подают координаты, количество результатов и радиус поиска. Радиус по умолчанию — 100 метров, максимальный — километр. Если нужно точное значение, его указывают в настройках.
Обратно метод возвращает найденные объекты: дома, улицы и населенные пункты. При этом сортирует их по убыванию точности.
Затем сортирует еще раз — по расстоянию от заданных координат.
Если метод нашел четыре дома и улицу, сначала встанут дома́ в порядке удаленности от заданной точки. За ними — улица.
После всех этих рокировок метод наконец-то возвращает объекты, которые нашел.
Внутри — много разного о найденных объектах: строки с полным и сокращенным адресом, актуальное и устаревшие названия, почтовый индекс, ФИАС-код родительского объекта и так далее.

Все данные, которые отдает метод — в документации
Покрытие по координатам для разных регионов разное, лучше всего дела обстоят в столицах. Вот так с домами:
А вот это — покрытие по улицам:
По городам не считали — в масштабах России зыбок даже сам факт принадлежности к гордому званию города.
Ярославская обл, Пошехонский р-н, с/о Федорковский — это город, согласно официальному справочнику ФИАС. А по факту, да и по адресу — сельский округ.
Физически сельский округ напоминает объединение нескольких деревень в большую кляксу. Сложно не только определить центр, но даже найти населенный пункт на карте.
Уже думаем, что добавить к методу: разрешить фильтрацию по типам объектов, возвращать расстояния до заданной точки, еще что-нибудь. Следим за спросом и решаем, вкладывать ли силы.
А в остальном все уже на проде. До 10 000 запросов в сутки — бесплатно, больше — по подписке от 5 000 ₽ в год. Если в коммерческом проекте есть задача — найти адреса́ по координатам, а «Геокодер» слишком дорог — попробуйте API «Дадаты».
Все то же самое, но в промышленных масштабах умеет и «Фактор».
Работа с картой OpenStreetMap
Сегодня OpenStreetMap набирает огромную популярность среди веб-картографических проектов. Причинами этого является его некоммерческий стиль, подробная свободная и бесплатная географическая карта мира, а также то, что сервис Google Maps, который до этого времени использовало значительное количество сайтов, стал платным! Также следует заметить, что OpenStreetMap появился задолго до Google Maps.
На сайте Openstreetmap.org размещена карта, онлайн-инструменты по ее редактированию, дневники участников, форум, справочная вики и раздел помощи. В Openstreetmap, как и в Wikipedia, основную часть данных добавляют частные лица, заинтересованные в развитии проекта. По каждому участку карты видна история правок, что в свою очередь снижает возможность вандализма и, в некоторых случаях, позволяет оптимизировать работу нескольких человек, занятых одним и тем же участком карты.
Данная статья будет дополняться по ходу реализации функционала различных проектов, связанных с OpenStreetMap.
Для полноценной работы карты OpenStreetMap мы будем использовать библиотеку JavaScript Leaflet, которая небольшая, простая и имеет отличную документацию.
В этой статье рассмотрим пример, который показывает, как:
— настроить простую карту с помощью библиотеки Leaflet;
— загрузить местоположение маркера;
— отображать координаты при нажатии на карте, или создавать визуально маркеры.
1. Облегчает нагрузку на ваш сервер.
2. CDN распространяют контент, чтобы он был ближе к пользователю, что ускоряет загрузку.
3. Браузеры ограничивают количество запросов HTTP для каждого хоста, поэтому доступ к нескольким различным хостам позволяет извлекать данные параллельно, что приводит к более быстрому отображению страницы.
4. Если пользователь посетил другой сайт с использованием того же сценария, он автоматически будет сохранен в кэше, что позволит на вашем сайте не загружать его снова и значительно ускорит отображение страницы.
После загрузки скриптов и стилей необходимо включить в файл идентификатор карты:
Мы создаем Div под названием map с высотой и шириной, который будет заполнен нашей картой, когда мы создадим ее в нашем JavaScript. Если мы не укажем ширину, карта будет динамически регулировать ширину для страницы.
Наконец, у нас есть список поддоменов. Этот массив строк подставляется в часть шаблона URL. Обратите внимание, что этот список зависит от серверов слоев, которые вы используете. Эта опция позволяет браузеру загружать файлы с нескольких серверов одновременно, что приводит к более быстрой загрузке страницы и более быстрым обновлениям, когда пользователь перетаскивает карту.
Хорошо, теперь у нас есть интерактивная карта, которую мы можем перетаскивать, увеличивать и уменьшать. Следующее, что необходимо сделать, это добавить маркеры.
В данном варианте координаты размещены непосредственно в коде скрипта. Но настоятельно рекомендуется сохранять в отдельном файле, чтобы их можно было легко заменить или обновить без изменения основного файла.
Маркеры Leaflet предлагают много вариантов для настройки. В нашем примере мы создаем маркер в определенном месте, привязываем к нему простое всплывающее окно и добавляем его на нашу карту. В данной строке указывается широта и долгота, а также данные, отображаемые во всплывающем окне.
Основная задача карты выполнена, мы показали маркеры и выведи необходимую информацию. Но как добавлять координаты для маркера? Вот рабочий пример:
И html код:
Теперь, при нажатии на карте, будет выводится ширина и долгота. Немного доработав скрипт, можно отправлять данные с помощью библиотеки jQuery.
RU:Addresses
Адресная информация может быть добавлена в OpenStreetMap различными способами, в том числе с помощью указания адреса для простой точки, здания, участка или другой территории или даже для каждого входа здания.
Теги OpenStreetMap поддерживают различные способы адресации, применяемые в мире.
Содержание
Как указывать адрес
Адреса указываются тегами группы addr=*. Теги могут быть добавлены:
Этот подход исторически восходит к схеме Karlsruhe.
На странице Rapid Address Collection описаны некоторые способы быстрого сбора адресной информации.
Как правило, адресная информация не должна дублироваться, то есть каждый addr:housenumber=* должен встречаться на данной улице только один раз (и как правило помещаться на здании). Программное обеспечение обычно может связывать адреса с другими сущностями на основании географической близости и инструменты обеспечения качества часто помечают дублирующиеся адреса как ошибочные. Однако по этому вопросу до сих пор имеются различные точки зрения (например Address information in POI *and* building? на help.openstreetmap.org). Также сообщества в отдельных странах установили свои собственные правила внесения адресной информации.
Такие теги, как addr:country=*, addr:city=*, часто являются избыточными, так как объекты внутри административных границ (если они обозначены) «наследуют» от них свои атрибуты. Это поддерживается такми программами как Nominatim и Photon.
Использование отношений
С помощью отношения RU:Relation:associatedStreet можно связать дома и улицы, к которым они относятся. Это может использоваться как альтернатива тегу addr:street=*. Основное применение данного отношения является адресация с наименованием улицы на нескольких языках.
На июль 2015 около 10% адресов домов отмечено по данной схеме. Некоторым участниками сообщества дальнейшее использование этого отношения ставится под сомнение.
Отношение RU:Relation:street используется для связи улицы и всего что к ней относится, включая здания и адреса. Оно также может использоваться как альтернатива тегу addr:street=*, а также другим тегам группы addr=*, таким как addr:city=*
Здания с несколькими адресами
По этой теме консенсус ещё не достигнут. Предлагаются следующие варианты:
Несколько зданий с одним адресом
Это часто встречается на фермах, заводах и школах. В таком случае допускается нарисовать линию по периметру объекта и добавить на нее адресные и другие общие теги, например название. Данный подход позволяет избежать избыточности в данных. Если здания не могут быть объединены единым периметром (например, школа из двух зданий в квартале друг от друга), используйте отношения multipolygon или site.
Для зданий, которые адресуются именем, используйте тег addr:housename=*.
Использование интерполяции
Если вдоль улицы нет точек или полигонов для каждого номера дома, можно воспользоваться автоматической интерполяцией номеров. Для этого, соедините имеющиеся дома линией и отметьте эту линию тегом, обозначающим способ интреполяции, так как указано на рисунке выше. Дополнительные теги, такие как addr:street=*, по прежнему добавляются к объектам с тегом addr:housenumber=*, тогда как линия интерполяции имеет толькотег addr:interpolation=*.
Если отдельная точка или полигон здания отмечены тегом номера дома и одновременно номер дома может быть вычислен в результате интерполяции, программное обеспечение должно аккуратно обрабатывать эту ситуацию и отдавать предпочтение номеру, явным образом проставленному на объекте.
Как можно увидеть на иллюстрации выше, можно добавлять отдельные точки с нечисловым значением тега номера дома addr:housenumber=* в любую из интерполяций odd/ even/ all (например, 12b). В интерполяции это значение будет проигнорировано. Однако, конечные точки в интерполяции всегда должны следовать заданному правилу! Например для addr:interpolation=even тег addr:housenumber=* на конечных точках должен быть четным.
Некоторые участники сообщества используют addr:interpolation=* на единичном объекте для указания, что его тег addr:housenumber=* должен рассматриваться как диапазон, а не как неделимая метка (см. выше). Консенсус по этому вопросу отсутствует.
Использование интерполяции адресов при частичном обследовании
Для указания точности интерполяции может использоваться необязательный тег Template:RU:Tey, определяющий каких данных не хватает в обследовании:
Адреса без названий улиц
Некоторое адреса зданий не включают названий улиц. Например, в маленьких деревнях адрес может включать только название деревни и имя или номер дома; на маленьких островах адреса могут состоять из названия острова и имени здания (например, спортивный центр на Елагином острове в Санкт-Петербурге).
В некоторых постсоветских странах, таких как Туркмения, адреса зданий состоят из номера дома и названия административного района города (и иногда микрорайона), в котором данное здание расположено, например микрорайоны Парахат и Гаудан в Ашхабаде. В этих случаях номера домов присваиваются в том порядке, в котором строились здания и не имеют связи с расположением домов относительно друг друга.
В этих случаях не следует использовать тег addr:street=*. Вместо это необходимо использовать тег addr:place=* для указания части адреса, которая заменяет название улицы/переулка/проспекта. например для названия деревни или части населенного пункта (района города, микрорайона, и т.п.).
Локальные особенности адресации в разных странах
Россия
В Российской Федерации вопрос присвоения адресов на данный момент (2021 год) регулируется правилами, утвержденными Постановлением Правительства РФ от 19 ноября 2014 г. № 1221 «Об утверждении правил присвоения, изменения и аннулирования адресов» в редакции от 04.09.2020 pravo.gov.ru.
Пункты II.9 и II.10 данных правил гласят, что при присвоении адреса отдельным помещениям или сооружениям объекта незавершенного строительства, такие адреса должны соответствовать адресам земельных участков, в границах которых расположены соответствующие строения, и что адрес отдельного помещения должен соответствовать адресу того объекта, частью которого он является.
Следует помнить, что действие указанного постановления распространяется на новые адреса. Старые же адреса, присвоенные до принятия этого постановления, не всегда соотвествуют современным правилам адресации.
Ключи addr=* должны использоваться только для указания номера addr:housenumber=*, либо имени addr:housename=* (в России не используется) объекта адресации, а также для указания соответствующих адресообразующих элементов (объектов дорожной сети через addr:street=*, территорий через addr:place=* и т.д.), действительно присутствующих в адресе. Если какой-то элемент в официальном адресе отсутствует, вносить его в теги addr=* не следует. Например, если адрес выглядит, как «город Иваново, улица Ленина, дом 1», но также известно, что дом 1 находится в муниципальном районе «Заводской», наименование района в теги адреса вносить не следует. Теги addr=* не предназначены для условной группировки адресов или связывания зданий с какой-либо территорией. Более сложным примером является ситуация, когда территориальное деление влияет на формирование адреса (номера объекта адресации), но элементы этого деления не являются адресообразующими. Например, номера домов в населенном пункте получают префикс номера микрорайона, но слово «микрорайон №. » в адресе отсутствует. Такие случаи требуют особого рассмотрения.
В сообществе продолжается дискуссия [3] о том, являются ли избыточными адресные теги, которые могут быть определны из административных границ, внутри которых находится объект адресации, или же следует всегда указывать весь набор тегов, составляющий официальный адрес объекта. Согласно первому варианту (так называемая сокращенная схема) достаточно прописать только адрес внутри населённого пункта. Обычно это номер дома addr:housenumber=*, улица addr:street=* или иная территория, по которой ведётся адресация, и название населенного пункта addr:city=*. В случае наличия в пределах населённого пункта одноимённых улиц в адрес может входить уточняющая информация addr:suburb=*.
Остальные части адреса – страна addr:country=*, регион addr:region=*, район addr:district=* и муниципальное образование addr:subdistrict=* – определяются из соответствующих административных границ, внутри которых располагается объект адресации.
Сокращенная схема адресации подерживается существующими популярными приложениями, такими как конверторы в навигаторы, основанные на RU:osm2mp (Гармин, Навител, СитиГИД, ГисРусса). Кроме того, osm2mp умеет получать название улицы из отношений Relation:street или RU:Relation:associatedStreet.
Нумерация домов
Если есть необходимость указать не дом, а владение, то перед номером дома вплотную пишется «вл»: «вл48А соор3«.
Если номер дома написан через дробь, то так и пишется, например, «2/10«.
Если есть необходимость указать литеру (не путать с буквой в номере дома, корпуса, строения), то его значение добавляется в конце через пробел и строку «лит»: «48А литБ«.
В случаях, когда несколько соседних участков были объединены, адрес здания, построенного на объединённом участке, следует указывать через знак «дефис-минус» (-, U+002D), например, «17-23«.
В случаях, когда один и тот же адрес по документам присвоен территории и здании на ней (например, детский сад), адрес следует ставить на здании.
Правила адресации для домов с несколькими адресами описаны в разделе Угловые дома.
Следует иметь в виду, что наряду с адресами, у зданий и сооружений могут быть обозначения, определенные внутренними правилами организации, владеющей ими или помещающейся в них. Эти обозначения не являются адресом или его частью. Такие обозначения часто имеют временные сооружения, например торговые павильоны рынков, складские быстровозводимые конструкции, легкие хозяйственные постройки на территории садоводческих товариществ и т.п. Для таких обозначений используется ключ ref=*. Для того, чтобы иметь возможность адекватно использовать информацию об адресе, взятую из данных OpenStreetMap, важно, чтобы в тегах addr=* хранилась только информация об официальном адресе, так как иначе отделить официальную составляющую от неофициальной становится невозможно. Так, например, если здание имеет адрес по населенному пункту, не следует помещать название ближайшей улицы в addr:street=*, так как при автоматическом извлечении адресов из базы определить, что же именно входит в почтовый адрес здания, а что служит только для ориентации, будет невозможно.
Уникальность адреса
По этой причине, не следует присваивать одинаковый адрес в следующих распространенных ошибочных случаях:
Примеры
1) дом адресуется по улице
город Зеленоград, Берёзовая аллея, дом 6, строение 1 обозначается:
2) дом адресуется по населённому пункту
деревня Гадюкино, дом 13
Существует различные точки зрения относительно того, является ли обязательным указание объекта, по которому осуществляется адресация (к которому привязан номер дома), если этот объект и есть сам населенный пункт.
Сторонники точки зрения, что данная информация является избыточной, так как к населенному пункту адрес обязательно привязан, ограничиваются минимальным набором тегов:
3) дом адресуется по микрорайону (квараталу, и т.п.)
город Ангарск, 34-й микрорайон, дом 33
В этом случае указание addr:place является обязательным
Угловые дома
Вопрос тегирования угловых домов, которые имеют несколько адресов, широк и спорен. На русском форуме есть несколько тем, где он обсуждается: [4], [5], [6], [7]. Существуют разные варианты расстановки тегов, каждый из них имеет свои преимущества и недостатки. В некоторых городах уже могла сложиться предпочтительная практика тегирования, поэтому рекомендуется проконсультироваться с местным сообществом.
Для примера, пусть угловой дом имеет номер 6 по Большой улице и 9 по улице Ленина.
1) запись через дробь
3) дополнительные адреса на точках
на полигоне здания:
на отдельной точке внутри контура дома:
Когда два адреса расположены на разных объектах, для всех применений это мало отличимо от двух разных домов, поэтому у программ не будет проблем с нахождением адресов. Однако, если в доме есть POI, то определить их адреса становится очень нетривиально: по сути, второй адрес просто теряется.
В этой записи адреса по разным улицам равнозначны. Запись более чем двух адресов не приводит к странным вереницам чисел, как в варианте с дробями. Dkiselev написал подробное описание схемы. Минусы: пока не поддерживается ни одной программой, на всех картах будет только один адрес.
4) деление дома на части
При таком подходе предлагается разделить дом на части по количеству адресов, на каждую часть поставить отдельный адрес.
Особые случаи
В некоторых населённых пунктах применяется схема адресации, отличная от «улица, номер дома». Например, в Зеленограде адрес большого количества жилых домов состоит только из номера корпуса. При этом широко используется деление на микрорайоны, фактически не закреплённое официально, то есть не являющиеся административными единицами.
Было принято решение [8] использовать следующую схему:
3. Запрещается создание «псевдоулиц» для группировки зданий (установка name=N-й микрорайон на произвольно выбранной дороге и т.п.)
4. Для группировки зданий в Зеленограде ставятся тэги:
на областях, задающих микрорайоны:
Украина
Позволяет задавать адреса на любом языке (русском/украинском и др.) с нормально работающим адресным поиском. Настоятельно рекомендуется к использованию на территории Украины. Не противоречит остальным правилам wiki. Нормально обрабатывается конвертером osm2mp (но есть нюансы).
Описание и обсуждение на форуме
Австралия
Бельгия
Фландрия
Фламандский AGIV (Agentschap voor Geografische Informatie Vlaanderen) предоставляет доступ к адресной информации. База данных не используется для прямого импорта, но данные из нее могут использоваться для сравнения с данными OSM для поиска отличий. Более подробная информация содержится в документации.
Чехия
Чехия использует свою собственную систему для внесения адресов, так как одного тольго тега addr:housenumber =* недостаточно. Дополнительно мы использем теги:
Чешское правительство предоставляет открытые данные по номерам домов. Номера домов обновляются примерно раз в месяц. Дополнительную информацию можно найти на странице Address_import_from_RUIAN.
Дания
Согласно датскому Bekendtgørelse om vejnavne og adresser (Постановление о именах улиц и адресах) всем единицам BBR (записям в датском регистре недвижимости) будут присвоены адресные точки. Если на единице BBR существует строение, адресная точка должна быть помещена посередине самой длинной стороны здания в 3 метрах от стены ближайшей к основной (именованной) дороге к объекту.
Все датские адресные точки (с февраля 2009) импортируются из центрального сервиса, управляемого датским правительством, и постоянно контролируются и корректируются согласно этому источнику. Иностранные участники проекта, дополняющие карту в Дании, должны учитывать, что датское сообщество не допускает объединения импортированных адресных точек со зданиями. При использовании в Даннии плагина JOSM Buildings Tools, пожалуйста убедитесь, что автоматическое объединение адресных точек со зданием выключено.
Несмотря на то, что ранее массовый импорт из публичных источников как правило приводил к негативным результатам, адресные данные датского правительства имеют очень высокое качество. Наличие миллионов адресных точек (с корректно проставленными тегами согласно принятой схеме существенно повысил качество набора датских данных, служащих основанием для ряда инструментов обеспечения качества (для поиска «белых пятен» на картах, где есть адреса, но пока еще ничего не обозначено), например соответствия addr:street названию ближайшей улицы.
Франция
Германия
Широко используется Karlsruhe Schema (что не удивительно, так как она была впервые предложена именно в Германии), а также интерполяция.
Италия
Номера домов обычно присваиваются точкам доступа к участкам (например, воротам в периметре) или входам в здание (если выходят непосредственно на улицу), а также некоторыи типам возможных или бывших входов, например витринам магазина. Для уточнения можно использовать дополнительные теги, например entrance = yes/no или barrier = gate . В историческом контерсте нет ничего необычного в номерах домов, присвоенных входам в здание расположенных на различных (втором или выше/ниже) этажах. В этих случаях для ясности можно добавлять теги level = 1 и т.п. Для мест без номера дома (it: snc) можно использовать тег nohousenumber = yes и оставлять тег addr:housenumber =* пустым.
Новая Зеландия
Схема Rural Addressing (сельская адресация) установлена стандартом Australian/New Zealand Standard 4819:2003 Geographic Information – Rural and urban addressing в 2003. Она базируется на RAPID (Rural Address Property IDentification, Идетификация Адресов Сельской Недвижимости), схеме впервые предложенной в Новой Зеландии в 1999 [2] для помощи экстренным службам в идентификации и поиске сельской недвижимости.
Например, адрес 1536 Longley Road может быть легко найден делением на 100. В результате каждый, кто ищет этот адрес, знает, что он находится в 15.36 км от начала Longley Road. Экстренная служба может сбросить счетчик пробега в начале дороги и не тратить время на номера почтовых ящиков до тех пор пока счетчик пробега не приблизится к заданному значению.
Любая сельская недвижимость может иметь номер, а некоторые даже имеют несколько номеров для различных въездов, расположенных вдоль дороги. Это помогает найти посетителю найти какую-то определенную часть участка, например, скотный двор.
Норвегия
Карты и инструменты обеспечения качества
Визуализация адресов и зданий доступна в одном из представлений OSM Inspector компании Geofabrik. В этом представлении отслеживаются теги зданий и наличие адресов и названий. OSM Inspector также производит проверку линий интерполяции адресов. Coloured Streets представляет собой картостиль для JOSM, который ориентирован на анализ адресных данных.




