Cs:Relation:multipolygon

From OpenStreetMap Wiki
Jump to: navigation, search
Dostupné jazyky — Relation:multipolygon
· Afrikaans · Alemannisch · aragonés · asturianu · azərbaycanca · Bahasa Indonesia · Bahasa Melayu · Bân-lâm-gú · Basa Jawa · Baso Minangkabau · bosanski · brezhoneg · català · čeština · dansk · Deutsch · eesti · English · español · Esperanto · estremeñu · euskara · français · Frysk · Gaeilge · Gàidhlig · galego · Hausa · hrvatski · Igbo · interlingua · Interlingue · isiXhosa · isiZulu · íslenska · italiano · Kiswahili · Kreyòl ayisyen · kréyòl gwadloupéyen · Kurdî · latviešu · Lëtzebuergesch · lietuvių · magyar · Malagasy · Malti · Nederlands · Nedersaksies · norsk bokmål · norsk nynorsk · occitan · Oromoo · oʻzbekcha/ўзбекча · Plattdüütsch · polski · português · português do Brasil · română · shqip · slovenčina · slovenščina · Soomaaliga · suomi · svenska · Tiếng Việt · Türkçe · Vahcuengh · vèneto · Wolof · Yorùbá · Zazaki · српски / srpski · беларуская · български · қазақша · македонски · монгол · русский · тоҷикӣ · українська · Ελληνικά · Հայերեն · ქართული · नेपाली · मराठी · हिन्दी · অসমীয়া · বাংলা · ਪੰਜਾਬੀ · ગુજરાતી · ଓଡ଼ିଆ · தமிழ் · తెలుగు · ಕನ್ನಡ · മലയാളം · සිංහල · ไทย · မြန်မာဘာသာ · ລາວ · ភាសាខ្មែរ · ⵜⴰⵎⴰⵣⵉⵖⵜ · አማርኛ · 한국어 · 日本語 · 中文(简体)‎ · 吴语 · 粵語 · 中文(繁體)‎ · ייִדיש · עברית · اردو · العربية · پښتو · سنڌي · فارسی · ދިވެހިބަސް
Public-images-osm logo.svg multipolygon
Multipolygon Illustration 6.svg
Popis
Relace multipolygon slouží ke kreslení složitých ploch.
Skupina: Properties
Členy

  • Cesta - outer (vnější)
  • Cesta - inner (vnitřní)
Status: Schváleno

Relace typu multipolygon slouží ke kreslení složitých ploch.

Jednoduché plochy se v OSM kreslí jako cesty uzavřené do kruhu a označí se nějakou značkou, která vyjadřuje, že se ve skutečnosti jedná nikoliv o uzavřenou cestu, ale o plochu. Například o uzavřené cestě označené landuse=forest se předpokládá, že je to plocha, ale byla-li by označená junction=roundabout, pak je na ni stále nahlíženo pouze jako na cestu.

Jenže tato metoda funguje pouze pro plochy, jejichž hranice se skládá pouze z jedné cesty a ve které nejsou žádné díry. Jakákoliv plocha, která je složitější (například její hranice je složena z více cest spojených za sebe, nebo se skládá z několika nesouvislých částí, nebo jsou v ní díry) vyžaduje pro své zakreslení použití relace multipolygon.

Jednoduše řečeno relace multipolygon může mít libovolný počet cest v roli outer (vnější obvod) a libovolný počet cest v roli inner (díry), tyto cesty musí nějak dohromady dávat uzavřené kruhy, ze kterých je polygon sestaven.

Poznámka: Dříve byly relace type=multipolygon používány zejména v Německu namísto relací type=boundary pro kreslení hranic zemí. Tento způsob použití ovšem nebyl přijat většinou a nyní by se již neměl používat.

Značky (Tags)

Klíč Hodnota Vysvětlení
type multipolygon Sděluje aplikaci, že má pro vykreslování prvků použít pravidla pro vytváření ploch.

Prvky (Members)

