Валидатор московских адресов

Вроде сделал нормальную обработку одноимённых улиц. Проверяйте.

Зеленоград в эту норму, как всегда, не укладывается.

  1. Если название улицы не уникально в Москве, то это еще не повод от нее требовать в обязательном порядке наличия suburb. Улица может и без этого быть вполне уникальна в рамках Зеленограда. (Первомайская улица)
  2. Если название улицы уникально в Москве, или в Зеленограде, то это еще не повод от нее требовать в обязательном порядке отсутствия suburb. Для уточнения suburb бывает полезен. (Медведковская улица, Садовая, Новая, Ровная и т.п.)
  3. Если название улицы не уникально в Зеленограде, то это еще не повод от нее требовать в обязательном порядке наличия suburb. subur должны иметь только улицы вне “собственно Зеленограда”. Иначе suburb=Зеленоград :wink:
  4. Если название улицы уникально в Зеленограде, то это еще не повод от нее требовать в обязательном порядке наличия/отсутствия правильного suburb. Для уникальности в классификаторе стоит или “Зеленоград” или suburb, угадать невозможно.
    Заречная улица (г. Зеленоград), плавно переходит в Школьная улица (Крюково). Ладно, есть Школьная улица (пос. Малино) , но почему улица Ленина (Крюково), а выходящая на нее Советская улица (г. Зеленоград), это никак не понять.

В общем алгоритм надо выворачивать на изнанку. Идти от того, что есть в OSM и пытаться найти это в классификаторе, причем не единственным образом.
Сейчас же из классификатора берется “идеальное название” и ищется в OSM причем единственным образом.

С Заводской беда. Она, как я писал, искусственно поделена на две части, но дома приписаны к одной.

Вообще-то мне это кажется или те улицы, на которых, по мнению справочника, нет домов в список не попадают?
Зато потом выплывают, как “неизвестные” .

Что-то в моем списке улиц, взятом с http://mosclassific.ru/mClass/spravum_view.php , в Зеленограде больше.
http://wowik.000space.com/zelenograd.htm

Где у вас, к примеру, Филаретовская улица ?

Да, и последнее по порядку, но не по важности, а где же все безуличные корпуса? :wink:

Повод, повод. Все вменяемые случаи, типа addr:suburb=Зеленоград в Зеленограде, разруливаются правильно. Все остальные это уже ошибки.

Да, улицы без домов отбрасываются.

У безуличных корпусов [по официальному реестру] предполагается addr:street=“город Зеленоград”

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

А здря.

Масло масляное. Приехали. Дойдем до того, чтобы писать

addr:city=Зеленоград
addr:suburb=Зеленоград
addr:street=Зеленоград

А потом скатимся
addr:city=Москва
addr:suburb=Москва

У нас задача не привести адреса к тому, как они в реестре, а проверить по реестру.
Там введена искусственная конструкция, из-за ленивости программистов, не могущих дом повесить на город.
В OSM сейчас введена другая, чуть более осмысленная, искусственная конструкция (addr:street=Микрорайон), для ленивых программистов конверторов, не могущих сделать поиск домов без улицы.

Еще раз повторяю, что в реестре suburb написан порой от балды.

Оно конечно можно мапить под данный валидатор, но тогда почему бы не под другой, или под конвертор?

В общем, как минимум, перед сравнением надо избыточные addr:suburb откидывать при сравнении, как в адресе, так и в улице.
Ибо наличие уже addr:city приводит к уменьшению неоднозначности.

Ещё раз:

  • валидатор предназначен для сравнения адресов из ОСМ с официальным адресным реестром
  • addr:city игнорируется вообще и принципиально, н/п матчатся только по попаданию в полигон
  • addr:suburb считается частью адреса, а не территориальной принадлежностью или чем-то ещё, и соответственно его совпадение тоже проверяется
  • когда addr:suburb совпадает с названием города, он игнорируется

Что касается безуличных корпусов, с ними надо думать отдельно (они, кстати, не только в Зеленограде есть).
предложения принимаются :slight_smile:

Я про эту ошибку и говорю. addr:suburb определяется неединственным образом.

В отличие от реестра:

  1. Он может присутствовать в OSM, даже когда избыточен.
  2. Он может отсутствовать в OSM, когда избыточен в пределах Зеленограда.
  3. В реестре может присутствовать addr:suburb более высокого уровня, если этого достаточно для однозначности в пределах Москвы.

Я уже писал, что сам реестр территорий подразумевает их вложенность!
http://forum.openstreetmap.org/viewtopic.php?pid=117824#p117824

Это не ошибка.
Могу ещё раз повторить: адреса сравниваются с теми, что есть в реестре, а не с кем-то придуманными. И если кто-то внёс адрес, которого нет в реестре, валидатор (как ни странно) скажет, что этого адреса нет в реестре.

при этом, разумеется, делается поправка на разницу в структурах представления адресов, но сами адреса не меняются

С них и надо было начинать! Тогда остальное бы само получилось. :wink:
Кстати в деревнях это тоже принято. “Село Васино, дом 8”

  1. Для начала допустить неединственность записи адреса.
  2. Надо реестр понимать творчески — дополнить его признаками бутафорности улицы.
    То есть пометить их костыли, как костыли. Это “улицы” “Зеленоград” и “Х-й Микрорайон”. Причем “Зеленоград”, в добавок к бутафорности (то есть такая улица в почтовом адресе такая улица отсутствует, но полезна, к примеру, для поиска и т.п.), добавит признак дефолтности. То есть, “тут лежат дома, у которых нет улицы”.
  3. Бутафорские улицы в OSM тоже бы пометить, как бутафорские, но может обойдется.

