Валидатор населённых пунктов и границ (http://atd.openstreetmap.ru)

В кои то веки нашлось немного свободного и времени и решил немного подтянуть валидатор. Что сделано:

  • Населённые пункты типа “станция” приведены к типу станция. Т.е. раньше было name=“станция Вековка”, теперь name=“Вековка”. Это дало +71 совпаших НП.

  • Проверка на Е/Ё временно отключена. Наиболее существенные различия я отследил а остальные требуют времени. Поскольку среди задач эта не относится с числу высокоприоритетных то проверка отложена на будущее. Периодически буду включать и смотреть, не ухудшается ли ситуация, но думаю что ближайшие месяцы тему Е/Ё поднимать не буду. +739 совпавших НП.

  • Добавил новую связь в эталонный справочник. Теперь если НП согласно ОКАТО входит в какой-то район города, то НП ищется в районе а не в городском округе. Поскольку информации по городским районам в ОКТМО нет, а связь ОКАТО/ОКТМО не идеальная то делается это всё в ручном режиме. Пока сделал только по Ульяновску - http://atd.osm.rambler.ru/r3155858.html По остальным городам пройдусь после того как будет загружены свежие ОКАТО/ОКТМО - хочется уменьшить число ошибок согласованности. +2 совпавших НП.

Точки находит, а контуры так и висят в ГО.

Да, про это я забыл. Поправил в ветке, когда смёржусь то должно пролечиться. Сходу исправление не проверить так как нужно полностью перестраивать индексы, это порядка 2 часов, так что проверю завтра на полном прогоне.

Ну и ещё добавил обработку НП в которых прописали admin_level=10 (типа такого - http://www.openstreetmap.org/relation/3416065)), но опять же не проверял, может где-то ещё лимит захардкожен.

Уф, добавил я проверку на двойные имена но разные префиксы - деревня/посёлок. Ещё +378 НП. Алгоритм несколько похож на хак, но теоретически эта ситуация не совсем проста поэтому будем считать что для нормального применения этого достаточно.

В целом он прост - сначала разбираются все НП с уникальным названием, потом с двойными/тройными и т.д. Смотрится на official_status=ru: - этот жуткий костыль который по идее нужно привести к чему-то более логичному. Но тем не менее. Отсутствие official_status=ru: считается * т.е. заменяет собой что угодно, поэтому данный тег должен стоять у всех НП, иначе не распознается ни один. Далее ищутся НП по совпадению не только названия но и типа. Если совпадения нет или больше одного то отбрасываются.

Какие замечены подводные камни? official_status=ru: требуется таким же как и в таблице эталонного справочника. Как вариант - возможно введение синонимов. У меня, например, “посёлок при ж/д станции” и “посёлок при железнодорожной станции” являются синонимами. Если надо - добавлю ещё. Как обрабатывать все эти казармы, будки и т.п. - отдельный вопрос. Я не согласен с тем что в “Будка 758 км” name=“758 км”, будка это не тип НП как например, станция в НП Станция Скуратово.

Я перевыложил отчёт валидатора, завтра постараюсь прогнать его “с нуля”, надеюсь не накосячил нигде :slight_smile:

Если не найдутся более серьёзные задачи или баги то хочу добавить обработку locality. Вообще, если НП настолько сгинул что ничего не осталось, то вопрос - а почему администрация всё ещё его считает за НП? Может как-то попинать их на эту тему? Ведь составляются же градостроительные планы и т.п. Поскольку locality не является НП то выборка по всем locality приведёт к появлению кучи ненужных объектов. Далее, такие фантомные НП периодически чистятся самими администрациями (постоянно вижу законы об упразднении НП), но суть тега ОСМ это не меняет - урочище. Поэтому предлагаю такое паллиативное решение (см. ниже).

Если фактический place=locality (т.е. домов уже нет) числится по бумагам как НП, то чтобы отличать просто locality туда нужно ставить тег oktmo:user. Это будет маркером того что данный объект всё-таки является НП. После того как НП перестанет существовать и в бумагах то просто нужно будет снести oktmo:user а тег place=locality будет и дальше обозначать урочище.

Другие варианты показались мне менее отражающим суть явления.

Какой камень в огород abandoned:place ?

Cтавьте official_status=ru:деревня или что там оно по документам.
У меня такие locality поддерживаются.

oktmo:user - чистый костыль для валидации, в то время, как official_status=ru:деревня более полезные данные.

Это валидиный тег, но он плохо передаёт суть “НП уже нет, в в уставе сельского поселения есть”. Т.е. после того как НП упразднят на бумаге не хочется сносить abandoned:place. Т.е. хочется развести бумажное существование НП и тег обозначающий заброшенный и покинутый НП. Снос “oktmo:user” просто убирает “бумажный” маркер.

oktmo:user + place наиболее красивое решение. Oktmo сейчас уже обрабатывается? Что делать если есть два нп с одним и тем же названием, но разными октмо, как понять какой к какой принадлежит?

Разумно

Но почтовым индексам. Трюк такой: смотрим какой почтовый индекс у ближайших деревень (для которых нет неоднозначности с названием). Затем по почтовому индексу и названию определяем код ОКАТО (в Интернете можно найти, например, http://www.kladr-online.ru/). Затем по минфоновской таблице соответствий ОКАТО-ОКТМО определяем oktmo:user.

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

Стало лучше? Правда я наткнулся на первую пичаль - в ОКТМО 31 НП тогда как в ОКАТО - 28, т.е. часть ж.д. будок отсутствует. Из-за этого связь НП - городской район не идеальна. Придётся делать вручную а при синхронизации с новыми справочниками возможны потери. Но будем следить …

Гораздо, осталось понят, что за излишки образовались.

Попробовал такой алгоритм, вроде сработало. Сегодня выкладывать не буду, посмотрю в завтрашнем отчёте. Проверка на oktmo:user ведётся только если имена совпадают, т.е. “Ново” должно быть как в справочнике с таким кодом ОКТМО так и в ОСМ.

В новом прогоне новых косяков не заметил (за исключением районов-городов Белгородской области, там нужно разбираться), но кое-что заработало:

  • Включена проверка на oktmo:user для НП которые невозможно расклеить из-за одинаковых названий (деревня Ново http://atd.osm.rambler.ru/r1747523.html))

  • Исправил руками справочник по Ленинградской области (убрал Разметелевское сельское поселение), соответственно процент сопоставления приблизился к идеалу - http://atd.osm.rambler.ru/r176095.html

  • Опробовано размещение НП в районах городов - http://atd.osm.rambler.ru/r1760251.html Висящие 3 НП остутствуют в ОКАТО что у меня есть на руках но присутствуют в ОКТМО, поэтому пока оставлю так

  • Частично включена загрузка place=locality если присутствует oktmo:user. Пока это полноценно не работает, так как есть несколько мест где типы place захардкожены, но это задача на пару итераций

  • Ситуация с НП имеющими relation admin_level=10 (http://www.openstreetmap.org/relation/3416065) частично отработана, но какие-то баги ещё есть

А кто объяснит для тупых, кто этот user в oktmo:user и почему вообще такое странное имя тега, почему не более естественное, на мой взгляд, ref:oktmo, к примеру?

oktmo:user как и official_status=ru: это наследие прежнего валидатора (Дежина). Он там использовался для расшивки сложных ситуаций типа одинаковых названий или заковыристых названий. Простановка oktmo:user это костыль который говорит валидатору что код ОКТМО проставлен пользователем намеренно и именно он должен использоваться для сопоставления.

Идея проставлять ОКТМО/ОКАТО/КЛАДР сообществом всегда отвергалась (после какой-то мутной истории с кладроботом на самой заре российского ОСМа), только можно использовать костыли.

Вы неверно поняли причину. Проблема была в том, что эти кода проставляли ботом по примитивному алгоритму, что порождало массу ошибок. В итоге, для того чтобы различать что было поставлено руками от того что проставил бот - и ввели суффикс :user.
Если же никакой простановки кодов ботами изначально не предполагается - то смысла в отдельному суффиксе нет.

а где можно подсмотреть, какой код к какому НП на местности относится? А то есть тут два поселка Клин в одном сельском поселении

Да все эти диванные расставления статусов выглядят подозрительно, т.к. по сути данные не получены из первоисточника. И даже приехав и деревню узнать у жителей какой их ОКТМО выглядит не реальным.