NL:Relation:multipolygon
multipolygon |
Omschrijving |
---|
De relatie multipolygon wordt gebruikt om complexe gebieden weer te geven. |
Groep: eigenschappen |
Leden |
|
Status: de facto |
Gereedschappen voor deze tag |
Relaties van het type multipolygon worden gebruikt om complexe gebieden weer te geven.
Eenvoudige gebieden worden OSM in kaart gebracht door een rondgesloten weg te maken en die te taggen met iets dat aangeeft dat het een gebied is. Bijvoorbeeld: een rondgesloten weg getagd landuse=forest
wordt beschouwd als een gebied, maar een rondgesloten weg die is getagd junction=roundabout
niet.
Dit model werkt echter alleen voor gebieden waarvan de omtrek bestaat uit één enkele weg, en die geen gaten hebben. Elk gebied dat meer complex is dan dat (bijv. omdat de omtrek bestaat uit meerdere wegen aan elkaar, of omdat het gebied bestaat uit meerdere afzonderlijke delen of gaten heeft) vereist een relatie van het type multipolygon.
Kort gezegd, een relatie multipolygon kan een willekeurig aantal wegen hebben met de rol outer (de omtrek) en een willekeurig aantal wegen in de rol inner (de gaten), en deze moeten op enigerlei wijze geldige ringen vormen om een multipolygoon te zijn.
Vooral in Duitsland is type=multipolygon
ook gebruikt in plaats van type=boundary voor relaties van grenzen. Deze methode is niet breed geaccepteerd en zou als vervallen moeten worden beschouwd.
Tags
Sleutel | Waarde | Uitleg |
---|---|---|
type | multipolygon | Vertelt toepassingen om regels voor gebieden-gebouwen te gebruiken voor leden. |
... | ... | Alle tags die de multipolygoon beschrijven (namen, landuses, ...) |
Leden
Gebruik
Het bedoelde gebruik van multipolygonen is dit:
- Tags die de multipolygoon beschrijven (bijv.,
landuse=forest
) zouden in de relatie moeten staan. De buitenste weg(en) zouden niet getagd moeten zijn, tenzij zij op zichzelf iets beschrijven. Bijvoorbeeld: een bos zou kunnen zijn omsloten door vier hekken, in welk geval de vier wegen zouden moeten worden getagd met de tag barrier, maar zouden nog steeds kunnen worden gebruikt als leden "outer" van de relatie bos. Als u een gesloten weg heeft die de buitenste ring vormt en niet iets op zichzelf beschrijft, mag u deze tags ook op de buitenste ring plaatsen en de relatie laten als niet getagd. Als u meer dan één buitenste weg heeft (zie "Advanced Multipolygons" hieronder), dan heeft dit geen zin.Aanbevolen wordt (om redenen van consistentie) om de tags voor de multipolygoon altijd te plaatsen op de relatie.- Als de binnenste weg op zichzelf iets weergeeft (bijv., een bos met een gat waar het gat een meertje is), dan moet de binnenste weg als zodanig getagd worden.
- Anders de binnenste weg(en) niet getagd laten.
- De richting van de wegen is niet van belang.
- De volgorde van de leden van de relatie is niet van belang (maar juist gesorteerde lijsten van leden kunnen menselijke bewerkers helpen om de volledigheid te verifiëren).
Geldige voorwaarden voor multipolygonen
In het algemeen kan de relatie multipolygon worden gebruikt om multipolygonen te bouwen die voldoen aan de standaard OGC Simple Feature (Graphical voorbeelden van geldige validatie voor OGC). Alles wat geen geldige multipolygoon is overeenkomstig deze standaard (bijv. polygonen met kruisende ringen) zouden ook moeten worden beschouwd als een ongeldige relatie multipolygon, met de bekende uitzondering van de elkaar rakende binnenste ringen (zie hieronder).
We definiëren een geldige (gesloten) polygoon als de combinatie van een subset van lid-wegen die, als hun eindpunten worden samengevoegd, een gesloten polygoon vormen.
We definiëren een niet gesloten weg als een combinatie van knopen waarin de eerste knoop een andere is dan de laatste knoop.
De voorwaarden om een geldige relatie multipolygon te vormen, zijn de volgende:
- Lid-wegen van een relatie multipolygon MOETEN één of meer gesloten polyg(o)on(en) vormen. Wanneer de wegen die behoren tot de relatie worden gecombineerd, moeten zij één of meer gesloten kettingen vormen. [[1]]
- Exact twee niet gesloten wegen, en niet meer zouden een eindpunt moeten delen (bijv. de meest veraf gelegen knopen van een weg, weergegeven door de zwarte stippen in de afbeeldingen).
- Als een eindpunt wordt gedeeld door minder dan twee niet gesloten wegen, kan de polygoon niet worden gesloten en is hij niet goed gevormd. ongeldig voorbeeld 1
- Als een eindpunt wordt gedeeld door meer dan twee niet gesloten wegen, is het niet goed gevormd en kan geen duidelijk herkenbare gesloten polygoon worden geconstrueerd. ongeldig voorbeeld 2 (Uitzondering - punten die worden gedeeld door een even aantal niet gesloten wegen zouden deel kunnen uitmaken van elkaar rakende binnenste ringen, wat OK is.)
- Binnenste polygonen moeten buitenste polygonen niet overlappen of ze raken. Overlappen kan volledig worden voorkomen door opnieuw vorm te geven.
Voorbeelden
(Zie deze pagina voor een eenvoudigere handleiding om multipolygonen te leren maken.
Eén buitenste en één binnenste ring
Het eenvoudigste en meest gebruikte geval is één buitenste ring en één (of meer) binnenste ringen die bestaan uit enkele gesloten wegen.
<relation id="1"> <tag k="type" v="multipolygon" /> <member type="way" id="1" role="outer" /> <member type="way" id="2" role="inner" /> </relation> |
Eén buitenste en twee binnenste ringen
<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> |
Meerdere wegen die een ring vormen
Het schema voor gevorderde multipolygonen staat toe dat elke binnenste of buitenste ring bestaat uit meer dan één weg. Dit is nuttig voor multipolygonen die zeer grote gebieden omvatten, waar het niet praktisch zou zijn om één weg rondom het geheel te hebben:
<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> |
Twee afzonderlijke buitenste ringen
Anders dan bij eenvoudige multipolygonen staat de gevorderde relatie multipolygon elk aantal buitenste ringen toe en dus is een echte multipolygoon:
<relation id="1"> <tag k="type" v="multipolygon" /> <member type="way" id="1" role="outer" /> <member type="way" id="2" role="outer" /> </relation> |
Twee afzonderlijke buitenste ringen en meerdere wegen die een ring vormen
De mogelijkheid om een ring te combineren uit individuele wegen is niet beperkt tot buitenste ringen, het mag ook worden gebruikt voor binnenste ringen:
<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> |
Complexe combinatie van alle gevorderde mogelijkheden
Dit voorbeeld geeft een complexe combinatie van alle gevorderde mogelijkheden weer: drie buitenste ringen, waarvan twee één of meer binnenste ringen hebben, en veel daarvan bestaan uit meer dan één weg.
<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> |
Eiland binnen een gat
Vanuit de mogelijkheid om meerdere buitenste ringen in één relatie te hebben, volgt ook dat u eenvoudig "eilanden" kunt modelleren in een gat:
<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> Een constructie zoals deze zou eerder verschillende relaties multipolygon hebben vereist, één met weg 1 als buitenste en weg 2 als binnenste, als ook een met weg 2 als buitenste en weg 3 als binnenste. Dergelijk stapelen is nog steeds nodig als het "eiland" in het midden iets anders is dan het gebied aan de buitenkant, maar waar het "eiland" hetzelfde is kan het gewoon een gat in het gat gemaakt worden. |
Elkaar rakende binnenste ringen
Sommige mappers gebruiken de huidige relatie "multipolygon" voor het combineren van elkaar rakende binnenste ringen:
<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> Een implementatie van gevorderde multipolygonen zou deze proberen te renderen alsof de elkaar rakende ringen inderdaad één ring waren. Dit is het enige geval waarin OpenStreetMap afwijkt van de standaard OGC Simple Features. In Simple Features worden elkaar rakende binnenste ringen niet ondersteund omdat zij niet nodig zijn (waarom twee binnenste ringen maken als je ze kunt combineren tot één). In OpenStreetMap hebben zij soms zin indien individueel getagd, bijvoorbeeld een bos met een open ruimte die voor de helft wordt ingenomen door een meertje en de andere helft door weiland - u zou twee "gaten" in het bos hebben, één getagd als Vermijd echter het bouwen van multipolygonen waar een binnenste ring een buitenste ring raakt. Er is enige discussie over dit gedeelte op de pagina Overleg. |
Ongeldige voorbeelden
Enkele voorbeelden van ongeldige relaties multipolygon om te illustreren wat NIET zou moeten worden gedaan
Niet gesloten polygonen
Dit is een voorbeeld van een ongeldige multipolygoon omdat weg #2 en weg #3 niet zijn verbonden. |
Overlappende, niet gesloten lid-wegen die tot dezelfde rol behoren
Dit is een voorbeeld van een ongeldige multipolygoon omdat eindpunten van weg #2 en weg #3 meer dan twee wegen delen. |
Meer voorbeelden
- Meer voorbeelden van geldige multipolygonen op de pagina voorbeelden Multipolygonen.
- Voorstel voor voorbeelden van geldige en ongeldige ongewone configuratie
Taggen
- Voorgesteld is om alle tags die het gebied beschrijven op de relatie te plaatsen, en niet op de wegen. In veel gevallen zou dit kunnen resulteren in volledig niet getagde wegen.
- Implementatie voor compatibiliteit:
- Tekenstijl wordt niet afgeleid van het taggen van de relatie zelf.
- Als de relatie niet is getagd, wordt de tekenstijl van de buitenste weg gebruikt.
- Als de buitenste stijl niet overeenkomt of als geen stijl wordt gevonden, wordt het als een fout beschouwd.
- Taggen van binnenste leidt tot tekenen an binnenste.
Als de stijl van taggen voor binnenste overeenkomt met de buitenste stijl (een oude methode) zou de binnenste stijl als leeg moeten worden behandeld.
Gedetailleerd taggen
Dit gedeelte is voor ontwikkelaars van software, gebruikers zouden tags altijd aan de relatie moeten toevoegen en niet aan buitenste wegen!
Het taggen voor deze relatie multipolygon kan op nogal een aantal manieren worden gedaan. Hier is een lijst met gevallen, problemen en voorgestelde oplossingen:
- er is meer dan één buitenste weg:
- De relatie heeft tags
- Gebruik taggen van de relatie. Negeer alles op de wegen.
- De relatie heeft geen tags, maar één of meer vormende buitenste wegen hebben een identieke set tags
- Geldige gegevens, neem de tags van de getagde segmenten en pas ze toe op de volledige buitenste weg.
- De relatie heeft geen tags, en de vormende buitenste wegen zijn verschillend getagd
- Dit is een probleemsituatie met niet gedefinieerde resultaten.
- er is meer dan één binnenste weg:
- Eén ring (bestaande uit één of meer wegen) heeft geen tags maar een andere heeft wel tags.
- De ring zonder tags wordt gerenderd als een gat, de ring met de tags wordt gerenderd overeenkomstig zijn tags.
- Verschillende ringen met verschillende tags.
- Elk gat wordt gerenderd op zichzelf overeenkomstig zijn tags.
- Eén ring (bestaande uit twee of meer wegen) waar de wegen verschillende tags hebben.
- Als enkele wegen in het geheel geen tags hebben, gebruik dan slechts de tags van de andere wegen. Als de wegen verschillende tags hebben, dan is het gedrag niet gedefinieerd (hetzelfde als voor "buitenste" wegen).
Renderen
- JOSM is in staat om deze gevorderde multipolygonen te renderen sinds revisie 1203
- Lagen op de website van OSM - afhankelijk van het gebruiken van de vlag van osm2pgsql "--multi-geometry", die per laag varieert. Voor meer informatie, bekijk dit blogitem door Paul Norman [2] and this openstreetmap-carto github issue [3]
- Volledig ondersteund door mkgmap sinds revisie 1497
- [GpsMid] ondersteunt tenminste een grote meerderheid van mogelijkheden voor gevorderde multipolygonen
- Er is een voorgesteld Algoritme voor het verwerken van multipolygonen.
Stijl, beste praktijk
Multipolygonen openen de mogelijkheid om geometrisch identieke objecten te maken in verschillende stijlen: als wegen of als multipolygonen, met behulp van gesloten of open wegen, of met gedeelde of niet gedeelde wegen.
Dit werpt de vraag op welke stijl te gebruiken voor het in kaart brengen. Sommige stijlen hebben voordelen boven andere, en zouden als goede praktijk moeten worden beschouwd. Voor andere is de keuze meer een kwestie van voorkeur, of of iemand een ervaren of onervaren mapper is.
Meest algemeen geldt dat wanneer grote gebieden dezelfde tag delen, dat zij kunnen worden weergegeven ofwel door een groot aantal kleine polygonen of gesloten wegen, of door ene kleiner aantal grote multipolygonen. Voor multipolygonen zelf zijn twee mogelijke stijlen voor het in kaart brengen:
- Methode A
- Binnenste en buitenste ringen worden gemaakt van gesloten wegen indien mogelijk, behalve wanneer deze wegen bijzonder groot worden (in de orde van 2000 knopen). Wegen worden gewoonlijk niet gedeeld door verschillende multipolygonen
- Methode B
- Elke grens tussen twee multipolygonen wordt weergegeven door een unieke weg die dan wordt gedeeld door de aan elkaar grenzende multipolygonen. Consequentie daarvan is dat de ringen van de multipolygonen vaak zijn samengesteld uit verscheidene open wegen
De vraag van de beste praktijk voor multipolygonen is over de jaren intensief besproken, zie Talk:Relation:multipolygon en de forums. Een uitieindelijke consensus is nog niet bereikt, maar de volgende observaties zijn van toepassing:
- In kaart brengen van eenvoudige gesloten gebieden als multipolygonen in plaats van wegen vergroot het aantal objecten in de database en vergroot de tijd die nodig is voor het renderen. Deze aanvullende overhead aan complexiteit zou moeten worden vermeden.
- Delen van wegsegmenten tussen multipolygonen (methode B) biedt een representatieve efficiëntie door het vermijden van dubbele weergaven van overlappende wegen.
- Multipolygonen bestaande uit niet gesloten wegen (methode B) zijn moeilijker af te handleen door onervaren gebruikers, en eenvoudige bewerkers zoals Potlatch 2. Dit heeft vaak geleid tot het per ongeluk beschadigen van dergelijke multipolygonen door argeloze gebruikers.
- Veel ervaren gebruikers hebben hun ongenoegen geuit over de methode B, speciaal als de multipolygonen zeer groot zijn.
- Enorme multipolygonen veroorzaken een vertraging in het proces van renderen.
- Bewerken van complexe geometrieën in JOSM is gemakkelijker, sneller en minder gevoelig voor fouten met methode A. Dit omdat methode B het verwijderen, maken en invoegen van verscheidene wegsegmenten in de juiste relaties van de multipolygoon vereist.
Tot dusverre zijn er geen officiële beperkingen over hoe multipolygonen te gebruiken zolang zij maar geometrisch geldig zijn. Het adopteren van een weloverwogen stijl voor het in kaart brengen zal echter helpen de database schoon te houden en bewerken gemakkelijk te houden voor elke gebruiker.
Potlatch 2 voorbeeld
Hier is a grasachtig gebied binnen bosgebied:
Ctrl-klik op de binnenste weg:
Zie nu hoe een pictogram van een "donut" is verschenen in het vak van het gereedschap:
klik op Geavanceerd om de feitelijke tags te zien die zijn toegevoegd:
Potlatch 1 voorbeeld
In Potlatch 1 zouden rollen voor een relatie multipolygon moeten worden toegewezen aan het lid van de relatie zelf, en niet als afzonderlijke tags. Selecteer, in de modus Bewerken,, het lid van de relatie en plaats inner of outer in het vak op dezelfde regel als waar 'multipolygon' staat.
Hulpgereedschap
- Relation Check
- OSM Inspector heeft ondersteuning voor controles van multipolygonen
Zie ook
- Bekijk The Future of Areas voor enkele discussies over hoe de behandeling in OSM te verbeteren.