спасибо! может все таки раскрасить большим количеством цветов?
например, логичным мне кажется следующий набор
зеленый - правильный
серый - не найден в осм
розовый - не найден в реестре
желтый - неправильный формат адреса
оранжевый - неправильное название улицы
и куда нибудь легенду ткнуть…
Я бы рекомендовал пользоваться подходом ОКУМ-а, во всяком случае он разумен и непротиворечив. Улицы с двойными названиями есть во всех крупных городах и так их различают. А для удобства пользователей можно вводить сколько угодно понятных всем территорий типа Замоскворечье, Китай-город или Южное Бутово.
Так все таки что же делать? Эти домики, например, по http://www.ggk.mos.ru/data/guest/show_map_frame имеют совершенно другие адреса и по другой улице. В ОСМ они по ул. Академика Скрябина - в ОМКУМ таких адресов вообще нет, в ggk.mos.ru они по Ферганской ул.
А нельзя ли прикрутить статистику, когда и сколько процентов было сделано? Чтобы видеть “прогресс”?
И еще мне интересно, что все-таки помешало когда-то взять адресацию с http://www.atlasmoscow.ru ?
А можно не форсить адреса с пробелами? Кроме того, что никто так и не сказал зачем они нужны (учитывая что буквы, включенные в номер и с/к от строения/корпус мы различаем по регистру), один еще и сумятицу вносят - я видел где-то адрес вида 1 к2/2. Посмотрите как написаны адреса в том же atlasmoscow - по-моему, больше ничего не надо.
Лучше отмечать жёлтым всякие “корп.” и “стр.”. И, кстати, как писать владение и домовладение?
PS. Валидатор приравнивает латинские k и с к соответствующим кириллическим, но не aAbBdDeE. Поэтому я вчера сконвертил все addr:housenumber в Москве в кириллицу где можно было - с B и D получается неоднозначно, им добавил fixme.
Зеленоград в эту норму, как всегда, не укладывается.
Если название улицы не уникально в Москве, то это еще не повод от нее требовать в обязательном порядке наличия suburb. Улица может и без этого быть вполне уникальна в рамках Зеленограда. (Первомайская улица)
Если название улицы уникально в Москве, или в Зеленограде, то это еще не повод от нее требовать в обязательном порядке отсутствия suburb. Для уточнения suburb бывает полезен. (Медведковская улица, Садовая, Новая, Ровная и т.п.)
Если название улицы не уникально в Зеленограде, то это еще не повод от нее требовать в обязательном порядке наличия suburb. subur должны иметь только улицы вне “собственно Зеленограда”. Иначе suburb=Зеленоград
Если название улицы уникально в Зеленограде, то это еще не повод от нее требовать в обязательном порядке наличия/отсутствия правильного suburb. Для уникальности в классификаторе стоит или “Зеленоград” или suburb, угадать невозможно.
Заречная улица (г. Зеленоград), плавно переходит в Школьная улица (Крюково). Ладно, есть Школьная улица (пос. Малино) , но почему улица Ленина (Крюково), а выходящая на нее Советская улица (г. Зеленоград), это никак не понять.
В общем алгоритм надо выворачивать на изнанку. Идти от того, что есть в OSM и пытаться найти это в классификаторе, причем не единственным образом.
Сейчас же из классификатора берется “идеальное название” и ищется в OSM причем единственным образом.
С Заводской беда. Она, как я писал, искусственно поделена на две части, но дома приписаны к одной.
Вообще-то мне это кажется или те улицы, на которых, по мнению справочника, нет домов в список не попадают?
Зато потом выплывают, как “неизвестные” .
А потом скатимся
addr:city=Москва
addr:suburb=Москва
У нас задача не привести адреса к тому, как они в реестре, а проверить по реестру.
Там введена искусственная конструкция, из-за ленивости программистов, не могущих дом повесить на город.
В OSM сейчас введена другая, чуть более осмысленная, искусственная конструкция (addr:street=Микрорайон), для ленивых программистов конверторов, не могущих сделать поиск домов без улицы.
Еще раз повторяю, что в реестре suburb написан порой от балды.
Оно конечно можно мапить под данный валидатор, но тогда почему бы не под другой, или под конвертор?
В общем, как минимум, перед сравнением надо избыточные addr:suburb откидывать при сравнении, как в адресе, так и в улице.
Ибо наличие уже addr:city приводит к уменьшению неоднозначности.
Это не ошибка.
Могу ещё раз повторить: адреса сравниваются с теми, что есть в реестре, а не с кем-то придуманными. И если кто-то внёс адрес, которого нет в реестре, валидатор (как ни странно) скажет, что этого адреса нет в реестре.
при этом, разумеется, делается поправка на разницу в структурах представления адресов, но сами адреса не меняются
С них и надо было начинать! Тогда остальное бы само получилось.
Кстати в деревнях это тоже принято. “Село Васино, дом 8”
Для начала допустить неединственность записи адреса.
Надо реестр понимать творчески — дополнить его признаками бутафорности улицы.
То есть пометить их костыли, как костыли. Это “улицы” “Зеленоград” и “Х-й Микрорайон”. Причем “Зеленоград”, в добавок к бутафорности (то есть такая улица в почтовом адресе такая улица отсутствует, но полезна, к примеру, для поиска и т.п.), добавит признак дефолтности. То есть, “тут лежат дома, у которых нет улицы”.
Бутафорские улицы в OSM тоже бы пометить, как бутафорские, но может обойдется.
Итого:
Перед сравнением приводим адреса из реестра и из OSM к одному каноническому виду (например максимально короткому виду, достаточному для разрешения неоднозначности).
Для однозначности заменяем указание на suburb на самый suburb самого высокого уровня, сохраняющего отсутствие неоднозначности. В реестре это уже почти так.
Тем самым “улица Ленина(Крюково)” становится “улица Ленина(Зеленоград)”
Если улица единственна в Зеленограде, то из реестрового адреса выкидываем указание на suburb, да он и будет совпадать с Зеленоград.
Если найденная улица помечена (см. п.2) как бутафорская, (3-й Микрорайон), то ее пропускаем (при сравнении).
М-да, что-то сумбурно получилось…
Чтобы не ломать всё сразу, то можно все эти дела применять только к тем домам, которые на первом проходе не нашли себе места.