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

Построение иерархии в ОСМ
Собственно простая и понятная работа. Идёт по списку линий с admin_level = N и находит к кому эта линия относится.

admin_level=2 - Россия. С этого начинаем. admin_level=3 - федеральные округа. Смотрим, входит в Россию или нет. Если часть входит в состав России а часть нет - идёт уровнем выше. И так далее. Если всё нормально, то объект попадает в верхний admin_level, если границы пересекаются и часть внутри а часть снаружи то поднимаются admin_level выше.

И вот тут я должен написать про ограничение. Нет проверки, а есть ли пересечение с линиями того же уровня. Да, я проверяю, есть ли пересечение района с регионом. Но пересечение районов с районами не проверяется.

Такая проверка была в первой версии. Но время работы валидатора сильно увеличивалось. Я сделал вторую версию, чтобы запускать валидатор в скоростном режиме и полном. Но в третьей версии проверки ушли. Я перешёл на ежедневный прогон, а ошибок в ОСМ было так много, что ценность отловли этих ошибок была мала.

А сейчас качество в ОСМ гораздо лучше чем было 12 лет назад, да и работа в PostGIS не столь трудна.

1 Like

Сравниваем с ОКТМО
Собственно самая вкусная проверка. Я сопоставляю данные входящие в состав региона или района в ОСМ и в ОКТМО. Тут сложный алгоритм, но пишется легко.

Сначала сравниваем имена. Смотрим, а одно ли имя? Если совпали и имя одно - в таблице АТД прописваем объект ОСМ.

Далее мы смотрим name2, alt_name, oktmo:user и т.д. Если несколько назаваний то смотри official_status, oktmo:user и т.п. В общем пытаемся найти код ОКТМО всеми способами.

Я запускал валидатор с буквой Ё. Но оказалось довольно сложной проверкой. Как правильно, Е или Ё. В конце концов выкинул эти проверки.

В конце концов таблица АТД имеет как код ОКТМО так код ОСМ.

1 Like

Создание отчёта
Это самая простая работа. Идём по уровню в ОСМ и смотрим как названия ОКТМО так и то что найдено в ОСМ. Если зелёная строка то объект есть в ОСМ и в ОКТМО, красная строка если найден в ОСМ но либо название не то, либо “вылетел” за границу. Серый - если есть в ОКТМО но не смог найти в ОСМ.

Дополнительные отчёты
Это простые отчёты. Группирует разного рода ошибки. Может содержать один объект в разных отчётах.

Вот собственно и всё. Надеюсь что вы поняли, что валидатор простой. Его недолго заново написать. Только я до сих пор не изучил PostGIS, поэтому не могу переписать валидатор.

А вот то что ОКТМО меняется 12 раз в году, при этом часто содержит ошибки - это неизбежно и постоянно требует время.

Ах да. Ещё важный момент. В момент импорта отбрасываются объекты у которых addr:country и т.п. не содержат RU.

Но вот зараза, в pbf файл включена обрезка, при этом объект либо не имеет страны, либо релэйшен битый. Можно автоматически выбрасывать из валидатора, но я предпочитаю делать это вдумчиво. А вдруг это Россия, но кто-то сдвинул объект случайно. Сейчас наверное это не нужно, но лет 10 это было иногда полезно. Граница России тогда двигалась!

Есть ещё один случай. У нас был релэйшен города. Но кто-то удалил вэй. Релэйшен не принадлежит никакой стране. Его выбрасывать? Поэтому все спорные случаи я не обрабатываю автоматически а предпочитаю рассмотреть глазами.

Валидатор нет смысла запускать пока не решён вопрос с Крымом. Если что, мне чтобы всё восстановить нужно пол-час работы.

Но по хорошему это нужно решать в DWG. Что-нибудь ответили в DWG? Всё таки изменения Mazda05 были сделаны 6 дней назад, какое-нибудь решение по поводу отрисовки должно быть принято.

