Reihenfolge der Ways in planet_rels

Wir versuchen eine Liste von Ways zu identifizieren die zwischen 2 Punkten liegen.
Dazu ermitteln wir alle Ways die von diesen Punkten ausgehen und suchen eine Relation die diese Ways enthält.
Das Problem ist, dass wir die Relation ermitteln können und auch die Ways der beiden Endpunkte finden, aber die Ways in der parts-Spalte der Tabelle planet_rels nicht sortiert sind.
Wie können wir die IDs der Ways finden die zwischen zwei Punkten liegen?

Vielen Dank für einen Tipp!

Hi Trafficjam2,

Willkommen hier im Forum.

Ich mappe zwar “nur”, so dass ich von der Datenauswertung auf Datenbankebene noch vom Hörensagen was weiss. (habe da ein interesssantes OSM Buch gelesen)

Damit Euch hier weitergeholfen werden kann, werden hier sicherlich etwas mehr Infos gebraucht.

Wie greift Ihr auf die Daten zu ?

Wie gesagt, ohne tiefer Ahnung zu haben, gehe ich davon aus, das ein lokales Duplikat der OSM Datenbank in einer “Relationalen Geo Datenbank” die Anfrage einfach erledigen können sollte.

Dann ist die Frage was ihr unter “zwischen 2 Punkten liegt” versteht.
Eine Route ? oder einfaches “Dazwischenliegen”.

Versucht mal Euer Problem etwas genauer zu beschreiben, dann weiss hier auch einer eine Lösung.