Cesta nebo Uzel Role Počet Vysvětlení
Cesta outer jedna nebo více Cesty, ze kterých se skládá vnější hranice plochy.
Cesta inner žádná nebo více Cesty, které tvoří vnitřní hranice plochy.
Cesta žádná Nepoužívat, zastaralé. Nástroje by to měly zpracovávat stejně jako "outer".
Cesta enclave Nepoužívat, zastaralé. Nástroje by to měly zpracovávat stejně jako "inner". Toto využívaly hlavně relace boundary.
Cesta exclave Nepoužívat, zastaralé. Nástroje by to měly zpracovávat stejně jako "outer". Toto využívaly hlavně relace boundary.

Použití

Doporučené použití multipolygonu je takovéto:

  • Značky, které popisují multipolygon (např. landuse=forest) se přidávají na relaci. Vnější cesty by měly zůstat bez značek, pokud ovšem značky nepopisují něco přímo souvisejícího s vnější cestou. Například les může být ohraničen čtyřmi ploty, v tomto případě tedy ony čtyři cesty budou označeny značkou barrier a stále mohou být použity jako vnější prvky "outer" relace lesa.
  • Pokud je vnější obvod "outer" tvořen jen jednou uzavřenou cestou, která zároveň nepopisuje nic jiného, pak můžete na tuto cestu dát značky popisující relaci a samotnou relaci nechat neoznačenou. Pokud ovšem máte více než jednu vnější cestu "outer" (viz dále "Rozšířená definice multipolygonu"), pak tento přístup nedává smysl. Doporučuje se (kvůli konzistenci), abyste vždy dávali značky popisující plochu na relaci samotnou.
  • Pokud vnitřní cesta "inner" popisuje něco sama o sobě (např. les s dírou, kde díra je jezero), pak můžete vnitřní cestu označit přidáním značek přímo na ni.
  • V ostatních případech by vnitřní cesta měla zůstat bez značek.
  • Na směru cest nezáleží.
  • Na pořadí prvků v relaci nezáleží (ovšem dobře seřazený seznam prvků relace může pomoci ve snazší orientaci, až další uživatelé budou vaši relaci kontrolovat či dále upravovat).

Pravidla pro vytváření multipolygonů

Pravidla pro vytváření multipolygonů v OSM se řídí standardem OGC Simple Feature standard(en) (Obrázkové příklady vytváření multipolygonů(en)). Jakýkoliv multipolygon, který nesplňuje podmínky tohoto standardu (např. multipolygon s protínajícími se kruhy) není platným multipolygonem ani v OSM s jedinou výjimkou, kterou jsou dotýkající se vnitřní kruhy (viz dále).

Platný (uzavřený) polygon je definován jako spojení podmnožiny jeho cest které, když jsou spojeny jejich koncové uzly, vytvoří uzavřený polygon.

Otevřená cesta je definována jako spojnice uzlů, ve které první uzel je odlišný od posledního.

Podmínky pro vytvoření platné relace multipolygonu jsou následující:

  • Cesty obsažené v relaci multipolygonu MUSÍ tvořit jeden nebo více uzavřených polygonů. Když jsou cesty patřící do relace spojeny, musí tvořit jeden nebo více uzavřených řetězů (Wikipedia Polygon).
  • Právě dvě neuzavřené cesty a nikoliv více mohou sdílet koncový uzel.
    • Je-li koncový uzel sdílen méně než dvěma cestami, pak polygon nemůže být uzavřen a tedy není správně vytvořen. Příklad nesprávného použití 1
    • Je-li koncový uzel sdílen více než dvěma cestami, pak ho nelze jednoznačně uzavřít a je tedy nesprávně vytvořen. Příklad nesprávného použití 2 (Výjimka - uzly sdílené sudým počtem neuzavřených cest mohou být částí dotýkajících se vnitřních kruhů, což je v pořádku.)
  • Vnitřní polygony se nesmí překrývat s vnějšími polygony nebo se jich dotýkat. Překrývání se dá vyhnout přetvarováním polygonu.

Příklady

Jeden vnější a jeden vnitřní kruh