Итого:

Перед сравнением приводим адреса из реестра и из OSM к одному каноническому виду (например максимально короткому виду, достаточному для разрешения неоднозначности).

Для однозначности заменяем указание на suburb на самый suburb самого высокого уровня, сохраняющего отсутствие неоднозначности. В реестре это уже почти так.
Тем самым “улица Ленина(Крюково)” становится “улица Ленина(Зеленоград)”

Если улица единственна в Зеленограде, то из реестрового адреса выкидываем указание на suburb, да он и будет совпадать с Зеленоград.

Если найденная улица помечена (см. п.2) как бутафорская, (3-й Микрорайон), то ее пропускаем (при сравнении).

М-да, что-то сумбурно получилось…

Чтобы не ломать всё сразу, то можно все эти дела применять только к тем домам, которые на первом проходе не нашли себе места.

Вы сузили задачу.
Валидатор не проверяет верен ли московский адрес, а проверяет совпадает ли он с тем, как адрес записан в реестре.
Это две большие разницы.

г. Москва, г Зеленоград, пос.Малино, Малинская улица, д.15 - совершенно верный адрес.
г. Москва, г Зеленоград, Первомайская улица, д. 13 - совершенно верный адрес.

Основываясь на тех же классификаторах, второй можно вывести, если принять во внимание эквивалентность вложенных территорий, но про первый в классификаторе информация уже опущена, так как Малино заменено территорией более высокого уровня.

Да, именно это он и делает. Хотя не совсем: он проверяет совпадение адресов, а не записей. Он и предполагался делать именно это - других источников правильных адресов нет

А в приведённом примере как раз два разных адреса, хотя относящихся к одному и тому же объекту. В реестре же у объекта адрес всего один.

Дам два разных примера:

г. Москва, г Зеленоград, пос.Малино, Малинская улица, д.15 - совершенно верный адрес.
г. Москва, г Зеленоград, Малинская улица, д.15 - тоже совершенно верный адрес (так в реестре).

г. Москва, г Зеленоград, Первомайская улица, д. 13 - совершенно верный адрес.
г. Москва, г Зеленоград, пос.Малино, Первомайская улица, д. 13 - тоже совершенно верный адрес (так в реестре)…

Кроме того,
г. Москва, г Зеленоград, Крюково, Малинская улица, д.15 - тоже совершенно верный адрес.
г. Москва, г Зеленоград, Крюково, Первомайская улица, д. 13 - тоже совершенно верный адрес.
Хотя Крюково вовсе не территория, а территориальная единица, реестр использует и это понятие.
Например:
г. Москва, г Зеленоград, Крюково, Школьная улица улица, д. 22.
http://mosclassific.ru/mClass/spravum_viewd.php?id=31546&ul=%D8%EA%EE%EB%FC%ED%E0%FF+%F3%EB%E8%F6%E0

Вы сами пишете:

Вот и я за то, чтобы эту поправку сделать адекватнее.
Структура адресов не только различна, но и не единственна.

Еще раз, suburb в реестре расставлен непоследовательно
Сравним улицы двух супругов.
улица Ленина:
Код территории Москвы: 170 - город Зеленоград
Код территориальной единицы: 1005 - Район Крюково (Зеленоградский административный округ)
улица Крупской:
Код территории Москвы: 170 - город Зеленоград
Код территориальной единицы: 1005 - Район Крюково (Зеленоградский административный округ)

Почему обязательно должно быть “улица Ленина (Крюково)”, а “улица Крупской (Зеленоград)” из этого реестра не следует.

Это два разных адреса (хотя может быть они и адресуют один и тот же объект).
В АР есть только второй, а первого нет. Соответственно, с точки зрения АР первый адрес неправильный - такого не существует.
Не понимаю, что тут непонятно :slight_smile:

Следует: так написано в колонке position справочника улиц.
Коды территории Москвы, а тем более коды территориальных единиц, к адресации непосредственного отношения не имеют.
И кроме того в них в ОМКУМе очень много ошибок.

Не годится: в АР у каждого объекта только один адрес. Валидатор проверяет наличие в ОСМ такого адреса.
Придумывать свои собственные адреса, а потом с ними сравнивать - это не дело.

Пока склоняюсь к тому, чтобы просто отбрасывать название улицы там где оно совпадает с названием н/п

Добавил в статистику последний(?) недостающий кусок - посёлок Акулово.

UPD
Не, ни фига, ещё Милицейский посёлок надо правильно поделить.

Прошерстил с десяток улиц, да, 100% заполнения добиться практически нереально, в основном непонятно откуда брать всякие строения типа болерных, транформаторных будок и подобного, особенно на промышленных территориях. Только на одной улице не нашел всего один домик :slight_smile:

Самый полный источник - www.atlasmoscow.ru

Спасибо, через поиск нашел это недостающее строение, на самом же домике в атласе надписи нет. Есть еще одна улица со всеми адресами :slight_smile:

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

Достаточно навести мышу и появится всплывающая подсказка. А так кто-то с форума делал дампы с того сайта. У них там можно скачать сырые данные из БД если знать как. Даже вроде систему координат более-менее подобрали.