Если что, Mazda05 сделал с одной стороны разумную вещь а с другой стороны неразумную. Или откатывать его изменения полностью или частично.

К сожалению отправил только 27 мая в 8:12 МСК (5:12 UTC), пока ответа не было (прошло менее 48 часов). До этого жаловался через профиль на сайте, но видимо сообщение не было зарегистрировано, отправил на почту, номер тикета пришёл через 2 минуты.

По поводу названий не согласен, так как:

  1. Названия, которые поменяли только на бумаге (например, в Крыму Советский район → Ічкінський район, Кировский район → Іслямтерецький район, Ленинский район → Єдикуйський район, Красногвардейский район → Курманський район). Разумеется, все документы по ценности примерно соответствуют бумаге, на которой они написаны (так как фактически на земле остаются те же самые названия, так как приоритет должен быть у российских названий).
    Кстати в новых регионах России (прежде всего ЛНР и ДНР) та же самая проблема с топонимами: за последние 11 лет выпускали бумажки с переименованием улиц и других названий, которые не значат примерно ничего, зато вполне возможно попали в OSM. Даже на тех российских территориях, которые пока ещё контролируются украинскими властями, любые переименования со временем могут быть возвращены обратно. Но это уже вопросы политики, а не картографии, я сторонник правила Truth on the Ground.

  2. Все названия в теге name=* должны быть на русском языке (как и почти все остальные имена собственные в Крыму и Севастополе). Жаль что пока что к остальным территориям это не относится, но ничего, это ещё вопрос времени.

  3. В отношение Республика Крым (3795586) не добавлены новые участники, хотя старые исключены. Разумеется, это было сделано намеренно и эти правки не соответствует действующему законодательству (так как подобных изменений не было).

  4. Куча ошибок типа отсутствующих тегов old_name (как и с переименованием улиц по всей украинской территории), адресных тегов (addr:country, is_in:country, is_in:country_code), которые нарушают соглашение по Крыму. Разумеется, все эти действия без обсуждения с российским сообществом. Пока не проверял все правки по Крыму, но чувствую там тоже могут быть ошибки.

И самое главное — если не остановить сейчас, потом такие правки будут повторяться.
@fserges, спасибо за валидатор, у меня тоже есть по названиям улиц, когда-нибудь буду актуализировать и возвращённые территории.

Да, я это тоже заметил. Поэтому это вопрос DWG, иначе будет война правок.

1 Like

Есть ли ответы от DWG?

Делать то делов, нужно просто ИЛИ откатить ИЛИ аккуратно исправить.

Вариант с откатом я опущу, это просто делать. Расскажу что нужно аккуратно исправить. В качестве примера возьму Первомайский район (RU) и Курманский район (UA). Я не разбираюсь в АТД Украины. Возможно, они имеют другие границы и поэтому нужно делать admin_level=6 версий для RU и UA. То есть Mazda05 делал разумное изменение, только сделал кое-как.

  1. Тогда Курманский район (UA) просто сохраняем. Это схема для UA.
  2. Первомайский район (RU). Он испорчен. Надо ставить admin_level=6, is_in:county=RU, wikipedia=ru:Первомайский район и убить поля koatuu и is_in:county_code (мы не используем этого кода). Будет схема для RU.

И так правим 14 районов.

Вот и всё!

Да, забанили аж на 0 часов (предупреждение).

И что в итоге? Ну получил он бан (предупреждение) на 0 часов, время вышло. Будут какие либо шаги или самим нужно править?

Если они будут править, то будем ждать. Если не будут править, то кто будет править? Я могу, но я всё же не хотел бы этого делать. Я занимаюсь городами и селами.

До сих пор не вижу изменений в Крыму. Как изменилось 10 дней назад так и есть.

Поменяй сам, пожалуйста. Я смогу вечером после 20:00 МСК (если не получится у тебя), и так долго тянем и неправильные сведения до сих пор висят.