Starý hodně používaný typ relace multipolygon dovoloval použít pouze jeden kruh jako vnější hranici a libovolný počet vnitřních kruhů, všechny kruhy ovšem musely být tvořeny jedinou kruhovou cestou. Tento druh multipolygonu (který se měl jmenovat spíše jen multi-way) je samozřejmě stále používaný, ale pravidla byla od té doby více uvolněna, takže dnes je to jeden zvláštní případ obecného multipolygonu.
<relation id="1">
  <tag k="type" v="multipolygon" />
  <member type="way" id="1" role="outer" />
  <member type="way" id="2" role="inner" />
</relation>
Obrázek 1: Jeden vnější a jeden vnitřní kruh

Jeden vnější a dva vnitřní kruhy

<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>
Obrázek 2: Jeden vnější a dva vnitřní kruhy

Více cest tvořících kruh

Rozšířená definice multipolygonu dovoluje, aby se jakýkoliv vnější nebo vnitřní kruh skládal z více než jedné cesty. To je často využíváno při kreslení multipolygonů pokrývajících rozsáhlé oblasti, kde by nebylo praktické muset mít jen jednu cestu obklopující celou oblast.
<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>
Obrázek 3: Více cest tvořících kruh

Dva disjunktní vnější kruhy

Na rozdíl od dřívějších dob rozšířená definice multipolygonu umožňuje použít libovolný počet vnějších kruhů. Jedná se tedy o skutečný multipolygon.
<relation id="1">
  <tag k="type" v="multipolygon" />
  <member type="way" id="1" role="outer" />
  <member type="way" id="2" role="outer" />
</relation>
Obrázek 4: Dva disjunktní vnější kruhy

Dva disjunktní vnější kruhy a více cest tvořících kruh

Možnost tvořit kruh z více jednotlivých cest není omezena jen na vnější kruhy, ale může být použita i na vnitřní kruhy:
<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>
Obrázek 5: Dva disjunktní vnější kruhy a více cest tvořících kruh

Složitější kombinace všech rozšířených vlastností

Tento příklad ukazuje složitější kombinace všech rozšířených vlastností: tři vnější kruhy, dva z nich mají jeden nebo více vnitřních kruhů a hodně z nich se skládá z více než z jedné cesty.
<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>
Obrázek 6: Složitější kombinace všech rozšířených vlastností

Ostrov uvnitř díry

Z možnosti mít více vnějších kruhů v jedné relaci vyplývá, že můžete snadno nakreslit "ostrovy" uvnitř děr.
<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>

Takováto konstrukce by dříve vyžadovala použití několika relací multipolygonu. Jednu s cestou 1 jako vnější a s cestou 2 jako vnitřní a druhou s cestou 2 jako vnější a cestou 3 jako vnitřní. Takovéto vnořování multipolygonů je ovšem stále potřeba použít, pokud "ostrov" je uprostřed něčeho jiného než je plocha okolo. Ale pokud je "ostrov" z toho samého, co je venku, pak můžete takto jednoduše vytvořit díru v díře.

Obrázek 7: Ostrov uvnitř díry

Dotýkající se vnitřní kruhy

Pokud už vytváříte dotýkající se kruhy libovolného druhu, pak je tvořte pouze z uzavřených cest, jinak je jejich zpracování softwarovými klienty extrémně obtížné. Tedy cesty 2 a 3 na obrázku by měly být uzavřené cesty. Pokud reprezentují stejnou věc, pak je vhodnější je spojit do jediné cesty.

Někteří uživatelé spojují v relaci "multipolygon" vnitřní kruhy:
<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>

Aplikace by se při zpracovávání rozšířených multipolygonů měla pokusit vykreslit tyto případy, jako kdyby dotýkající se vnitřní kruhy byly jen jeden kruh. Tohle je jediný případ, kde se OpenStreetMap odchyluje od standardu OGC Simple Features, ve kterém není dovoleno vytvářet dotýkající se vnitřní kruhy, protože je to zbytečné (není třeba dělat dva vnitřní kruhy, protože je lze spojit v jeden). V OpenStreetMap to ovšem smysl mít může, pokud jsou dva vnitřní kruhy individuálně označeny. Například jedná-li se o les s mýtinou, která je z poloviny tvořena rybníkem a z druhé poloviny polem. Pak budete mít v lese dvě "díry", jednu značenou jako natural=water a druhou jako landuse=farmland. Tato možnost umožňuje uživatelům zjednodušení práce, protože jinak by museli vytvořit pouze jednu díru v lese a pak přidat dva samostatné polygony pro rybník a pole, což by bylo zbytečně moc práce navíc.

