Sprich alles was man von ÖPNV-Relationen (Ptv1, PTv2) so braucht.
Im Landkreis Dingolfing-Landau suche (area[boundary=administrative][admin_level=6][name=‘Landkreis Dingolfing-Landau’]->.L)
alle Bus und Share_Taxi Routen-Relationen (rel(area.L)[route~‘(bus||share_taxi)’])->.R
Ausgabe deren Route-Master (sofern existent) (rel(br.R); out)
Ausgabe der Routen selbst (rel.R; out)
Ausgabe deren enthaltenen Relationen (rel(r.R); out)
Ausgabe deren enthaltenen Ways (way(r.R); out)
Ausgabe deren enthaltenen Nodes (node(r.R))
Nun kann es passieren, dass Route-Master (aus 1.) wiederum Routen als Member haben, die in 2. nicht enthalten sind, da sie im Suchgebiet nicht gefunden wurden. Dafür gibt es mehrere Gründe, die hier weniger wichtig sind.
Wie kann ich eine weitere Abfrage 2b. machen, die alle Routen der Route-Master aus 1. ausgibt, aber nicht die, die schon in 2. ausgegeben wurden?
Quasi nur noch die Routen ausgeben, die noch fehlen.
rel.R sind auch Routen ohne Route-Master, ein einfaches rel.M reicht nicht aus.
Evtl. ist rel.A; out; auch nicht optimal da “A” eh nur Relationen enthält.
Mein Tool käme mit doppelt vorhandenen Relation-ID im XML zurecht, ich will nur die Datenmenge klein halten.
Bei größeren Verbünden wie MVV in München und Umgebung sind das eh schon > 50 MB.
der Ansatz gefällt mir, wenn ich denn die Wirkung von ‘>>’ richtig verstehe. Der “recurse down relations” doch nur durch Relationen, oder?
Denn von allen Route-Master_Relationen brauche ich die
ID und tags der Relation
alle role, ID und type der Member
sofern die Member wiederum Route-Relationen sind … siehe folgendes
Von allen Route-Relationen brauche ich
ID und tags der Relation
alle role, ID und type der Member
tags der Member-Relationen
tags der Member-Ways
ID der Member-Nodes der Member-Ways
tags der Member-Nodes
Dazu müsste ich u.U. way(r); und node(r); an der richtigen Stelle mit einbauen und ein einfaches ‘>’, recurse down?
Ich spiele mal ein wenig damit rum, mal sehen, wie ich alles, aber nicht zu viel bekomme.
N.B.: mein Parser ist derzeit XML::Simple in Perl. Der ist aber grotten-langsam. Den will ich durch Geo::OSM::Parse ersetzen, wodurch ich für den MVV dann nicht mehr 6 Minuten sondern nur noch 40 Sekunden (allein) zum Parsen brauche. Die Analyse geht in 2-4 Sekunden.
Nicht ganz, >> löst zusätzlich auch noch die Relationen auf, aber nur eine Ebene. Ich weiß nicht, wie tief die route_master geschachtelt sind, ggfs. hilft da ein weiteres “>>;” weiter, um eine weitere Ebene aufzulösen. Ein generisches Auflösen wird mit 0.7.55 und “complete” möglich sein.
Ich habe es ausprobiert. Leider liefert ‘>>’ zu viele Infos (die tags) von Nodes, die mich nicht interessieren: Stop-Schilder, Traffic-Islands, Zug-Signale, Ampeln, … (tags aller Nodes, die auf den ÖPNV-Wegen liegen). Ich brauche “nur” die tags von Bus-Stops, … (Nodes, die Member einer Relation sind).
Aber das Thema scheint gelöst zu sein. Ich habe es auf einem kleineren Gebiet ausprobiert.
Ich hab die Query mal etwas schlanker gemacht, Ergebnis ist dasselbe, bis auf die Node/Way/Rel Reihenfolge. Auch gehe ich davon aus, dass in den route_master Relationen nur andere Relationen drin sind, ansonsten würde die Query auch hier Nodes und Ways auflösen:
Grund: z.B. beim DE-BY-VGN wurden einige Relationen als type=route getagged, obwohl sie vom Verwendungszweck her als type=route_master hätten getagged werden müssen.
Diese Fehler werden nur erkannt, wenn [type~‘route_master’] nicht im Spiel ist.