[Talk-de] Otto-Normalmapper-kompatible Erklärung von Relationen

Tirkon tirkon33 at yahoo.de
Sa Feb 27 23:55:21 UTC 2010


"Nils Heuermann" <web at oemmes.net> wrote:

>>Was ist eine Rolle?

>Wenn man einer Relation [1] einen Weg oder Punkt (oder auch eine andere  
>Relation) als Mitglied (member) hinzufügt, kann man dem jeweiligen Objekt  
>eine Rolle (role) [2] zuordnen. Zum Beispiel gibt es bei  
>Abbiegebeschränkungen [3] die Rollen "from", "to" und "via", um anzugeben,  
>*von* welcher Straße man *über* welchen Punkt *in* welche Straße (nicht)  
>fahren darf.
>
>Bei den wayparts habe ich für die einzelnen Wege, für die man Spuren  
>eintragen möchte, die Rolle "way" vorgesehen [4]. Man könnte dann z. B.  
>für die im Thread diskutierten Ausnahmen eine Rolle "except" (oder wie  
>immer man sie auch nennt -> deshalb erfinden/definieren) für Punkte/Nodes  
>festlegen.
>
>Hoffe, das war verständlich :)
>
>Viele Grüße,
>Nils
>
>
>[1] http://wiki.openstreetmap.org/wiki/Relations
>[2] http://wiki.openstreetmap.org/wiki/Roles
>[3]  
>http://wiki.openstreetmap.org/wiki/DE:Relation:restriction#Mindestanforderung
>[4] http://wiki.openstreetmap.org/wiki/DE:User:Ömmes/Wayparts#Mitglieder

Ahja, Vielen Dank! :-) 

Relationen sind für viele User von OSM ein Buch mit sieben Siegeln.
Das schreibe ich einmal der algorithmisch korrekten Beschreibung im
Wiki zu. Vielleicht sollte man zur Einführung erst einmal alle Fünfe
gerade lassen, und ein anfängliches Grundverständnis vermitteln, indem
man auf dem Weg erst einmal verkomplizierende Sachverhalte wegläßt und
die Wahrheit nur stückweise ans Tageslicht gelangen läßt. So gerüstet
kann der User dann auf die algorithmisch korrekte Erklärung
losgelassen werden. Ich versuche im Folgenden einmal, dieses
Basisverständnis von Relationen, deren Sortierung und Rollen für
Nichtprogrammierer bzw. Otto Normalmapper zu vermitteln:

Manche Dinge in OSM lassen sich nicht durch die üblichen Punkte und
Wege mit angeschlossenen Tags in den Griff bekommen. Um komplexere
Zusammenhänge zu beschreiben, gibt es daher die sogenannten
Relationen.
 
Eine einfache Relation ist zunächst einmal nur eine Auswahl von Wegen
und Punkten, genannt Members (Mitglieder), welche in die Relation wie
in einen Korb "eingesammelt" werden. Der Typ der Relation beschreibt,
zu welchem Zweck die Relation dient. Ist der Zweck beispielsweise die
Beschreibung einer Route, werden die betroffenen Wegstücke in die
Relation "eingesammelt". Obwohl dem User intuitiv klar ist, dass die
Wegstücke in der richtigen Reihenfolge anzuordnen sind, ist die OSM
Datenbank nicht in der Lage, die korrekte Reihenfolge zu erkennen.
Daher muss man die Members in der richtigen Reihenfolge sortieren. 

Abgesehen von der Reihenfolge stehen die Members einer Relation vom
Typ Route gleichwertig nebeneinander. Bei anderen Typen von Relationen
können die Members nicht gleichwertig sein, sondern müssen spezielle
Aufgaben in der Relation erfüllen. Diese spezielle Aufgabe nennt man
Rolle. Hierzu hat jedes Member einer Relation ein Textfeld, in das
diese Rolle eingegeben werden kann. Die Rolle darf nur aus einem
einzigen Wort bestehen. Bleibt dieses Rollenfeld leer, wie im Falle
der Routenrelation, dann hat das Member keine spezielle Aufgabe/Rolle,
sondern nur eine Standardaufgabe. 

Anders in einer Relation vom Typ Abbiegerelation. Hier muss
spezifiziert werden, *von* welcher Straße man *über* welchen Punkt
*in* welche Straße (nicht) fahren darf. Dazu werden den Membern die
Rollen "from", "via" und "to" zugewiesen. 

Es muss also zunächst festgelegt werden, von welchem Typ die Relation
ist. Erst dann weiß man, welche Werte die Rolle annehmen kann. Ohne
die Typangabe der Relation ist die Angabe einer Rolle also sinnlos.

Auch eine Menge von Relationen können wiederum in eine Vaterrelation
eingesammelt werden.

[Ende des Erklärungstextes]

Was mir jetzt noch nicht klar ist: 

Was passiert, wenn beispielsweise 
*eine dem Relationstyp nicht zugeordnete Rolle verwendet wird?
*eine notwendige Rolle fehlt? 
*eine Rolle, die es eigentlich nur einmal geben sollte, mehrfach
vorkommt?
Funktioniert dann die Relation nicht mehr? Ist es von der Anwendung
abhängig, wie diese damit umgeht?

Was passiert, wenn eine Routenrelation unsortiert bleibt? Ist die
Sortierung ein reiner Service (,der aber empfohlen wird) für die
Anwendung oder ist sie zwingend gemäß der Spezifikation der
Datenbank?/der Routenrelation?





Mehr Informationen über die Mailingliste Talk-de