Я тоже смогу сегодня после 20:00 :slight_smile: Раньше не получится.

Всё, у меня появилось время. Никто ничего не сделал а жить то нужно.

Вот только не хотелось бы получить бан на месяц. Вроде я буду стараться, делать всё по уму. А раз - и бан на месяц.

Собрался я вносить изменения, изменил первый стандарт и … я не готов к сохранению данных. Я просмотрел все границы и в них много бардака внесено последним автором. Он половину сделал одним способом а половину другим.

Часть данных он скопировал, соответственно я изменил бы оригинал и оставил копию. Но он так сделал лишь только часть! То ли нужно дублировать кучу данных под UA, то ли откатывать его изменения. Выглядел бы наполовину сторонник RU а на половину UA.

Но если я буду работать очень аккуратно, то вопрос - а стоит ли? Шансы на то что Крым будет возвращен UA считаю очень низкими, а работа над современным АТД требует немало сил, причём включая как официальные документы России так и Украины.

Реально проще откатить правки. Если нужно что-то делать с UA - пожалуйста добавляте. Но надо работать аккуратнее а не так как тяп-ляп сделали.

Изменений в Крыму в лучшую сторону по-прежнему нет. Прошло 14 дней с момента изменений. Сделал прогон валидатора, поскольку нужно отслеживать изменения на территории РФ.

Однако в Крыму картина стала ещё хуже. Если раньше были затронуты только районы, то теперь затронуты и городские округа. Вот комментарий к плохим изменениям: "Changing admin_level to avoid overlap of the same admin_level=6 boundaries ". Зачем то правильный admin_level=6 сделали admin_level=8.

Эти изменения валидны для UA, для RU - нет.

Не вижу смысла в прогоне валидатора. Пока приостанавливаю работу над валидатором, пока не начнётся работа по восстановлению Крыма.

Разве вот так неправильно?
Россия Крым Relation: ‪Republic of Crimea‬ (‪3795586‬) | OpenStreetMap

60189 Россия
3795586 Республика Крым admin_level4 RU
3788485 Севастополь admin_level4 RU
3826844 городской округ Алушта admin_level8 RU
3826845 городской округ Армянск admin_level8 RU
3826847 городской округ Джанкой admin_level8 RU
3826848 городской округ Евпатория admin_level8 RU
3826851 городской округ Керчь admin_level8 RU
3826854 городской округ Красноперекопск admin_level8 RU
3826856 городской округ Саки admin_level8 RU
3826860 городской округ Симферополь admin_level8 RU
3826864 городской округ Судак admin_level8 RU
3826882 городской округ Феодосия admin_level8 RU
3826900 городской округ Ялта admin_level8 RU

1574582 Бахчисарайский район admin_level6
1590251 Черноморский район admin_level6
1754552 Белогорский район admin_level6
1754553 Джанкойский район admin_level6
1754554 Красногвардейский район admin_level6
1754555 Красноперекопский район admin_level6
1754556 Кировский район admin_level6
1754557 Ленинский район admin_level6
1754558 Нижнегорский район admin_level6
1754559 Первомайский район admin_level6
1754560 Раздольненский район admin_level6
1754561 Сакский район admin_level6
1754562 Советский район admin_level6
1754564 Симферопольский район admin_level6

Это хорошо, что есть правильная subarea Крыма. Но для валидатора неправильные данные.

Пример. городской округ Джанкой. Было admin_level=6 (правильно) а стало admin_level=8. По правилам объекты 8-го уровня это городские поселения а не округа. Это внутренняя структура района. Он по определению законодательства РФ всегда входит в состав района. А городские округа объекты того же уровня что и районы. Они входят в регион непосредственно.

Джанкойский район. Мало того что addr:country=UA и is_in:country=Ukraine, так ещё и boundary=historic. Валидатор не проверяет историю.