User:Zverik/Multipolygon Translation

From OpenStreetMap Wiki
Jump to navigation Jump to search
Public-images-osm logo.svg multipolygon
frameless|center|200px
Описание
Отношение мультиполигона описывает любые типы областей. Это официальный формат области в OSM. Изменить это описание на вики-странице. Изменить это описание в элементе данных.
Группа: свойства
Участники

  • way — outer
  • way — inner
Статус: де-факто

Отношениями типа мультиполигон описываются любые виды областей. Мультиполигон — это формат описания области в OpenStreetMap.

Область можно нарисовать по-быстрому, одной замкнутой линией и такими тегами на ней, которые подразумевают, что это область (например, замкнутая линия с landuse=forest будет считаться областью, а с junction=roundabout — нет). Увы, такая простая схема применима только когда область проста: без дырок и рисуется одной линией.

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

Есть мнение, что type=multipolygon нужно использовать даже на отношениях границ (вместо type=boundary), поскольку в основе эти отношения похожи, и отношение границы может быть легко распознано по наличию тега boundary=*.

Короче, мультиполигон должен содержать линии в роли outer (внешний контур), ещё линии в роли inner (дырки, не обязательны), и всё это как-то должно складываться в замкнутые контуры, из которых строится мультиполигон.

Теги

Тег Значение Описание
type multipolygon Сообщает приложению, что члены отношения составляют мультиполигон.

Члены

Отношения этого типа содержат только линии way в таких ролях:

Роль Количество Описание
outer 1 ... ∞ Линии, составляющие внешний контур (контуры) области.
inner 0 ... ∞ Линии, составляющие внутренний контур (контуры) области.
нет Почти всегда отношение можно правильно нарисовать даже в отсутствие ролей inner и outer. Тем не менее, их рекомендуется ставить для других мапперов, чтобы было понятно.

Применение

Отношение мультиполигона используется примерно таким образом:

  • Все теги про область (например, landuse=forest) ставятся на отношение. Внешний контур (контуры) остаются без тегов, если они не значат что-то сами по себе. К примеру, лес может быть очерчен четырьмя дорогами, которые в таком случае сохраняют теги highway, но могут участвовать в отношении леса как outer-члены (но обычно лес не вплотную примыкает к линиям highway, т.к. от них до леса минимум половина ширины дороги — прим. пер.).
  • Если внешний контур сделан одной линией, которая больше ничего не обозначает, можно повесить теги на неё, оставив отношение только с типом. Если внешних контуров много (см. «Сложные мультиполигоны» ниже), то в таком «упрощении» теряется смысл. Поэтому для однородности рекомендуется вешать теги на отношение всегда.
  • Если внутренний контур что-то обозначает сам по себе (например, лес с дыркой, где дырка — это озеро), то можно поставить соответствующие теги на линии внутреннего контура.
  • Иначе эти линии нужно оставить без тегов.
  • Направление линий не важно.
  • Порядок членов в отношении не важен (но сортировка поможет проверять замкнутость областей на глаз).
  • В общем случае отношением мультиполигона можно описать мультиполигоны в соответствии со стандартом OGC Simple Feature. Всё, что по этому стандарту не является корректным мультиполигоном (например, где контуры пересекаются), не должно считаться и корректным отношением мультиполигона, с единственным исключением — соприкасающимися внутренними кольцами (см. ниже).

Примеры

Будут несколько позже. Можно посмотреть их на английской странице.

Обработка

  • Все теги, описывающие область, предлагается ставить на отношение, а не на линии. В большинстве случаев на выходе будет множество линий без тегов вообще.
  • Учёт обратной совместимости:
    • стиль рисования берётся из тегов самого отношения;
    • если на отношении нет тегов, используется стиль линий внешнего контура;
    • если стили этих линий различаются или отсутствуют, это ошибка;
    • теги на линиях внутреннего контура влияют только на отрисовку областей-дырок. Но если эти теги совпадают с тегами внешнего контура (старый метод), стиль внутреннего контура считается отсутствующим.

Ещё про обработку

Теги на отношение мультиполигона могут быть расставлены разными способами. Вот список вариантов, проблем и возможных решений:

  • Больше одной линии outer:
    На отношении есть теги
    Используйте теги отношения, игнорируйте их на линиях.
    На отношении нет тегов, но одна или несколько линий имеют одинаковый набор тегов
    Допустимо, используйте теги с сегментов, распространяя их на весь внешний контур.
    На отношении нет тегов, а линии внешнего контура помечены по-разному
    Это чёрт знает что, результат не определён.
  • Больше одной линии inner:
    Один замкнутый контур (из одной или более линий) без тегов, но есть другой с тегами
    Контур без тегов рисуется как дырка, контур с тегами — как велят эти теги.
    Несколько замкнутых контуров с разными тегами
    Каждая «дырка» рисуется в соответствии со своими тегами.
    Один замкнутый контур (из двух или более линий), где на теги на линиях различаются
    Если на каких-то линиях нет тегов, то они заимствуют теги «соседей». Если теги совсем разные, результат не определён (как и для линий «outer»).

Отображение

  • JOSM умеет рисовать сложные мультиполигоны с версии 1203;
  • Osmarender (T@H) тоже их поддерживает;
  • стиль Mapnik на www.openstreetmap.org не полностью поддерживает «сложные мультиполигоны» (но большей частью);
  • польностью поддерживаются mkgmap с версии 1497;
  • GpsMid поддерживает большую часть возможностей сложных мультиполигонов;
  • можно почитать предложение алгоритма для разбора мультиполигонов.

Инструменты