Uk:Relation:multipolygon

From OpenStreetMap Wiki
Jump to navigation Jump to search
Public-images-osm logo.svg multipolygon
Multipolygon Illustration 6.svg
Опис
Зв’язок мультиполігон використовується для створення комплексних полігонів. Show/edit corresponding data item.
Група: Властивості
Учасники

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

Звʼязок типу мультиполігон area використовується для створення комплексних полігонів, як правило таких, що містять отвори, або таких які складаються з кількох частин, що не перетинають одна одну. Вони також можуть бути корисними, коли потрібно розрізняти лінійні та полігональні обʼєкти без потреби у створені додаткових геометрій, так, наприклад, паркан (відповідний теґ додається до лінії) може бути межею території маєтку (контур полігону є членом звʼязку мультиполігону позначеного відповідними теґами, що описують властивості володіння).

Прості полігони створюються в OSM за допомогою однієї замкненої лінії та позначення будь-яким теґом, що має на увазі полігон, а не замкнену лінію. Наприклад, замкнена лінія, позначена теґом landuse=forest, буде тлумачитись, як полігон, в той час, як лінія з теґом highway=trunk — ні. Однак, дана модель працює тільки з полігонами, які складаються з однієї лінії та не мають отворів. Будь-який інший полігон, що є складнішим за цей (наприклад: берегова лінія, що складається з послідовно зʼєднаних ліній, або полігон, що складається з кількох незʼєднаних частин, або такий, що має отвори) потребує використання звʼязку мультиполігон.

Якщо коротко, звʼязок мультиполігон може складатись з кількох ліній, що мають роль outer (зовнішній периметр) та кількох ліній з роллю inner (отвори), і вони повинні утворювати вірні замкнені межі для утворення форми мультиполігону.

Як мапити

iD

В редакторі iD ви можете виділити полігон та вкладений (внутрішній) полігон та скористатись командою «Обʼєднати» C для створення мульти полігону.

JOSM

Використовуйте Меню/Інструменти/Створити мультиполігон або Ctrl+B

Vespucci

Теґи

Ключ Значення Пояснення
type multipolygon Говорить застосункам, що потрібно використовувати правила побудови полігону на основі його членів.
boundary * Не використовується (застаріло). Натомість використовуйте type=boundary (Це подібний звʼязок, але з іншими додатковими членами з відповідними ролями.)
natural * Принаймні один теґ, що описує вид обʼєкта (наприклад natural, landuse, building, man made, amenities, leisures, …) що охоплює територію.

Більшість цих теґів є взаємовиключними (використовуйте окремі мультиполігони, якщо треба, використовуйте правило Один обʼєкт — один елемент в OSM), оскільки їх додаткові теґи можуть мати суперечливу інтерпретацію.

landuse *
building *
man_made *
amenity *
leisure *
highway pedestrian
waterway *
layer * Будь-які теґи, що описують мультиполігон (такі як підтип обʼєкта, шар, назва, референт, примітки , …).

Ці теґи використовуються так само, як і для звичайних полігонів.

name *
note *
... ...

Члени

Лінія або Точка Роль Повторюваність? Пояснення
way чи area Role outer один чи більше Лінії, що утворюють зовнішній замкнений периметр полігону.
way чи area Role inner нуль чи більше Лінії, що утворюють замкнені межі отворів в середині полігону.
way чи area none нуль Не використовувати, застаріле. Інструменти повинні опрацьовувати такі члени, як Role outer або намагатись визначити їх роль базуючись на геометрії.
node будь-яка нуль Не використовувати.
relation будь-яка нуль Не використовувати.

Використання

Використання мультиполігонів передбачає наступне:

  • Теґи, що описують мультиполігон (напр. landuse=forest) повинні призначатись звʼязку. Лінії, що утворюють зовнішній периметр, повинні лишатись без теґів[1], за винятком випадків, коли вони позначають самостійні речі. Наприклад, ліс може бути окреслений чотирма парканами, в цьому випадку кожна лінія буде позначена теґом паркану barrier=*, але вони все ще можуть бути використані як члени звʼязку з роллю "outer", що утворюють зовнішній периметр лісу.
  • Якщо внутрішня лінія представляє щось сама по собі (напр. ліс з отвором, де отвір є озером), внутрішня лінія може бути позначена відповідним чином.
  • В іншому випадку внутрішні лінії повинні лишатись без теґів.
  • Спрямованість ліній значення не має.
  • Послідовність членів звʼязку також не має значення (але правильно відсортовані списки членів можуть допомогти редакторам в перевірці повноти інформації).

