Wie mit der "overpass-api" Autobahnzubringer finden?

Hi Netzwolf,

wie schon geschrieben, suche ich eigentlich eine Möglichkeit, in einem bestimmten Bereich feststellen zu können, ob hier Autobahnauffahrten existieren und wenn ja, wie die Autobahnen heißen. Notfalls könnte ich auch ohne den Namen der Autobahn zurechtkommen. Aber bedeutend schöner wäre es mit Namen. Ich programmiere übrigens in PHP. Solltest Du evtl. eine fertige Lösung besitzen würde ich mich freuen, wenn Du mir diese mitteilen könntest :wink:

Nahmd,

Was sich informell so einfach anhört, ist eine nicht triviale Anfrage an die Datenbank und vollständig korrekt sehr wahrscheinlich nur mit Hilfe eines Routers zu beantworten.

Da die Zahl und Lage der Anschlusstellen aber recht konstant ist, reicht es, die Anfrage einmal zustellen und das Ergebnis dann lokal zu speichern. Und wie ich oben schon schrieb: möglicherweise kann jemand, der Deinen Bereich in einer DB lokal vorhält, Deine Anfrage für Dich rechnen.

Wenn Du die Liste der Anschlusstellen hast, brauchst Du nur noch ein Skript, was bei Angabe einer Bbox die passenden Anschlusstellen aus der Bbox entnimmt und ausliefert. Das ist trivial. Die Liste zu bekommen ist die eigentliche Aufgabe.

Gruß Wolf

Eigentlich sollte jede (Autobahn-)Auf- und Abfahrt eine Referenz (ref=*) auf die entsprechende Straße haben. Wenn dir also die Nummer der Autobahn reicht, wärst du damit fertig. Für Auffahrten auf die Autobahn wird das auch relativ konsequent gemacht, bei den Abfahrten wird das gelegentlich weggelassen.

Auf dieser No-Name Karte von Simon Poole werden neben Straßen ohne Namen auch fehlende Referenzen bei Auf- und Abfahrten angezeigt. Damit kannst du recht schnell prüfen, ob in dem Bereich, der dich interessiert, alle Auf-/Abfahrten eine Referenz-Nummer haben und sie ggfs. selber ergänzen.

Dann gibt es noch das destination-Tagg, dass die Zielrichtung wie auf den Wegweisern (meist der nächste größere Ort) angibt. Auch das könnte dir helfen, wobei das sicher nicht so konsequent in den Daten enthalten ist, wie ref=*.
Laut Taginfo gibt es weltweit knapp 400 Tsd motorway_link, davon haben rund 9,5% ein ref-Tagg und 2,7% ein destination-Tagg. Die Anteile dürften für Deutschland deutlich besser sein.

Hoffe das hilft dir.
Edbert (EvanE)

Probiere mal bitte

http://overpass-api.de/api/interpreter?data=[out:json];(node[highway=motorway_junction](50.7,7.0,50.8,7.3);foreach(out;way(bn)[highway=motorway];out;);

Das liefert jeweils einen Node pro Ausfahrt und Richtung. Im Node ist der “name”-Tag der Name der Anschlussstelle. Danach folgen ein oder mehrere Ways, die im “ref” die Nummer der Anschlusstelle tragen. Passe dann die Bbox auf Deinen Bedarf an. Wenn die Abfrage einen Runtime-Error liefert, trage bitte “[timeout:900]” nach “data=” ein - dann hat der Server für 900 statt nur 180 Sekunden Geduld.

Im Detail: Der Server findet alle Nodes, die ein “highway=motorway_junction” Tag tragen. Das liefert die Anschlussstellen. Um die zugehörige Autobahn zu kriegen, braucht man jeweils die Wege, die durch diese Node durchlaufen. Das macht “way(bn)”, und mit Zusatz “highway=motoryway” werden nur noch Wege gefunden, die als Autobahnen getaggt sind. “Foreach” sorgt dafür, dass das für jede Node einzeln erfolgt; sonst müsste man danach wieder die Nodes anhand der Ids zu den Ways sortieren.

Viele Grüße,

Roland

Mit und ohne Leerzeichen hat die Abfrage das gleiche Ergebnis wie


http://www.overpass-api.de/api/interpreter?data=[out:json];way[ref="A 8"](47.7,12.8,47.89966803721,12.9);out;

das ‘[highway="motorway_link "]’ hat keinen Einfluss auf das Ergebnis.

Warum nun der Runtime-Error? Die Abfrage ‘way[highway=“motorway_link”];’ sucht nach allen Wegen (weltweit), die dieses Tag tragen. Das sind sehr viele, weswegen der Server die Abfrage hier abbricht. Mit Leerzeichen werden dagegen keine Wege gefunden, weswegen der Server die Abfrage ohne Abbruch erledigt. Das Ergebnis der Abfrage wird erst danach in “way[ref= …” gefunden, da nur nach dieser Abfrage eine Ausgabe kommt.

Viele Grüße,

roland

@Roland:

Danke für den Hinweis - ist eigentlich logisch (würde man nachdenken)

Dreht man jetzt nämlich die Abfrage um:


http://www.overpass-api.de/api/interpreter?data=[out:json];way[ref="A 8"];way[highway="motorway_link"](47.7,12.8,47.89966803721,12.9);out;

wird die Abfrage erfolgreich ausgeführt. :slight_smile:

Hallo Roland,

bei mir liefert die Anfrage leider folgenden Fehler:


The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.
Error: line 1: static error: Element "foreach" cannot be subelement of element "union".
Error: line 1: parse error: Unexpected end of input. 

Könntest Du da bitte nochmal einen Blick drauf werfen?

Gruß,

Danke für den Hinweis. Da ist eine Klammer zuviel gewesen. Mit

http://overpass-api.de/api/interpreter?data=[out:json];node[highway=motorway_junction](50.7,7.0,50.8,7.3);foreach(out;way(bn)[highway=motorway];out;);

sollte es wirklich gehen :slight_smile:

Viele Grüße,

Roland