DE:Relation:multipolygon

From OpenStreetMap Wiki
Jump to navigation Jump to search
Public-images-osm logo.svg multipolygon
Multipolygon Illustration 6.svg
Beschreibung
Die Relation Multipolygon wird zur Darstellung von komplexen Flächen verwendet. Das sind insbesondere Flächen mit 'Löchern', großen Umfängen oder geographisch getrennt liegenden Flächenstücken. Beschreibung auf dieser Wikiseite bearbeiten Beschreibung im zugehörigen Datenelement bearbeiten
Gruppe: Eigenschaften
Mitglieder

  • geschlosser Linienzug ( Linienzug ) - outer
  • geschlosser Linienzug ( Linienzug ) - inner
Status: de facto

Relationen vom Typ Multipolygon werden zur Darstellung von komplexen Flächen verwendet.

Einfache Flächen werden durch einen geschlossenen Linienzug, versehen mit einem Attribut, das eine Fläche nahelegt, dargestellt. Zum Beispiel wird ein geschlossener Linienzug mit dem Attribut "landuse=forest" als Fläche interpretiert, nicht dagegen ein geschlossener Linienzug mit dem Attribut "junction=roundabout". Dies ist bei einfachen Flächen möglich, deren Umriss aus einer einzigen Linie besteht und keine Löcher aufweist.

Für alle Flächen, die komplexer sind, ist die Relation Multipolygon erforderlich. Zum Beispiel wenn die Fläche Löcher hat, oder bei extrem großen Flächen.

Es ist empfehlenswert, immer die einfachste mögliche Darstellung zu wählen. Einfache Flächen können von allen Editoren dargestellt werden und sind für alle Kartierer und Anwender der Daten am leichtesten verständlich und veränderbar.

  • Für einfache Flächen empfehlen sich einfache Polygone (geschlossene Linienzüge).
  • Für Flächen mit Löchern empfiehlt sich eine Multipolygon-Relation, die nur einfache Polygone (geschlossene Linienzüge) Fläche oder Gebiet enthält.
  • Für sehr komplexe Objekte oder Objekte, die sich über ein sehr großes Gebiet erstrecken, ist eine Multipolygon-Relation wie hier beschrieben notwendig.

Eine Relation Multipolygon kann eine beliebige Anzahl von äußeren (Umriss) und eine beliebige Anzahl von inneren Wegen (Löcher) aufweisen, und diese müssen gültige Ringe bilden. Es wird empfohlen, die äußeren und inneren Umrisse jeweils als geschlossene Linienzüge zu zeichnen!

Gültige Ringe sind gegeben, entweder durch einen geschlossenen Weg geschlosser Linienzug oder durch mehrere Wege Linienzug, die aneinandergekettet das Gleiche ergäben, also ebenfalls einen geschlossenen Weg geschlosser Linienzug.

Attribute

Schlüssel Wert Erläuterung
type multipolygon Für die Mitglieder der Relation gelten flächenbildende Regeln.

Mitglieder

OSM-Element Rolle Anzahl Erläuterung
geschlosser Linienzug outer (eins) oder mehr Geschlossene Linienzüge, die den äußeren Ring oder die äußeren Ringe der Fläche bilden.
geschlosser Linienzug inner null oder mehr Geschlossene Linienzüge, die den inneren Ring oder die inneren Ringe der Fläche bilden.
Linienzug outer (zwei) oder mehr Offene Linienzüge, die zu dem äußeren Ring oder den äußeren Ringen der Fläche zusammensetzbar sind.
Linienzug inner null oder mehr Offene Linienzüge, die zu dem inneren Ring oder den inneren Ringen der Fläche zusammensetzbar sind.

Alle offenen Linienzüge sind nach Zusammensetzung der Fläche jeweils Teil genau eines äußeren oder inneren Ringes. Bleiben offene Linienzüge übrig, oder wurde ein Linienzug zweimal verwendet, ist die gesamte Relation kein gültiges Multipolygon.

Jedes Multipolygon muss mindestens einen äußeren Ring definieren. Dieser ist in der Mitgliederliste angegeben, entweder durch einen geschlossenen Linienzug oder durch mehrere offene Linienzüge, die zusammengesetzt einen geschlossenen Linienzug ergeben.

Verwendung