Історично, особливо в Німеччині, type=multipolygon використовувався замісць звʼязку для позначення кордонів type=boundary. Цей метод не був широко прийнятий і має вважатись застарілим.

Вагомі умови для мультиполігонів

Загалом, звʼязки мультиполігони можуть використовуватись для створення мультиполігонів відповідно до стандарту OGC Simple Feature (Графічні приклади дійсності OGC). Будь-що, що не відповідає стандарту (напр. мультиполігони із самоперетином) повинне вважатись недійсними звʼязками мультиполігонами, із важливим виключеннями, щодо внутрішніх отворів, що доторкаються між собою (див. нижче).

Ми визначаємо дійсним (замкненим) полігоном зʼєднання підмножини ліній (членів), які утворюють замкнений полігон, коли їх кінці зʼєднані між собою.

Ми визначаємо незамкнену лінію, як комбінацію точок, в якій координати першої точки відрізняються від останньої.

Дійсним звʼязком мультиполігоном, є звʼязок, що відповідає наступним вимогам:

  • Лінії члени мультиполігону ПОВИННІ утворювати один чи більше замкнений полігон, коли лінії, що належать звʼязку, зʼєднанні таким чином, що вони утворюють один чи більше замкнений ланцюг. [2]
  • Рівно дві незамкнені лінії, і не більше, повинні мати спільну кінцеву точку (напр. крайні точки ліній показані чорними крапками на малюнках).
    • Якщо кінцева точка належить менше ніж двом лініям, полігон не може вважатись замкненим і є погано сформованим. поганий приклад 1
    • Якщо кінцева точка належить більше ніж двом лініям, замкнений полігон не може бути реконструйований однозначно. поганий приклад 2 (Виключення – точки, що належать парному числу незамкнених ліній повинні бути частиною внутрішніх отворів, що дотикаються друг друга.)
  • Внутрішні полігони не повинні перекривати зовнішні полігони чи дотикатись них. Перекриття можливо усунути повною переробкою мультиполігону.

Приклади XML

Одна зовнішня і одна внутрішня лінії

Самий простий та найчастіше використовуваний випадок з однією зовнішньою та однією (чи більше) внутрішньою лініями, що утворюють окремі замкнені лінії.
<relation id="1">
  <tag k="type" v="multipolygon" />
  <member type="way" id="1" role="outer" />
  <member type="way" id="2" role="inner" />
</relation>
Малюнок 1: Одна зовнішня та одна внутрішня замкнені лінії
Приклад теґування обʼєктів

Припустимо, що попередня геометрія представляє ставок у лісі. Ось два конкуруючих способи позначення цих елементів:

<relation id="1">
  <tag k="type" v="multipolygon"/>
  <member type="way" id="1" role="outer"/>
  <member type="way" id="2" role="inner"/>
</relation>
<way id="1">
  <tag k="natural" v="forest"/>
  <tag k="name" v="Grey Wood"/>
  <nd ref="101"/><nd ref="102"/><nd ref="103"/>
  <nd ref="104"/><nd ref="105"/><nd ref="101"/>
</way>
<way id="2">
  <tag k="natural" v="water"/>
  <tag k="water" v="pond"/>
  <tag k="name" v="Whitewater"/>
  <nd ref="201"/><nd ref="202"/><nd ref="203"/>
  <nd ref="204"/><nd ref="201"/>
</way>