Vyhněte se ovšem vytváření polygonů, ve kterých by se vnitřní kruh dotýkal vnějšího.

Obrázek 8: Dotýkající se vnitřní kruhy

Příklady nesprávného použití

Zde jsou nějaké příklady nesprávně vytvořených multipolygonů, abyste měli představu, jak to nemáte dělat.

Neuzavřený polygon

Příklad neplatného multipolygonu jehož cesty 2 a 3 nejsou spojeny.
Obrázek 9: neplatný neuzavřený multipolygon

Překrývání, neuzavřené cesty stejné role

Příklad neplatného multipolygonu u něhož koncové uzly cest 2 a 3 jsou sdíleny více než dvěma cestami.
Obrázek 9: neplatný nejednoznačný multipolgyon

Další příklady

Značení

  • Doporučuje se přidávat veškeré značky, které popisují plochu, přímo na relaci a nikoliv na jednotlivé cesty. To v mnoha případech vede k vytvoření cest, které nemají žádné značky.
  • Způsob implementace kvůli kompatibilitě:
    • Způsob vykreslování je určen ze značení relace.
    • Pokud relace není označena, pak se způsob vykreslování určí ze značení vnějších cest.
    • Pokud vnější cesty mají různé značení, nebo není nalezen žádný styl, pak je to považováno za chybu.
    • Značení vnitřních kruhů určuje, jak budou vykresleny vnitřní oblasti.

Značení podrobněji

Tato sekce je určena pro vývojáře softwaru, uživatelé by vždy měli přidávat značky k relaci a nikdy k vnějším cestám!

Značení relace multipolygon je možno provést několika různými způsoby. Zde je seznam jednotlivých způsobů, s nimi spojené problémy a jejich řešení:

  • Existuje více než jedna vnější outer cesta:
    Relace má značky
    Použijte značky z relace. Ignorujte všechny značky na cestách.
    Relace nemá značky, ale jedna nebo více vnějších cest má stejné značky
    Jedná se o správný způsob. Vezměte značky z označených částí a použijte je na celou vnější cestu.
    Relace nemá značky, ale jedna nebo více vnějších cest má značky, které se ovšem vzájemně liší
    Tohle je problematická situace, které nemá jednoznačné řešení.
  • Existuje více než jedna vnitřní inner cesta:
    Jedna uzavřená cesta (může se sestávat z více částí) nemá žádné značky, ale jiná značky má
    Cesta bez značek je vykreslena jako díra, cesta se značkami je vykreslena podle svých značek.
    Různé uzavřené cesty s různými značkami
    Každá díra je vykreslena podle svých značek.
    Jedna uzavřená cesta (skládající se z více částí), kde některé části mají různé značky
    Pokud některé části nemají vůbec žádné značky, pak použijte značky, které jsou na ostatních částech. Pokud části mají různé značky, pak je vykreslení nejednoznačné (stejně jako u vnějších "outer" cest).

Vykreslování

  • JOSM je schopen správně vykreslit rozšířené multipolygony od verze 1203
  • Vrstvy na website OSM - závisí na použití příznaku osm2pgsql "--multi-geometry", který se liší dle vrstev. Více informací najdete ve článku v blogu Paula Normana [1](en) a v problému openstreetmap-carto github [2](en)
  • Plně podporováno v mkgmap(en) od verze 1497
  • GpsMid(en) podporuje velkou většinu specifikace rozšířených multipolygonů
  • Zde je návrh algoritmu(en) pro zpracovávání multipolygonů.

Doporučený způsob mapování