Was mein Kollege sagen will:
Wir haben es hier mit einem sehr einfachen Routing zu tun: Wir haben zwei Punkte (z.B. Ausfahrten), die auf einer gemeinsamen Straße liegen (z.B. Autobahn) und dort ist ein Stau gemeldet.
Für einen Layer mit Verkehrsmeldungen wollen wir den Streckenabschnitt dazwischen einfärben. Dazu brauchen wir die Ids der Ways, die zwischen den beiden Punkten liegen.
Dazu ermitteln wir per Datenbankabfrage die Straße, also eine Relation (in der OSM-Tabelle planet_rels).
Diese Tabelle enthält nun in den Spalten members und parts alle Ways dieser Straße (die ist aber z.B. diese gesamte Autobahn). Nun nahmen wir an, dass die members/parts eine geograf. sortierte Liste der Ways sind (wie sie auch in der OSM-Browser angezeigt werden, z.B. http://www.openstreetmap.org/browse/relation/401492)). Dort stehen z.B. die Ways 79797070 und 3996440 direkt hintereinander.
Wenn ich aber nun in der Tabelle planet_rels nachsehe, stehen die beiden Ways planet_rels 79797070 und 3996440 sowohl in der members- wie in der parts-Spalte weit auseinander und dutzende andere Ways liegen “dazwischen”.
Unsere Annahme, dass diese Liste geografisch sortiert ist, scheint also falsch zu sein.

Wie bekommt aber aber sonst die Sortierung raus? Der OSM-Browser muss das ja auch irgendwie ermitteln…

ACHTUNG:

nicht alle Straßen sind Relationen! Das ist nur für die absolute Minderheiten der Fall. Daher habt ihr den falschen Ansatz für euer Projekt.
Gruss
Walter

Ist ja interessant. Wie kann aber aber sonst (effizient) ermitteln, welche Ways zwei Punkte verbinden?
(Im Übrigen glaube ich schon, dass der Weg über die Relationen funktioniert, denn es handelt sich hier im TMC Locations und für die sind die zugehörigen Straßen - zumindest in Bayern - sehr zuverlässig als Relationen eingepflegt).

Also die Sortierung bei der Relation ist irgendwo gespeichert:
http://wiki.openstreetmap.org/wiki/OSM_Protocol_Changes_V0.5_to_V0.6#Relations

Aber:
http://wiki.openstreetmap.org/wiki/DE:Tag:highway%3Dmotorway
Hier steht die Empfehlung das Autobahnen zu Relationen zusammengefasst werden.

Und hier
http://wiki.openstreetmap.org/wiki/Autobahn#Allgemeine_Hinweise_f.C3.BCr_Autobahnen
idealerweise bilden die Strassen einen langen Pfad.

Da OSM die Reihenfolge in den Autobahnrelationen nicht benötigt und wie Walter schon anführt, es auch nicht sicher ist
das die Strasse einer Relation angehört, ist der Relationsansatz sicher nicht optimal

Die Relation an sich ist nicht sortiert. In den Daten haben sie zwar eine geordnete Reihenfolge, aber die muss nicht der Reihenfolge der Wege entsprechen.

Wenn ich die Relation 401492 in josm komplett lade und abspeichere, und das osm-file mit osm2pgsql in die Datenbank lade, stehen in parts die Elemente genauso wie in der html-Ansicht, und bei members umgekehrt sortiert mit nem w davor.

@aighes: wenn jemand in josm den Schalter “Relation sortieren” betätigt, werden die Wege bestmöglich sortiert, und auch in dieser Reihenfolge gespeichert. Bei dieser Relation ist dies der Fall, verlassen kann man sich allerdings nicht darauf.

Gruß,
ajoessen

Genau das meinte ich. Es kann sein, dass die Relation korrekt sortiert gespeichert wurde, dass muss aber nicht der Fall sein. Bei Autobahnen ist das sortieren ja auch trivial, da es keine Verzweigung gibt. Nimm mal eine Bundesstraße, die zwischendurch aufteilt in 2 parallele oneways. Schon ist das sortieren in josm überfordert. So jedenfalls mein Eindruck bei Radweg-Routen.

Das sollte aber bei den TMC-Relationen eigentlich nicht vorkommen. Sonst wäre was faul an den Daten.

gruß,
ajoessen

Mmh, überfordert klingt so negativ :wink:

Es gibt halt verschiedene Ansichten:
Wenn ich (Wander-)Wege/(Rad-)Routen sortiere, dann lass ich einen “Hauptpfad” durchgendend anlegen und die kleine Abzweigung (die wieder auf den Hauptweg zurückführt) kommt ganz hinten mit dran.
Andere Mapper haben diese 2 Alternativ-pfade lieber “lokal” zusammen und dafür keinen durchgehenden Weg (im JOSM-Relationseditor) mehr.

Ciao,
Frank

Ich verstehe schon, das ist nicht so ganz einfach…
Ich habe nun mal in den OSM-Files von Geofabrik nachgesehen: schon ist die Reihenfolge so, wie sie nach dem Datenbankimport erscheint, also unsortiert :frowning:

Aber welche Alternative habe ich denn, die korrekte Reihenfolge aus den Postgres-Tabellen zu ermitteln (wie die Browse-Funktion das ja kann)?
Oder ganz alternativ: gibt es eine andere Möglichkeit (ohne Nutzung von Relationen), die Way-Ids zwischen einem TMC-Punk und seinem Vorgänger oder Nachfolger auf der gleichen Straße zu ermitteln?

Kennst du:
Untersuchung der Nutzung von OpenStreetMap Daten zur Darstellung von TMC Verkehrsmeldeinformationen
Vortrag als mp4 oder als webm.

Toller Vortrag! Ich war leider nicht auf der FOSSGIS, umso schöner, dass es ihn auch online gibt. Danke!

solange die ways innerhalb der Relation keine Verzweigungen haben (Ringe können wir hier wohl mal ignorieren) und auch vollständig sind,
“schnappt” man sich einfach den ersten Way und sucht den nächten in den restlichen, wobei Start und Ende des Folgestücks auch mal gedreht werden muß. That’s all :wink:

10-20 Zeilen Code in der Sprache eurer Wahl.

Gruss
Walter