Multipolygone werden folgendermaßen verwendet:

  • Attribute, die das Multipolygon beschreiben und somit für die gesamte Fläche abzüglich der Inner-Bereiche gelten sollen (zum Beispiel "landuse=forest"), gehören zur Relation. Die äußeren Linienzüge erhalten nur Attribute, wenn sie etwas Eigenes darstellen. Zum Beispiel kann die Außengrenze eines Waldes und eines Naturschutzgebiets identisch sein, wohingegen die Lichtung oder der See im Wald nicht zum Wald gehört, wohl aber zum Naturschutzgebiet. Hier wird das Multipolygon als Wald beschrieben und die äußere Fläche als Naturschutzgebiet.
  • Wenn der innere Linienzug etwas Eigenes ist, so kann dieser mit entsprechenden Attributen versehen werden, zum Beispiel das "Loch" in einem Wald, wenn es sich um einen See handelt.
  • Ansonsten erhalten die inneren Linienzüge keine Attribute.
  • Die Richtung der Linienzüge spielt keine Rolle.
  • Die Reihenfolge der Mitglieder der Relation spielt keine Rolle. Sie kann jedoch für den Leser hilfreich sein.
  • Die Relation Multipolygon ermöglicht generell die Erstellung von Multipolygonen die dem "OGC Simple Feature Standard" entsprechen. Nach dieser Norm ungültige Multipolygone sind auch ungültige Multipolygon-Relationen, zum Beispiel Polygone mit sich überschneidenden Ringen. #Sich berührende innere Ringe sind jedoch gültige Multipolygon-Relationen.

Beispiele

Ein Außen- und ein Innenring - jeweils geschlossene Linienzüge

<relation id="1">
  <tag k="type" v="multipolygon" />
  <member type="way" id="1" role="outer" />
  <member type="way" id="2" role="inner" />
</relation>

Hinweis: Der innere Ring darf den äußeren höchstens in einem Knoten (Punkt) berühren!

Zur Historie: Der Vorgänger der Relation Multipolygon gestattete ursprünglich nur einen Außenring und mehrere Innenringe, wobei diese jeweils aus geschlossenen Linienzügen bestehen mussten. Beide Einschränkungen wurden im später überarbeiteten, derzeit verwendeten Typ aufgehoben.

Bild 1: Ein Außen- und ein Innenring

Ein Außen- und zwei Innenringe

<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>
Bild 2: Ein Außen- und zwei Innenringe

Mehrere Linienzüge bilden einen Ring

Beim komplexen Multipolygon kann jeder Außen- oder Innenring aus mehr als einem Linienzug bestehen. Dies ist für Multipolygone sinnvoll, die extrem große Flächen umschließen (z.B. den Bodensee oder Gardasee), oder wenn Linienzüge verschiedenartiger, benachbarter Flächen nicht überlappen sollen.
<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>
Bild 3: Mehrere Linienzüge bilden den äußeren der beiden Ringe
Die Verwendung von Multipolygonen ermöglicht es, die gemeinsame Flächengrenze benachbarter Flächen genau einmal darzustellen.
<relation id="42">
  <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>
<relation id="35">
  <tag k="type" v="multipolygon" />
  <member type="way" id="1" role="outer" />
  <member type="way" id="4" role="outer" />
</relation>
Bild 3+: Linienzug 1 ist eine gemeinsame Flächengrenze beider Flächen

Zwei getrennte äußere Ringe

Bei der komplexen Relation Multipolygon ist eine beliebige Anzahl äußerer Ringe gestattet.
<relation id="1">
  <tag k="type" v="multipolygon" />
  <member type="way" id="1" role="outer" />
  <member type="way" id="2" role="outer" />
</relation>

Hinweis: Die äußeren Flächen (Linienzüge) dürfen sich höchstens in einem Knoten (Punkt) berühren!

Bild 4: Zwei getrennte äußere Ringe

Getrennte äußere Ringe und innerer Ring aus mehreren Linienzügen

Auch innere Ringe können aus mehreren Linienzügen bestehen.
<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>
Bild 5: Getrennte äußere Ringe, innere Ringe aus einem Linienzug oder aus mehreren Linienzügen

Komplexe Kombination aller Möglichkeiten

Dieses Beispiel zeigt die komplexe Kombination aller Möglichkeiten: Drei äußere Ringe, einer mit einem und einer mit drei inneren Ringen, wobei viele Ringe aus mehreren Linienzügen bestehen.
<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>

Hinweis: Bitte solche komplexen Multipolygone nur sehr überlegt einsetzten. Eins der OSM-Mottos lautet: KUSS - kurz und sehr simpel (KISS - keep it simple stupid).

Bild 6: Komplexe Kombination aller Möglichkeiten