Це неправильно: мультиполігон лісу все ще представляє геометричну площину, але не обʼєкт, полігон (лінія #1) повністю перекриває ставок (лінія #2). Рендери чи застосунки не будуть опрацьовувати такий випадок належним чином, і ставок буде перекритий лісом і його не буде видно, навіть якщо він позначений правильно.

<relation id="1">
  <tag k="type" v="multipolygon"/>
  <tag k="natural" v="forest"/>
  <tag k="name" v="Grey Wood"/>
  <member type="way" id="1" role="outer"/>
  <member type="way" id="2" role="inner"/>
</relation>
<way id="1">
  <nd ref="101"/><nd ref="102"/><nd ref="103"/>
  <nd ref="104"/><nd ref="105"/><nd ref="101"/>
</way>
<way id="2">
  <tag k="natural" v="water"/>
  <tag k="water" v="pond"/>
  <tag k="name" v="Whitewater"/>
  <nd ref="201"/><nd ref="202"/><nd ref="203"/>
  <nd ref="204"/><nd ref="201"/>
</way>

Це правильний (набагато кращій) випадок: теґи лісу перенесені з лінії зовнішнього контуру на мультиполігон, ліс, який має власні теґи, більше не перетинається з внутрішнім обʼєктом – ставком (лінія #2), що також має власні теґи; лінія #1 не має теґів (вона не представляє а ні ліс, а ні будь-який обʼєкт, вона лише визначає тільки геометрію мультиполігону). Лінії без теґів є дійсними, якщо вони є членами звʼязків.

Одна зовнішня лінія і два отвори

<relation id="1">
  <tag k="type" v="multipolygon" />
  <member type="way" id="1" role="outer" />
  <member type="way" id="2" role="inner" />
  <member type="way" id="3" role="inner" />
</relation>
Малюнок 2: Одна зовнішня лінія і два отвори

Кілька ліній утворюють замкнене коло

Розширена схема побудови мультиполігонів дозволяє будь яким внутрішнім отворам та периметру мультиполігона складатись з більше ніж однієї лінії. Це дуже зручно для полігонів, що покривають великі ділянки, там де непрактично мати одну велику лінію, що оточує весь полігон:
<relation id="1">
  <tag k="type" v="multipolygon" />
  <member type="way" id="1" role="outer" />
  <member type="way" id="2" role="outer" />
  <member type="way" id="3" role="inner" />
</relation>
Малюнок 3: Кілька ліній утворюють замкнене коло

Два незʼєднаних зовнішніх периметри

На відміну від простих мультиполігонів, вдосконалені мультиполігони дозволяють мати будь-яку кількість зовнішніх периметрів і бути в той самий час вірними мультиполгонами:
<relation id="1">
  <tag k="type" v="multipolygon" />
  <member type="way" id="1" role="outer" />
  <member type="way" id="2" role="outer" />
</relation>
Малюнок 4: Два незʼєднаних зовнішніх периметри

Два незʼєднаним зовнішніх периметри і дві лінії, що утворюють отвір

Можливість створювати замкнені периметри із окремих ліній не обмежуються лише зовнішніми периметрами, отвори також можуть утворюватись у такий спосіб:
<relation id="1">
  <tag k="type" v="multipolygon" />
  <member type="way" id="1" role="outer" />
  <member type="way" id="2" role="inner" />
  <member type="way" id="3" role="inner" />
  <member type="way" id="4" role="outer" />
  <member type="way" id="5" role="inner" />
</relation>
Малюнок 5: Два незʼєднаним зовнішніх периметри і дві лінії, що утворюють отвір

Комплексна комбінація всіх розширених можливостей

Цей приклад показує застосування всіх розширений можливостей: три зовнішній периметри, два з яких мають один чи більше отворів, де більшість з них складається з кількох ліній.
<relation id="1">
  <tag k="type" v="multipolygon" />
  <member type="way" id="1" role="outer" />
  <member type="way" id="2" role="outer" />
  <member type="way" id="3" role="outer" />
  <member type="way" id="4" role="outer" />
  <member type="way" id="5" role="inner" />
  <member type="way" id="6" role="inner" />
  <member type="way" id="7" role="inner" />
  <member type="way" id="8" role="inner" />
  <member type="way" id="9" role="inner" />
  <member type="way" id="10" role="inner" />
  <member type="way" id="11" role="inner" />
  <member type="way" id="12" role="outer" />
  <member type="way" id="13" role="outer" />
  <member type="way" id="14" role="outer" />
  <member type="way" id="15" role="outer" />
  <member type="way" id="16" role="inner" />
  <member type="way" id="17" role="inner" />
  <member type="way" id="18" role="inner" />
  <member type="way" id="19" role="inner" />
  <member type="way" id="20" role="outer" />
</relation>
Малюнок 6: Комплексна комбінація всіх розширених можливостей

Острови з отворами

Виходячи з можливості мати кілька зовнішніх периметрів в одному звʼязку, виходить, що можливо легко створити модель острівця з отвором:
<relation id="1">
  <tag k="type" v="multipolygon" />
  <member type="way" id="1" role="outer" />
  <member type="way" id="2" role="inner" />
  <member type="way" id="3" role="outer" />
</relation>

Щоб зробити подібне раніше, потребувалось створити кілька окремих мультиполігонів, один — з лінією 1 в ролі outer, лінією 2 inner; інший — з лінією 2 в ролі outer, лінією 3 inner. Подібні каскади все ще потрібні й зараз, коли острівець в середині має інші властивості, ніж полігон ззовні, але якщо острівець і полігон ззовні мають однакові властивості, все це можна утворити як отвір в отворі.

Малюнок 7: Остров із отворами

Дотичні внутрішні отвори

Дехто з маперів використовує "мультиполігони" для поєднання дотичних внутрішніх отворів:
<relation id="1">
  <tag k="type" v="multipolygon" />
  <member type="way" id="1" role="outer" />
  <member type="way" id="2" role="inner" />
  <member type="way" id="3" role="inner" />
</relation>

В реалізації рендерінгу розширених мультиполігонів, рендер намагатиметься показати дотичні отвори як один. Це такий випадок, коли використання в OpenStreetMap відхиляється від стандартів OGC Simple Features. В них дотичність кілець не підтримуються, оскільки вони не потрібні (навіщо створювати два отвори, коли можна замість цього створити один). В OpenStreetMap, вони іноді мають сенс, коли їх потрібно позначити окремо, наприклад ліс з галявиною, частину якої займає озеро, а іншу поле – вам потрібно утворити два «отвори» в лісі, один з яких позначити natural=water, а інший landuse=farmland. Це іноді потрібно для того, щоб створити тільки один отвір в лісі, а потім створити окремі полігони для озера і поля. Інакше це вимагало б занадто багато роботи для них.

Уникайте також створення мультиполігонів, де внутрішні отвори дотикаються до зовнішнього периметру.

Малюнок 8: Дотичні внутрішні отвори

Погані приклади

Тут містяться приклади помилкових мультиполігонів, щоб показати як НЕ треба робити

Незамкнений полігон

Цей приклад показує помилковий мультиполігон, так як лінії way #2 та way #3 не зʼєднані.
Малюнок 9: помилковий Незамкнений полігон

Перекриття, незамкнені лінії, що належать до тієї ж ролі

Цей приклад показує помилковий мультиполігон, у якого кінцеві точки лінії way #2 та лінії way #3 належать більше ніж двом лініям.
Малюнок 10: помилковий неоднозначний мультиполігон

Імітація мультиполігону

Цей приклад демострує невалідний мультполігон, бо точки 4 та 5 дублюються як точки 9 та 10, відповідно. Згідно з Правилами Open Geospatial Consortiumʼs (OGC) OpenGIS, такий елемент не є дійсним полігоном. Osmose сповіщає про такі помилки.
Малюнок 11: не валідний неоднозначний мультиполігон

Додаткові приклади

Імплементація

  • Стиль рендерингу обʼєктів, які представлені полігонами, залежить від теґів самого мультиполігону.
  • Показ елементів отворів відбувається незалежно від мультиполігонів – лінія, що представляє внутрішній контур може утворювати замкнене коло та також бути зовнішнім контуром іншого мультиполігону.
  • Правилі рендерингу, що містять настанови щодо рендерингу меж мультиполігонів можуть викликати конфлікти. Лінії внутрішніх контурів можуть мати стиль (наприклад, огорожа) в той час, як внутрішній обʼєкт – свій (наприклад, ставок), а сам полігон – інший (ліс). Кожне програмне забезпечення має встановлювати власний порядок рендерингу елементів, однак загальним може бути те що, стиль показу ліній має вищий пріоритет за стиль показу заповнення.
  • Ось запропонований алгоритм обробки мультиполігонів.
  • Зауважте, що до травня 2017 року деякі мультиполігони також мали свої теґи на зовнішньому контурі (якщо він складався з однієї лінії або всі лінії мали однакові теґи), у той час, як відповідний звʼязок мультиполігону залишався без теґів. Отже, при використанні старих фрагментів даних OSM також необхідно обробляти мультиполігони старого стилю.

Стиль мапінгу, кращі приклади

Мультиполігони відкривають можливість створення геометрично ідентичних обʼєктів використовуючи різні стилі: у вигляді ліній чи мультиполігонів, використовуючи замкнені та не замкнені, або спільні чи окремі лінії. Постає питання: який стиль мапінгу використовувати. Деякі стилі мають переваги над іншими, і повинні розглядатись як добра практика. Для інших, вибір більше залежить від уподобань, або ж від досвідченості мапера.

В узагальненому вигляді, для великих територій, що позначаються одним і тим же теґом, може використовуватись велика кількість невеликих мультиполігонів чи замкнених ліній, чи менша кількість більших мультиполігонів. Для мультиполігонів можливі два стилі мапінгу:

Метод A
Внутрішній і зовнішній контури утворюються замкненими лініями, якщо можливо, за винятком, коли ці лінії є достатньо великими (більше ніж 2000 точок). Лінії, як правило належать одному мультиполігону
Метод Б
Кожна межа між двома мультиполігонами представляється окремою лінією, яка потім входить до складу відповідних дотичних мультиполігонів. Отже, периметр мультиполігону складається з кількох ліній.

Питання, який стиль мапінгу мультиполігонів використовувати, інтенсивно обговорюються впродовж останніх років, дивіться Talk:Relation:multipolygon, а також на форумах. Досі ще не досягнуто остаточного консенсусу, але використовуються наступні правила:

  • Додавання простих замкнених ліній у вигляді мультиполігонів збільшує кількість обʼєктів бази даних та час їх рендерингу. Таке додаткове підвищення складності треба уникати.
  • Використання спільних ліній мультиполігонами (метод Б) дозволяє підвищити ефективність подання даних, уникаючи застосування ліній, що накладаються одна на одну.
  • Мультиполігони, що складаються з незамкнених ліній (метод Б), важче обробляти недосвідченим маперам і в простих редакторах, таких як Potlatch 2, що часто призводить до випадкового спотворення таких мультиполігонів користувачами, які нічого не підозрюють.
  • Багато досвідчених учасників висловлюються, щодо дискомфорту метода Б, особливо для дуже великих мультиполігонів.
  • Величезні мультиполігони призводять до уповільнення процесу візуалізації.
  • Редагування складної геометрії в JOSM легше, швидше і не призводить до помилок з методом А. Це через те, що метод Б потребує вилучення, створення та вставки різних ліній до коректних звʼязків мультиполігонів.

Поки що не існує офіційних застережень, як правильно використовувати мультиполігони, до тих пір доки вони є геометрично вірними. Однак вважається, що вибір відповідного стилю мапінгу дозволить зберегти базу даних незасміченою та простою для внесення змін кожним з учасників.

Допоміжні інструменти

Можливі помилки

Якщо ви знаєте місця позначені цим теґом, перевірте їх, можливо їх треба позначити по іншому.
Автоматичні правки категорично не припустимі, якщо ви не усвідомлюєте всю складність цього процесу!
Якщо ви знаєте місця позначені цим теґом, перевірте їх, можливо їх треба позначити по іншому.
Автоматичні правки категорично не припустимі, якщо ви не усвідомлюєте всю складність цього процесу!
Якщо ви знаєте місця позначені цим теґом, перевірте їх, можливо їх треба позначити по іншому.
Автоматичні правки категорично не припустимі, якщо ви не усвідомлюєте всю складність цього процесу!
Якщо ви знаєте місця позначені цим теґом, перевірте їх, можливо їх треба позначити по іншому.
Автоматичні правки категорично не припустимі, якщо ви не усвідомлюєте всю складність цього процесу!
Якщо ви знаєте місця позначені цим теґом, перевірте їх, можливо їх треба позначити по іншому.
Автоматичні правки категорично не припустимі, якщо ви не усвідомлюєте всю складність цього процесу!

Дивіться також

Примітки