Multipolygony dovolují zakreslit geometricky stejný objekt různými způsoby: jako cesty nebo jako multipolygony, pomocí uzavřených nebo otevřených cest a se sdílenými nebo nesdílenými cestami.

To samozřejmě vede k otázce, který způsob je vhodné použít. Některé způsoby mají své výhody a tedy je jejich použití preferováno. U ostatních je jejich použití spíše věcí vlastní volby, či toho zda je uživatel začátečník, nebo již pokročilý uživatel.

Obecně se dá říci, že když jsou velké plochy označeny stejnou značkou, pak mohou být zakresleny buď větším počtem malých multipolygonů nebo uzavřených cest, anebo menším počtem velkých multipolygonů. U samotných multipolygonů jsou pak dvě možnosti zakreslení:

Způsob A
Vnitřní i vnější kruhy jsou vytvořeny vždy, když je to možné, z uzavřených cest. S výjimkou toho, když by cesty byly příliš dlouhé (delší než asi 2000 uzlů). Cesty obvykle nejsou sdílené mezi různými multipolygony.
Způsob B
Každá hranice mezi dvěma multipolygony je vytvořena cestou, která je pak sdílena mezi sousedícími multipolygony. Důsledkem toho je, že kruhy v multipolygonech jsou pak složeny z několika otevřených cest.

Otázka nejlepšího způsobu vytváření multipolygonů byla intenzivně diskutována po několik let na diskusní stránce Talk:Relation:multipolygon(en) a v různých fórech. Zatím nebylo dosaženo žádného závěru, ale z diskuse vyplynuly následující postřehy:

  • Mapování jednoduchých uzavřených ploch jako multipolygonů namísto jako cest zvyšuje počet objektů v databázi a prodlužuje časy vykreslování mapy. Těmto zbytečných komplikacím bychom se měli vyhýbat.
  • Sdílení částí cest mezi multipolygony (způsob B) je efektivnější, protože se vyhnete redundatnímu vkládání překrývajících se cest do mapy.
  • S multipolygony, které se skládájí z neuzavřených cest (způsob B), se hůře pracuje nezkušeným uživatelům i jednoduchým editorům, jako je Potlatch 2. Pak často dochází k nechtěnému zničení takových multipolygonů nezkušenými uživateli.
  • Mnoho zkušených uživatelů říká, že používání způsobu B je nepohodlné, obzvlášť když jsou multipolygony hodně velké.
  • Obrovské multipolygony způsobují zpomalení procesu vykreslování mapy.
  • Editace složitějších tvarů v JOSM je snazší, rychlejší a odolnější ke vzniku chyb, když se použije způsob A. Důvodem je, že způsob B vyžaduje smazání, vytvoření a vložení několika částí cest do správných relací multipolygonů.

Zatím nemáme žádná oficiální omezení pro vytváření multipolygonů, pokud jsou tedy geometricky správné. Samozřejmě přijetí ohleduplného stylu zakreslování pomůže udržovat mapu v čistém stavu a bude usnadňovat mapování každému uživateli.

Příklad v Potlatch 2

Zde je nějaká travnatá plocha uprostřed lesů:
Příklad multipolygonu v&nbsb;Potlatch 2 - začátek

Klikněte na vnější cestu:
Příklad multipolygonu v&nbsb;Potlatch 2 - po kliknutí na vnější cestu

Držte Ctrl a klikněte na vnitřní cestu:
Příklad multipolygonu v&nbsb;Potlatch 2 - po ctrl+kliknutí na vnitřní cestu

Všimněte si, že na panelu nástrojů se objevila ikona "koblihy":
Příklad multipolygonu v&nbsb;Potlatch 2 - objeví se ikona koblihy

Klikněte na ni:
Příklad multipolygonu v&nbsb;Potlatch 2 - klikněte na koblihu

Chcete-li vidět, jaké značky byly vlastně přidány, klikněte na Advanced:
Příklad multipolygonu v&nbsb;Potlatch 2 - klikněte Advanced

Multipolygon byl úspešně vytvořen:
Příklad multipolygonu v&nbsb;Potlatch 2 - multipolygon

Pomocné nástroje

Viz také