RU:Ошибки границ
Всё написанное относится только к территории Российской Федерации.
Прежде всего обратите внимание, что ошибка в валидаторе — не обязательно ошибка на карте. В этот статье рассматриваются только ошибки по всеобъемлющему валидатору ОКТМО. Были использованы личный опыт, архив темы на форуме и справка валидатора. Построены разделы одинаково: возможные источники проблем — иллюстрации для них — пути решения.
Как всё должно быть
Прежде чем решать ошибки, нужно твёрдо запомнить, как всё должно быть нарисовано в идеале.
Матрёшка
Наша страна состоит из почти сотни регионов (большей частью, областей), каждый из которых делится на пару десятков районов и городских округов (ЗАТО — тоже городские округа), каждый из которых делится на десяток сельских и городских поселений. В каждом поселении находится пара десятков населённых пунктов, преимущественно деревень. Крупные города (точнее, городские округа) могут состоять из нескольких административных районов, а в Москве и Санкт-Петербурге те делятся ещё и на подрайоны. Кроме того, в городах есть (официальные или не очень) именованные территории, не совпадающие с районами: следствие включения в городскую черту окрестных деревень.
Административное деление и города существуют параллельно: так, городская черта может не совпадать с границей городского округа, а «именованные территории» плохо соотносятся с административными районами города.
Теги
Административные границы
Административные границы рисуются правильными мультиполигонами type=boundary, boundary=administrative (известными также под термином "отношения") границ. В каждом отношении должны быть только линии с ролями outer и inner, образующие целое количество замкнутых контуров, и точки с ролями admin_centre (административный центр) и label (место, где писать название административной единицы). Кроме того, можно включить отношения административных единиц низшего уровня, входящих в рисуемую, с ролью subarea.
У отношения также должен быть проставлены тег admin_level=* со значением, соответствующим уровню административной границы, и тег name=название административной единицы. Статус («муниципальный район», «область») может быть записан в тег official_status=*.
На линии границ, входящих в отношения границ и не являющимися самостоятельными объектами (реками, дорогами и т.п.), принято ставить теги boundary=administrative и admin_level=n, где n — минимальное значение admin_level от всех отношений, содержащий эту линию.
Населённые пункты
Для населённого пункта обязательно наличие точки place=* с названием name=*. Также при возможности стоит нарисовать границу пункта замкнутой линией или правильным мультиполигоном с теми же тегами и теми же значениями. Тег place_name вместо name уже не стоит использовать: когда-то это быль «костыль» для рендереров, чтобы название не рисовалось дважды, но сейчас проблему исправили. Чтобы в навигаторе Garmin работал поиск по улицам населённого пункта, желательно на контур также поставить теги addr:country=RU, addr:region=название области и addr:district=название района. Для точки же желательно узнать и проставить количество жителей в population=* (в некоторых приложениях от него зависит стиль надписи).
Территории внутри населённых пунктов обозначаются тегом place=suburb. Контур для них не обязателен и часто не рисуется.
Топология
- Никакие границы не должны пересекаться.
- Если внутри района находится городской округ, то все линии границы округа с ролями outer должны входить в границу этого района с ролями inner (следствие предыдущего).
- Мультиполигоны границ не должны содержать соприкасающиеся замкнутые контуры.
- Административная граница с admin_level=n может содержать внутри себя только границы с admin_level=m, где m строго больше n.
- Внутри границы населённого пункта могут находится точки place только со значением suburb (и точка самого пункта, разумеется).
- Административные районы города находятся внутри административной границы городского округа, а не внутри населённого пункта (следствие параллельности существования).
Источники
Границы МР и ГО (admin_level=6), а также городских и сельских поселений в составе МР (admin_level=8), устанавливаются областным законом. Там же, как правило перечислены населенные пункты входящие в состав муниципального образования (отсюда). При этом часто границы описаны в формате «от ручья десять шагов на север, далее по условной линии триста метров до одинокой берёзы», что абсолютно для нас бесполезно. Поэтому единственный заслуживающий доверия глобальный источник границ МР и ГО — WMS публичной кадастровой карты, при этом только в областях, которые прислали кадастровые планы (список).
Сельские и городские поселения тоже можно срисовывать с кадастра, но есть одна хитрость. Дело в том, что границ поселений в кадастре нет, только границы кадастровых кварталов. Другое дело, что кварталы входят в поселения целиком, поэтому нужно определить, что чему принадлежит. Для этого нужно найти хотя бы примерные схемы поселений (часто они есть в википедии или по ссылкам из неё).
Иногда (как в Воронежской области) можно найти государственную ГИС с границами. Если её не подключить как WMS, можно срисовывать со скриншотов. При этом стоит подключить и привязать спутниковые снимки: границы кварталов обычно очень легко читаются на местности: как канавы или по-разному засеянные поля.
Границы населённых пунктов почти всегда есть в генеральном плане или схеме территориального планирования (поискать её можно, например, в этой таблице).
Рутина
При исправлении ошибок используется несколько методик, применение которых хоть и зависит от сути ошибки, но в целом остаётся одинаковым. Со временем эти действия станут почти автоматическими.
Преобразование в мультиполигон
Если от полигона требуется какая-то его часть, то его нужно сделать мультиполигоном. При этом все теги нужно будет переместить с линии на отношение мультиполигона, чтобы не было коллизий. Разумеется, теги, касающиеся границы полигона как линейного объекта, можно оставить.
Порядок действий такой: выделить линию границы, Ctrl+C, «инструменты -> создать мультиполигон» (рекомендуется вынести кнопку на панель), удалить лишние теги с линии, правую кнопку мыши на отношении под списком тегов, «выбрать отношение» (или даблклик на этом отношении в панели отношений), Ctrl+Shift+V для вставки тегов, удалить лишние теги с отношения.
Граница населённого пункта
Очень часто на границу НП ставят теги boundary=administrative, admin_level=*. Более того, автор встречал даже type=boundary и boundary_type=city. Все эти теги нужно безжалостно удалять с деревень и посёлков. Однако может быть случай, когда граница населённого пункта и административная граница совпадают. Тогда порядок действий один: превратить границу населённого пункта в мультиполигон, удалить с линии только вышеперечисленные теги, у мультиполигона оставить теги boundary, admin_level, name и поменять значение type на boundary. Таким образом, граница населённого пункта и административная граница представляются разными объектами, и позволяют независимую обработку.
Замыкание границы
Действия новичков почти всегда приводят к слому границы. Это может быть совершенная глупость, вроде разъединения линий без подгрузки отношений на них, в результате чего исчезает часть границы. А может быть кропотливая работа по созданию новых замкнутых полигонов и замыканию старых, от чего линии в отношении внезапно превращаются в замкнутые многоугольники.
В зависимости от размера границы потребуется терпение. Нужно загрузить всех участников отношения границы, выделить их, загрузить остальные отношения, в которых они участвуют. Восстанавливать, скорее всего, потребуется не одно, а сразу несколько отношений: например, административную границу и мультиполигон place. Порядок действия один и тот же:
- открыть редактор отношения, нажать кнопку сортировки;
- найти и приблизить разрыв;
- выделить всех участников отношения и определить на глаз, как должна идти граница;
- если не хватает уже нарисованной линии, добавить эту линию;
- если не хватает части нарисованной линии, загрузить отношения, содержащие эту линию, затем разбить её в нужных точках и добавить в отношение границы;
- если не хватает стороны существующего полигона, загрузить отношения с этим полигоном, создать из полигона мультиполигон и переместить на него все теги с полигона, добавить нужную часть в отношение границы;
- если линий для дополнения границы нет, проверить WMS кадастра: возможно, эти линии можно нарисовать;
- если нет даже предположения о правильной конфигурации, написать сообщение автору правки, сломавшей границы, и, если таковой есть, «хранителю» района, где произошла ошибка;
- в редакторе отношения отсортировать линии и перейти к следующему разрыву.
Со временем все приграничные полигоны превратятся в мультиполигоны, а сломанные отношения починятся.
S-GNS: Импорт GNS
Координаты населённого пункта совпадают с координатами любого НП в базе GNS. Чаще всего это означает, что точка скопирована из базы как есть и стоит в паре сотен метров от правильного положения.
- Проверить, что пункт существует. Проверить, что его название верно. Найти населённый пункт на спутниковом снимке или в других разрешённых к использованию источниках и переместить точку в его центр. Центр чаще всего определяется через центральную площадь, здание администрации или почтовое отделение — хотя геометрический центр тоже допустимый вариант.
S-LAT-MIX: Смесь латиницы и кириллицы
Среди букв названия населённого пункта (name=* или place_name=*) затесалась латинская, маскирующаяся под русскую. Например, «Торжоk» вместо «Торжок». Встречается в данных GNS, откуда и проникает на карту. Часто является причиной S-WITHIN, когда названия на точке и на контуре не совпадают.
- Найти и уничтожить: выучить название и перенабрать от руки, либо скопипастить с валидатора. Проверить, что названия на точке и контуре (если есть) совпадают.
Название населённого пункта написано на национальном языке, включающем латинские буквы.
- Во-первых, «полагается на территории РФ писать в name название на русском языке. А национальные названия - уже в собственные языковые теги» (liosha). Во-вторых, часто это не латинские буквы, а кириллические.
S-STATUS: Странный статус
Значение place для населённого пункта абсолютно не соответствует его официальному статусу. Чаще всего это hamlet для посёлков городского типа и городов (возникает от массового импорта GNS), либо city для деревень.
- Проверить статус и административный уровень в валидаторе, проверить население в википедии. Поставить правильное значение для place, руководствуясь таблицей. Если есть связанный объект (контур для точки и наоборот), убедиться, что значения place на них совпадают.
S-WITHIN: Вложенные НП
Несколько вариантов. Первый: названия населённого пункта на точке и контуре различаются. Чаще всего из-за опечатки, но бывает, что они совершенно разные (результат копипасты).
- Определить верное название пункта, поправить теги name и place_name на точке и контуре, чтобы они совпадали. Заодно проверить равенство значений тега place.
Контуры place для нескольких деревень объединены в один: кто-то решил, что это как residential, главное — чтобы закрашивалось.
- Разбить контур на несколько, по одному для каждого населённого пункта. Скопировать названия и значения place с точек на соответствующие контуры.
Деревня внутри городской черты.
- Определить реальный статус деревни, через валидатор и википедию. Может быть три варианта:
- это район города, когда-то бывший деревней, но поглощённый городом (или не бывший) — поставить place=suburb, не забыть про контур;
- это деревня, на которую случайно наехал контур города, нарисованный на глаз — подвинуть точку деревни и/или точки линии place города (сверяясь по спутниковым снимкам), чтобы исключить одно из другого;
- это деревня в городском округе, но не в городе — сверяясь по спутниковому снимку, подвинуть точку деревни и/или линию place города. Убедиться, что на линии place не висит отношения boundary=administrative, и если висит, то разъединить сущности: создать отношение мультиполигона, перевесить все теги с линии на него, провести границу мультиполигона так, чтобы не включить деревню. Отношение boundary оставить на своём месте (можно проверить по WMS кадастра).
S-OVERLAP: Пересечение НП
Более общий случай вложенных НП: нарисованы границы обоих населённых пунктов, и они пересекаются. Такое бывает в двух случаях. Иногда это просто рисование на глаз и случайный заскок точек.
- Сверяясь со спутниковой фотографией, расцепить границы. Возможно, сделать их соприкасающимися (хотя при рисовании на глаз в этом нет практического смысла). Прочитать комментарии на линиях, постараться определить источник границ: возможно, они соприкасаются на практике (граничный знак одного населённого пункта совмещён с граничным знаком другого).
Часто некая деревня находится рядом с городом, и её нарисованный на глаз периметр касается срисованной с генплана достаточно точной городской границы.
- Проверить по валидатору и википедии, находится ли деревня за пределами города и городского округа. Действовать так же, как при решении аналогичного S-WITHIN, только дополнительно двигая линию границы. Постараться не изменять границу большего населённого пункта. Возможно, потребуется превратить обе границы в мультиполигоны.
SB-OVERLAP: Пересечение границы и НП
Чаще всего, граница деревни или посёлка, нарисованная на глаз, пересекла административную границу, нарисованную по неточному кадастру или срисованную с бумаги.
- Добавить точек линии административной границы, либо минимально сдвинуть существующие, чтобы граница огибала населённый пункт.
Или наоборот, административная граница нарисована достаточно точно (это можно понять по тегам и проверке кадастра), а маппер, рисовавший границу населённого пункта, захватил лишнего.
- Сжать границу населённого пункта, чтобы она вписывалась в административную единицу. Проверить спутниковый снимок: если видно, что пункт стоит прямо совсем на краю, превратить его границу в мультиполигон и приклеить к административной границе.
Иногда у города мультиполигон place выходит за пределы отношения границы: например, включает некий анклав.
- Нужно проверить правильность границы городского округа (например, по кадастру) и в зависимости от решения либо расширить её, либо обрезать границу населённого пункта, чтобы она вписывалась в административную границу.
Бывает, что граница города рисовалась на глаз безотносительно административной границы его же городского округа, и хотя почти везде первая не вылезает за вторую, нашлась пара точек, где пригород касается административной границы, и городская черта, нарисованная с допуском, вылезла за неё.
- Создать мультиполигон, перенести на него теги с линии городской черты, добавить в него части отношения административной границы, напоминающие старую границу города. Удалить старую границу.
B-OVERLAP: Пересечение границ
Обычное пересечение границ: какая-то часть выходит за часть другой границы.
- Проверить источники: возможно, какая-то из границ нарисована неточно, и её можно исправить, уточнив. Возможно, одна из административных границ не является таковой: проверить по валидатору и википедии. Если, как в случае на иллюстрации, одна граница нарисована на глаз, подвинуть её минимально, чтобы устранить пересечение. Иначе можно склеить границы в месте пересечения, уменьшив ту, в корректности которой больше сомнений.
B-CAP-NS: Центр — не населённый пункт
В роли admin_centre отношения границы добавлена не точка place=*, а какой-то другой объект.
- Определить, что является центром административной единицы, обозначаемой отношением. Найти точку центра и добавить в роли admin_centre в отношение. Убрать неправильного участника отношения.
B-BAD-LEVEL: Неверный уровень границы
Внутри границы с admin_level=n находится другая граница со значением *, большим или равным n. Частый случай — городской округ находится внутри муниципального района.
- Проверить по валидатору и википедии, что населённый пункт с admin_level=6 действительно является городом областного подчинения. Загрузить оба отношения. Если граница городского округа сделана линией, создать для неё новое отношение, перенеся часть тегов. Выделить все линии внутреннего отношения с ролью outer, добавить их во внешнее с ролями inner.
Другой источник таких ошибок — отметка границ населённых пунктов как boundary=administrative.
- Загрузить линии границ населённых пунктов, отмеченных как административные границы. Добавить слой WMS кадастра и проверить, нарисованы ли границы по нему. Если какие-то признаки указывают, что граница сделана не на глаз, оставить boundary=administrative (это неправильно, но избавляет от лишних вопросов), иначе удалить тег boundary. Также в любом случае удалить тег admin_level.
S-TOPO и B-TOPO: Топологическая ошибка
Это ошибка в наборе линий, составляющих контур границы: неправильно составлен мультиполигон. Первая буква обозначает тип границы: населённого пункта или административная. Одна из причин — соприкасающиеся замкнутые контуры.
- Преобразовать каждый контур в мультиполигон, разъединить по общим граням. Убрать из отношения границы перемычки, чтобы граница шла только по внешним контурам.
Также топологической ошибкой является самопересечение. Бывает, что кто-то случайно подвинул узел и не заметил.
- Вернуть узел на предполагаемое место, руководствуясь кадастром, спутниковыми снимками и здравым смыслом. Проверить, не требуется ли соединение или разъединение линий, удаление лишних узлов: не вводятся ли дополнительные ошибки исправлением старой.
(будет дополняться)
Также по теме смотрите карту топологических ошибок на ГИС-лабе.
B-EQUALS: Границы совпадают
Это самая сложнопонимаемая ошибка. Она означает, что отношения границ сломаны, и при попытке их автоматически привести в нормальный получилось так, что один и тот же контур стал внешним для нескольких административных единиц. Один из случаев, когда такое случается: кто-то сделал замкнутый полигон из линии, принадлежащей границам двух соседних районов.
- Скачать отношения для полигона, превратить его в мультиполигон, исключить ненужные его части из отношений границ.
Другая причина, как явно написано в справке самого валидатора: не собирается одно из колец границы.
- Скачать все отношения границ под вопросом, найти разрывы, собрать кольца.
(будет дополняться)
Граница не распознаётся
Отношение границы не замкнуто, либо граница содержит топологические ошибки (обычно, самопересечения).
- В редакторе отношения JOSM отсортируйте участников и убедитесь, что все кольца замкнуты. Внимательно просмотрите отношение на предмет самопересечений и двойных линий (по типу плоского Z: если в ряду есть точки 1 2 3 4, то линия может идти 1,2,3,2,4, например). Может помочь гис-лабовская карта топологических ошибок.
Граница нарисована одной замкнутой линией, и на ней нет тега area=yes.
- Лучше всего, конечно, взять и на будущее превратить линию в мультиполигон. Но можно просто добавить тег area.
Значение тегов boundary или admin_level написаны неправильно, либо содержат лишние символы (например, пробелы).
- Проверить значения побуквенно. Возможно, перенабрать. Убедиться, что admin_level=3…9.
Граница отображается красным выше уровнем
Если в списке границ уровня N перечислено несколько границ уровня N+2 и выше — значит, какая-то граница уровня N сломалась. Первым делом нужно найти, какой административной единице принадлежат «сбежавшие» границы: например, из какого района «посыпались» поселения.
Вариант 1: отношение границы под вопросом сломано. Обычно на её странице выведена одна или несколько релевантных ошибок.
- Исправить ошибки, руководствуясь соответствующими разделами этой страницы.
(будет продолжено)
Граница отображается красным
Название содержит опечатки или имеет неправильный формат («Морозовское СП»). Встречается даже на вид правильное «сельское поселение», но с латинской буквой «c», например.
- Убедиться, что в списке валидатора название правильнее (по википедии, региональным приказам). Переименовать отношение границы: убрать статусную часть, либо раскрыть сокращения («Морозовское сельское поселение»).
Название в списке валидаторе неправильно, либо содержит излишние элементы («Город Псков»).
- Убедиться в правильности написания названия у отношения границы. Добавить отношению тег oktmo:user с кодом ОКТМО из валидатора.
Административная единица отсутствует в списке валидатора, но существует на деле.
- Данные валидатора устарели по некоторыми областям. При правке всегда нужно сверяться с актуальными законами и постановлениями. Это нормально, оставьте границу как есть. Можно попросить на форуме, чтобы список дополнили или изменили.
Административная единица принадлежит другому региону или району.
- Проверить факты по допустимым источникам. Загрузить все задействованные отношения, проверить их корректность. Провести линии границ как описано в кадастре и соответствующих постановлениях.
Обозначенная как административная, граница на самом деле является границей населённого пункта.
- Проверить, входит ли населённый пункт в одноимённую административную единицу (например, городской округ). Если да, то сделать отношение границы с нужными тегами (при наличии данных). Убрать с линии границы теги boundary, admin_level и boundary_type. Однако если проверка по WMS кадастра показывает точность границ, тег boundary можно оставить. Если граница сделана как отношение, убедиться, что тег type равен multipolygon, а не boundary.
Населённый пункт не распознаётся
Хутор или заброшенная деревня обозначены правильно, place=isolated_dwelling/locality.
- Поставьте на точку тег okato:user с правильным кодом ОКАТО, либо значением any, если его лень искать.
Населённому пункту проставлен код ОКАТО в okato:user, но он находится не в своей административной единице.
- Проверьте правильность кода ОКАТО на точке. Проверьте по спутниковым снимкам расположение населённого пункта. Проверьте по доступным источникам (законам, постановлениям), как проходит административная граница рядом с этим пунктом. Подвиньте точку (с контуром) или линии административной границы.
Населённый пункт отображается красным
Название написано с ошибкой (например, с сокращением), либо название в списках валидатора содержит ошибку.
- Найти в списках валидатора или в других источниках правильное похожее название, убедиться, что речь об одном и том же населённом пункте. Переименовать точку и границу, если есть. Если неправ валидатор (например, пункт переименовали) — добавить точке тег alt_name с названием из валидатора.
Как населённый пункт указано садоводство или урочище.
- Заменить тег place или его значение на правильное: place=allotments, landuse=allotments либо place=allotments + landuse=allotments для садоводств, place=locality для урочища.
Населённый пункт отсутствует в списках.
- Найти более свежий список населённых пунктов нужного района или поселения. Проверить название по википедии и поисковым системам. Спросить у автора точки населённого пункта про источник данных. Если это опустевшая деревня, поставить ей place=locality. Только после всех возможных проверок и вопросов можно удалять точку и границу населённого пункта.
Не указано название населённого пункта.
- Спросить у автора, что он имел в виду. Убедиться по спутниковым снимкам, что населённый пункт существует. Узнать по разрешённым источникам его название и переименовать точку и/или линию.
Населённый пункт отображается жёлтым
Есть два населённых пункта в разных поселениях одного района, но границы поселений не нарисованы.
- Поставить точкам населённых пунктов теги okato:user с правильными значениями ОКАТО. При наличии разрешённого источника — нарисовать границы поселений.
В районе (поселении) по списку один населённый пункт с таким названием, а на карте их два.
- Найти полные актуальные списки населённых пунктов в районе. Проверить по википедии. Если населённый пункт действительно только один, удалить точку (и, возможно, линию) неправильного пункта. Иначе поставить пункту, присутствующему в списке валидатора, код ОКАТО в okato:user.
В районе (поселении) не нарисован населённый пункт, но в другом районе (поселении) есть пункт ровно с таким же названием, но отсутствующий в списке.
- Проверить местоположение пункта-претендента. Возможно, он находится в сотнях метров от административной границы нужного района (поселения), и просто неправильно поставлен. Если он находится далеко от границы — действовать, как если бы тот был обозначен красным цветом.
В пределах административной единицы есть два населённых пункта с одинаковым названием, но разными статусами (село и деревня). Либо даже статусы одинаковые (такое бывает при объединении поселений).
- Либо включить статусные части в названия, если они различаются (на точках и границах, если есть), либо расставить коды ОКАТО в okato:user.
Отношение границы населённого пункта не замкнуто, и валидатор не может определить принадлежность точки place своей границе.
- Починить отношение границы.
Улица не распознаётся
Улица пересекает границу населённого пункта.
- «Сейчас опознаются только улицы, целиком лежащие внутри полигона place=*. Чтобы они начали опознаваться, нужно разделить их по границе полигона» (Miroff).
Улица отображается красным
Название улицы очевидно неправильно.
- Проверить, не является ли линия с неправильным названием продолжением «правильной» улицы. В зависимости от этого либо переименовать линию, либо удалить тег name (при этом в городе появится непоименованная улица — так и должно быть). Иногда как улица обозначен внутренний проезд: тогда нужно проставить ему тег highway=service.
Название улицы есть в списке, но написано в ином падеже, роде или числе, либо с иным статусом. Иногда улица в честь кого-то написана с разным сокращением инициалов, или без них.
- Проверить по допустимым источникам правильное написание названия и правильный статус. Если прав список валидатора, то переименовать все линии улицы. Иначе проставить линиям улицы тег kladr:user с КЛАДР-кодом улицы, неправильно обозначенной в списке валидатора. Напомним, что названия в OSM пишутся без сокращений: «Малая Сенная улица», «проспект Максима Горького».
Улицы с таким названием, или близким к нему, нет в списке.
- При отсутствии абсолютно стопроцентной уверенности в том, что на местности нет ни единого намёка на это название, и «в народе» оно не имеет хождения, можно удалить тег name со всех линий этой улицы. Иначе оставить всё как есть: списки КЛАДР быстро устаревают и нередко отличаются от реальности.