Insel in einem Loch

Zur Darstellung einer “Insel” in einem Loch wird ein zweites Multipolygon verwendet, welches das Loch als äußeren und die Insel als inneren Ring enthält.
<relation id="1">
  <tag k="type" v="multipolygon" />
  <member type="way" id="1" role="outer" />
  <member type="way" id="2" role="inner" />
</relation>
<relation id="2">
  <tag k="type" v="multipolygon" />
  <member type="way" id="2" role="outer" />
  <member type="way" id="3" role="inner" />
</relation>

Eine zuvor propagierter Verzicht des inneren Multipolygons wird nicht empfohlen, da dies zum einen logische Inkonsistenzen enthält (die von der Insel beschriebene Fläche wäre gleichzeitig innerer und äußerer Ring des gleichen Objekts) und zum anderen nur dann zu einem korrekten Rendering führen kann, falls das Loch keine Tags enthält (eine Situation, die in Anwendungen so gut wie ausgeschlossen ist).

Bild 7: Insel in einem Loch

Sich berührende innere Ringe

Einige Kartografen zeichnen "Multipolygone" mit sich berührenden inneren oder äußeren Ringen. Laut Abschnitt #Verwendung sind dies gültige Multipolygon-Relationen, auch wenn sie nicht der OGC-Norm für Multipolygone entsprechen.

OSM folgt dieser Norm nicht, JOSM informiert Multipolygon-Ringe teilen sich Punkte.

<!-- zu Bild 8 mit innliegenden Objekte -->
<relation id="1">
  <!-- Nicht OGC-konform, aber valide OSM-Multipolygon-Relation -->
  <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>
<way id="2">
  <tag k="landuse" v="farmland" />
  <nd ref="5"/>
  <nd ref="2"/>
  <nd ref="3"/>
  <nd ref="6"/>
  <nd ref="5"/>
</way>
<way id="3">
  <tag k="natural" v="water" />
  <tag k="water" v="lake" />
  <nd ref="1"/>
  <nd ref="2"/>
  <nd ref="3"/>
  <nd ref="4"/>
  <nd ref="1"/>
</way>

