XML-Lesen: Relations

Hi!

Kurze Frage, wenn ich eine Relation habe, z.b.: http://www.openstreetmap.org/browse/relation/76826
Woher weiß ich die Reihenfolge der Wege damit ich ein Polygon daraus erstellen kann ?
Ist die Reihenfolge im XML sichergestellt oder muss ich mir das alles selber zusammensuchen ?

Du kannst nicht davon ausgehen, dass die Reihenfolge der Member einer Relation korrekt ist. Sprich du musst selber sortieren. Du kannst auch nicht von einer Vollständigkeit ausgehen. Sprich es kann sein, dass outer aus mehreren Segmenten besteht und dass davon eines fehlt.

Relationen haben in der OSM-Datenbank zwar eine definierte Reihenfolge der Mitglieder, bei Multipolygonen ist diese aber nicht bedeutungstragend. Das Zusammensetzen musst du daher selber erledigen. Manche Frameworks und Tools zum Verarbeiten von OSM-Dateien (z.B. Osmium, soweit ich weiß) haben so etwas bereits eingebaut.

Stimmt manchmal. Es hängt aber davon ab, aus welcher Quelle die XML-Daten stammen.

wie Henning schon schrieb, kannst du dich bei OSM Relationen auf nichts verlassen :wink:
Die Reihenfolge der Member ist nie garantiert stabil. Daher musst du dir die Reihenfolge selber zusammenfrickeln.
Sollte es sich um eine Gruppe von Ways handeln, die Ringe bilden (z.B. bei Grenzen oder landuse) so musst du “einfach” irgendwo anfangen und den nächsten passenden Member suchen bis keiner mehr da ist.
Bei Routen (Wanderwege, Busrouten, …) oder auch Flüssen sind aber redundante Wege und/oder Verzweigungen möglich und daher ist keine eindeutige Reihenfolge definierbar.

Gruss
Walter

Nach meinem Eindruck versucht man zumindest bei linienförmigen Relationen - z.B. Busrouten - eine Reihenfolge einzuhalten. Ansonsten ist diese spätestens dann nicht mehr eindeutig bestimmbar, wenn sich eine Route selbst berührt. Ohne Reihenfolge weiß man dann nicht, in welcher Richtung der Bus die entstandene Schleife durchfährt. In JOSM gibt es eigens dafür eine Sortierfunktion, die durch Markieren auch für partielle Abschnitte funktioniert. Auch die Reihenfolge von Bushaltestellen ist ohne entsprechende Vorgabe schwierig bis unmöglich zu bestimmen. Schlussendlich ist bei den präzisen Modellierungen von Buslinien und weiteren ÖPNV die korrekte Reihenfolge deswegen verpflichtend, weil ansonsten die Fahrtrichtung nicht bestimmbar ist.

Eine Garantie dafür gibt es aber nicht. Es kann durchaus sein, dass eine Anwendung die Reihenfolge auswertet und die andere nicht - wenngleich es sich anbietet, die Abarbeitung in der Richtung der Aufzählung vorzunehmen. Dann kann sich die Anwendung bei schon korrekter Reihenfolge die Sortierarbeit sparen. Auch von daher ist eine korrekte Reihenfolge hilfreich. Schlussendlich bleibt eine sortierte Relation auch für den Menschen besser überblickbar. Es lohnt sich also, eine unsortierte Linienrelation zu sortieren und so abzuspeichern.

Hey!

Danke für euren Input, habe das Problem mittlerweile gelöst ;-).
Berlin mal eben mit osm2mssql importiert:

Die Frage was sich mir noch stellt, es gibt Relationen die sollen Flächen darstellen und andere “Wege”.
(Multipolygon und z.b. Route)

Leider definiert aber niemand was den nun gewollt ist ?
Z.b. Gibt es relationen die sind laut Typ town oder skitour, wo ich mir zwar vorstellen kann was es ist, aber eine klare Definition wär da doch was feines :slight_smile:
Gibt es da irgendwo Informationen dazu ?

gibt es doch:
type=multipolygon ist ein MP
type=route ist eine Route

In den 2 Fällen… ja!
Jedoch gibt es relationen wie z.b.:
http://www.openstreetmap.org/browse/relation/3801

Das ist eine Brücke und hat als Type dementsprechend “bridge”…
Ist eine Brücke nun eine Fläche oder eine Sammlung an Linien ? (Polygon vs. LineString)

http://wiki.openstreetmap.org/wiki/Types_of_relation