В кои то веки нашлось немного свободного и времени и решил немного подтянуть валидатор. Что сделано:
Населённые пункты типа “станция” приведены к типу станция. Т.е. раньше было 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 км”, будка это не тип НП как например, станция в НП Станция Скуратово.
Я перевыложил отчёт валидатора, завтра постараюсь прогнать его “с нуля”, надеюсь не накосячил нигде
Если не найдутся более серьёзные задачи или баги то хочу добавить обработку locality. Вообще, если НП настолько сгинул что ничего не осталось, то вопрос - а почему администрация всё ещё его считает за НП? Может как-то попинать их на эту тему? Ведь составляются же градостроительные планы и т.п. Поскольку locality не является НП то выборка по всем locality приведёт к появлению кучи ненужных объектов. Далее, такие фантомные НП периодически чистятся самими администрациями (постоянно вижу законы об упразднении НП), но суть тега ОСМ это не меняет - урочище. Поэтому предлагаю такое паллиативное решение (см. ниже).
Если фактический place=locality (т.е. домов уже нет) числится по бумагам как НП, то чтобы отличать просто locality туда нужно ставить тег oktmo:user. Это будет маркером того что данный объект всё-таки является НП. После того как НП перестанет существовать и в бумагах то просто нужно будет снести oktmo:user а тег place=locality будет и дальше обозначать урочище.
Другие варианты показались мне менее отражающим суть явления.
Это валидиный тег, но он плохо передаёт суть “НП уже нет, в в уставе сельского поселения есть”. Т.е. после того как НП упразднят на бумаге не хочется сносить abandoned:place. Т.е. хочется развести бумажное существование НП и тег обозначающий заброшенный и покинутый НП. Снос “oktmo:user” просто убирает “бумажный” маркер.
oktmo:user + place наиболее красивое решение. Oktmo сейчас уже обрабатывается? Что делать если есть два нп с одним и тем же названием, но разными октмо, как понять какой к какой принадлежит?
Но почтовым индексам. Трюк такой: смотрим какой почтовый индекс у ближайших деревень (для которых нет неоднозначности с названием). Затем по почтовому индексу и названию определяем код ОКАТО (в Интернете можно найти, например, http://www.kladr-online.ru/). Затем по минфоновской таблице соответствий ОКАТО-ОКТМО определяем oktmo:user.
Свежий прогон валидатора выложил. Поскольку у меня будет какое-то время сегодня то я ещё поиграюсь с отчётом и буду перезаписывать его, цфиры будут меняться - не пугайтесь.
Стало лучше? Правда я наткнулся на первую пичаль - в ОКТМО 31 НП тогда как в ОКАТО - 28, т.е. часть ж.д. будок отсутствует. Из-за этого связь НП - городской район не идеальна. Придётся делать вручную а при синхронизации с новыми справочниками возможны потери. Но будем следить …
Попробовал такой алгоритм, вроде сработало. Сегодня выкладывать не буду, посмотрю в завтрашнем отчёте. Проверка на oktmo:user ведётся только если имена совпадают, т.е. “Ново” должно быть как в справочнике с таким кодом ОКТМО так и в ОСМ.
Исправил руками справочник по Ленинградской области (убрал Разметелевское сельское поселение), соответственно процент сопоставления приблизился к идеалу - http://atd.osm.rambler.ru/r176095.html
Опробовано размещение НП в районах городов - http://atd.osm.rambler.ru/r1760251.html Висящие 3 НП остутствуют в ОКАТО что у меня есть на руках но присутствуют в ОКТМО, поэтому пока оставлю так
Частично включена загрузка place=locality если присутствует oktmo:user. Пока это полноценно не работает, так как есть несколько мест где типы place захардкожены, но это задача на пару итераций
А кто объяснит для тупых, кто этот user в oktmo:user и почему вообще такое странное имя тега, почему не более естественное, на мой взгляд, ref:oktmo, к примеру?
oktmo:user как и official_status=ru: это наследие прежнего валидатора (Дежина). Он там использовался для расшивки сложных ситуаций типа одинаковых названий или заковыристых названий. Простановка oktmo:user это костыль который говорит валидатору что код ОКТМО проставлен пользователем намеренно и именно он должен использоваться для сопоставления.
Идея проставлять ОКТМО/ОКАТО/КЛАДР сообществом всегда отвергалась (после какой-то мутной истории с кладроботом на самой заре российского ОСМа), только можно использовать костыли.
Вы неверно поняли причину. Проблема была в том, что эти кода проставляли ботом по примитивному алгоритму, что порождало массу ошибок. В итоге, для того чтобы различать что было поставлено руками от того что проставил бот - и ввели суффикс :user.
Если же никакой простановки кодов ботами изначально не предполагается - то смысла в отдельному суффиксе нет.
Да все эти диванные расставления статусов выглядят подозрительно, т.к. по сути данные не получены из первоисточника. И даже приехав и деревню узнать у жителей какой их ОКТМО выглядит не реальным.