Hinweis: Da Multipolygon-Daten vom OSM-Server derzeit nicht darauf geprüft werden, ob diese auch gültige Multipolygon-Züge definieren (siehe #Verwendung), können ungültige Daten eingetragen werden. Derzeit prüft er nur, ob Multipolygon-Relationen gültige Relationen sind.

Bild 8: Sich berührende innere Ringe

Das Beispiel zeigt einen Wald (grau) mit einer Lichtung, die je zur Hälfte See (blau) und Farmland (grün) ist. Der Kartograf zeichnet alle Ränder der drei Objekte als je einen geschlossenen Weg. Da sich die Kanten zwischen See und Farmland berühren, führt die Aufnahme beider Ringe in die Relation als inner zu einem gemäß OGC-Norm ungültigen Multipolygon.

Das Problem kann entweder durch das Zeichnen eines weiteren überlappenden, geschlossenen Weges um See und Farmland behoben werden (der dann als innerer Ring benutzt wird), oder mittels der in Bild 8a gezeigten Methode.

<!-- zu Bild 8a mit innliegenden Objekten -->
<relation id="9">
  <tag k="type" v="multipolygon" />
  <tag k="landuse" v="forest" />
  <member type="way" id="1" role="outer" />
  <member type="way" id="2" role="inner" />
  <member type="way" id="3" role="inner" />
</relation>
<relation id="78">
  <tag k="type" v="multipolygon" />
  <tag k="landuse" v="farmland" />
  <member type="way" id="2" role="outer" />
  <member type="way" id="4" role="outer" />
</relation>
<relation id="33">
  <tag k="type" v="multipolygon" />
  <tag k="natural" v="water" />
  <tag k="water" v="lake" />
  <member type="way" id="3" role="outer" />
  <member type="way" id="4" role="outer" />
</relation>
Bild 8a: Sich berührende äußere Ringe zweier innliegender Flächen, Linienzüge 2,3,4 sind gemeinsame, genau einmal eingetragene, überlappungsfreie Flächengrenzen (Alternative nach Spezifikation)

Loch in Loch (in Loch ...)

Es kann Löcher in den Löchern eines Multipolygons geben. Zum Beispiel ein Wald mit einer Lichtung und einer Baumgruppe auf der Lichtung.
Beispiel noch nicht vorhanden.

Gemäß "OGC Simple Feature Standard" wird dies durch abwechselnde äußere und innere Ringe dargestellt. Im Beispiel Wald sind der Waldrand und die Baumgruppe äußere Ringe und die Lichtung innerer Ring. Das kann beliebig so weiter gehen, sollte aber zum Wohle anderer Kartografen begrenzt bleiben. Eventuell unterstützen dies auch nicht alle Editoren oder Renderer.

Bild noch nicht vorhanden.

Weitere Beispiele

Weitere Beispiele finden sich auf Relation:multipolygon/Examples, mit dem Hinweis, Multipolygone nur zu verwenden, wenn es keine andere Möglichkeit gibt. Die Segmentierung von Straßen (highway=*) zur Ringbildung soll nach Möglichkeit vermieden werden, denn dies kompliziert für einige Mapper Änderungen der Straßenwerte. Eine Alternative ist, überlappende Wege auf den für die Flächenbildung relevanten Straßenabschnitten/-segmenten zu zeichnen, die sonst durch Teilungsoperationen herausgelöst würden (Tastaturkürzel: Taste-F (follow/verfolgen) nutzen). Gleiches gilt für ähnlich linienartig gemappte Objekte, wenn deren Segmentierung vermieden werden soll. Allerdings komplizieren auch überlappende Wegobjekte für einige Mapper Änderungen an OSM-Daten.

Attribute (Tags)

  • Es wird empfohlen, alle die Fläche beschreibenden Attribute der Relation und nicht den Linienzügen zuzuordnen. Dies wird in vielen Fällen zu Linienzügen ohne jegliche Attribute führen.
  • Um kompatibel zu bleiben gilt (nur für Software-Entwickler):
    • Der Zeichenstil richtet sich nach der Relation.
    • Wenn die Relation keine Attribute hat, wird der Zeichenstil der äußeren Linienzüge verwendet.
    • Wenn die Zeichenstile der äußeren Linienzüge nicht zusammenpassen oder kein Stil gefunden wird, so ist dies ein Fehler.
    • Attribute an inneren Linienzügen ergeben den Zeichenstil für die inneren Ringe. Sind Zeichenstil für innere und äußere Ringe identisch (alte Methode) sollte der Zeichenstil für die inneren Ringe als nicht angegeben betrachtet werden.

Attribute im Detail

Dieser Abschnitt ist für Software-Entwickler. Kartierer sollten die Attribute immer an die Relation und nicht an die äußeren Ringe schreiben!

Für die verschiedenen Fälle und deren Probleme werden folgende Lösungen vorgeschlagen:

  • Es gibt mehr als einen äußeren Linienzug:
    • Die Relation ist mit Attributen versehen:
    Es gelten die Attribute der Relation. Attribute der Linienzüge werden ignoriert.
    • Die Relation hat keine Attribute, aber ein oder mehrere äußere Linienzüge haben identische, gültige Attribute:
    Die Attribute gelten für den kompletten äußeren Linienzug.
    • Die Relation hat keine Attribute, und äußere Linienzüge haben unterschiedliche Attribute:
    Dies kann beliebig interpretiert werden.
  • Es gibt mehr als einen inneren Linienzug:
    • Ein geschlossener Linienzug, der aus mehreren Segmenten bestehen kann, hat keine Attribute aber ein anderer hat Attribute:
    Der Linienzug ohne Attribute ist ein Loch. Die Attribute des anderen Linienzugs gelten für diesen.
    • Verschiedene geschlossene Linienzüge mit verschiedenen Attributen:
    Für jedes Loch gelten seine eigenen Attribute.
    • Ein geschlossener Linienzug, der aus mehreren Segmenten besteht, wobei die Segmente verschiedene Attribute haben:
    Für Segmente ohne Attribute gelten die Attribute der anderen Segmente. Falls die Segmente verschiedene Attribute haben, so kann dies beliebig interpretiert werden.

Rendern

  • JOSM ab Version 1203 kann komplexe Multipolygone verarbeiten.
  • de:Osmarender (T@H) unterstützt komplexe Multipolygone. (nicht mehr gepflegt)
  • Die für OpenStreetMap verwendete Mapnik-Konfiguration unterstützt komplexe Multipolygone weitgehend.
  • mkgmap ab Version 1497 unterstützt komplexe Multipolygone voll.
  • Es gibt einen empfohlenen Algorithmus zur Verarbeitung von Multipolygonen.

Wie erstellen

JOSM

Werkzeuge

Mögliche technische Erfassungsunstimmigkeit

Siehe auch