RU:Отношения:мультиполигон
![]() |
![]() |
Описание |
---|
Отношение "Мультиполигон" используется для создания сложных полигонов. ![]() |
Группа: Свойства |
Участники |
Статус: де-факто |
Инструменты |
|
Отношения типа мультиполигон используются для создания сложных полигонов.
Простые полигоны создаются в OSM с помощью одной замкнутой линии и обозначения каким-либо тегом, подразумевающим область, а не замкнутую линию. Например, замкнутая линия с тегом landuse=forest будет считаться полигоном, а замкнутая линия с тегом junction=roundabout не будет.
Однако, данная модель работает только с полигонами, которые состоят из одной линии и не имеют отверстий. Любая более сложная область (например, внешняя граница состоит из нескольких соединенных линий или область состоит из нескольких разобщенных частей или имеет отверстия) требует использования отношения мультиполигон.
Также рекомендуется использовать отношения типа мультиполигон (type=multipolygon) (а не type=boundary) для отношений границ в случае, если необходимо задать границы сложной формы (состоящие из нескольких линий или с анклавами и т.п.). Тип отношения в этом случае будет легко опознан по тегу boundary=*; нет необходимости использовать type=boundary.
Вкратце, отношение мультиполигон может состоять из любого количества линий в роли outer (внешние периметры) и любого количества линий в роли inner (отверстия), и они должны представлять замкнутые границы для построения формы мультиполигона.
Живой пример "здания с дыркой" смотри здесь
Теги
Ключ | Значение | Толкование |
---|---|---|
type | multipolygon | Сообщает приложению о правилах построении области на основе участников. |
Участники
Использование
предполагаемое использование мультиполигонов подразумевает следующее:
- Теги, описывающие мультиполигон (например, landuse=industrial) должны быть на отношении. Внешняя граница может быть оставлена без тегов, либо иметь свои собственные, не связанные с мультиполигоном.
- Если у вас есть одна линия являющаяся внешней и она не описывает что-то сама по себе, вы можете поместить эти теги на ней и оставить отношение непомеченным. Если у вас более чем одна внешняя линия (см. дополнительные примеры ниже), то это не имеет смысла. Поэтому предложено (для согласования), чтобы всегда размещать теги на отношении мультиполигона.
- Если внутренняя линия представляет собой ещё что-то (к примеру, озеро в лесу), тогда внутренняя линия может содержать необходимые теги".
- Иначе внутренняя линия должна оставаться без тегов.
- Направленность линий значения не имеет.
- Порядок следования членов отношения значения не имеет (однако сортированный по ролям список может помочь людям находить ошибки).
- В общем случае, отношение multipolygon может быть использовано для создания мультиполигонов в соответствии со стандартом OGC Simple Feature (http://www.opengeospatial.org/standards/sfs). Всё, что не является верным мультиполигоном в соответствии с этим стандартом (например, пересекающиеся внутренние линии) должно считаться некорректным отношением multipolygon, с важным исключением в виде касающихся внутренних линий (см. ниже).
Примеры
Один внешний и один внутрений контуры
Одна внешняя и две внутренние замкнутые линии
Несколько линий, образующих контур
Множественные (отдельные) внешние контуры
Два внешних контура и внутренние, состоящие из линий
Сложное сочетание всех возможностей
Островок в отверстии
Соприкасающиеся внутренние контуры
Единственное ограничение в том, что мультиполигоны не поддерживают перекрывающихся или пересекающихся внутренних или внешних контуров. Все контуры должны быть полностью отделены друг от друга.
Дополнительные примеры
Их можно посмотреть тут
Применение тегов
- Предлагается применять все описывающие область теги к отношению, а не к линиям. Во многих случаях это приведет к появлению линий без тегов.
- Реализация с учетом совместимости:
- Стиль отрисовки выбиратся на основании тэгов самого отношения.
- Если отношение не имеет тегов, используется стиль отрисовки внешних линий.
- Если внешние стили противоречат друг другу или отсутствуют, это расценивается как ошибка.
- Рисование внутренних линий определяется их тэгами. Если стиль внутренних тегов совпадает с внешним, он должен обрабатваться, как пустой (прежний метод)
Тонкости применения тегов
К таким отношениям-мультиполигонам можно применять теги всего несколькими способами. Вот перечень вариантов, затруднений и предлагаемых решений:
- Есть более чем одна внешняя ("outer") линия:
- Отношение имеет теги
- Используются теги отношения. Игнорируются все теги на линии.
- Отношение не имеет тегов, но одна или несколько составляющих внешний контур линий идентичный набор тегов
- Достоверные данные, применяемые ко всему контуру.
- Отношение не имеет тегов, и внешние линии, составляющие контур, отмечены по-разному
- Это проблемная ситуация с неопределенным результатам.
Конечно, наилучший способ тегировать внешние линии состоит в том, чтобы присваивать теги отношению, а не линиям. Но это потребует множества изменений в существующем ПО, так что присвоение тегов непосредственно линиям будет использоваться еще какое-то время.
- Существует более чем одна внутренняя ("inner") линия:
- Одна замкнутая линия (состоящая из одного или нескольких сегментов) не имеет метки, а другая имеет метки.
- Линия без тегов отображается как дыра, линия с тегами в соответствии с её метками.
- Различные замкнутые линии с различными тегами.
- Каждая дыра отображается в соответствии со своими тегами.
- Одна замкнутая линия (состоящие из двух или более сегментов), где сегменты имеют различные метки.
- Если некоторые сегменты не имеют метки, то просто использовать теги из других сегментов. Если сегменты имеют различные метки, то это проблемная ситуация с неопределенным результатам (как и для "outer").
Как избежать ошибок топологии

Используя линии для создания мультиполигонов, необходимо обращать внимание на топологический смысл создаваемых объектов и возможные проблемы, которые с этим связаны.
Так, при использовании линии, обозначающей линейный объект с ненулевой шириной (дорогу, реку), для формирования мультиполигона площадного объекта (леса, например), возникает топологическое противоречие. Контур площадного объекта, фактически, перекрывает половину ширины линейного объекта, поскольку линия, обозначающая его ось, проводится по центру. Не следует понимать эту ситуацию так, что раз у линейного объекта предполагается ненулевая или указана в явном виде ширина, значит контур площадного объекта в такой ситуации автоматически отодвигается от оси. Теоретически, действительно, такой случай возможно учесть при обработке данных, но в существующей практике такой случай не учитывается. То, что при рендеринге карты дороги и реки всегда рисуются некой толщины и перекрывают полигоны землепользования, является просто эффектом рендеринга, но не означает, что во всех остальных задачах (например - при подсчете площадей разных типов землепользования) эта топологическая ошибка не имеет значения, либо как-то корректно обрабатывается.
Вывод: не используйте линии, которыми обозначены линейные объекты ненулевой ширины в составе мультиполигонов площадных объектов.
Рендеринг
- JOSM может обрабатывать такие улучшенные мультиполигоны, начиная с версии 1203
- Стиль Standard обеспечивает рендеринг на www.openstreetmap.org и не в полной мере поддерживает "улучшенные мультиполигоны" (но на пути к этому)
- mkgmap полностью поддерживает, начиная с версии 1497
- GpsMid по крайней мере поддерживает большинство современных функций мультиполигона
- Предложен алгоритм обработки мультиполигонов.
Дополнительные инструменты
- Relation Check
- OSM Inspector имеет поддержку проверки мультиполигонов.
- RelToolBox - плагин для JOSM, упрощающий работу с мультиполигонами.
Обучающие материалы
- Видео-урок по работе с мультиполигонами в редакторе JOSM при помощи плагина RelToolBox (автор: Павел Гаврилов).
- Еще один видео-урок от Павла Гаврилова: поиск и исправление ошибок
- Руководство по рисованию мультиполигонов в редакторе iD
См. ещё
Смотрите The Future of Areas для изучения обсуждений о том, как улучшить обработку области в OSM.
RU:Appllied Multipolygons - Статья про создание и применение мультиполигонов.