Wie mit der "overpass-api" Autobahnzubringer finden?

Hi Thomas,

das mit dem Leerzeichen nach dem Link ist schon seltsam. Aber Hauptsache es funktioniert. Vielen Dank :slight_smile:

Tja, mit der Angabe “A 8” wird die Autobahn 8 angesprochen, die ja auch dort verläuft.

Mein Problem ist jedoch, das der Name der Autobahn(en) für ein Gebiet nicht bekannt ist und dieser Name ausgegeben werden soll. Habe es schon mit ref=“*” probiert. Aber leider ohne Erfolg :expressionless:

Wenn ich dich richtig verstehe, versuch mal:

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

damit solltest du dann alle Autobahnen aus dem Bereich bekommen. Um die “Namensausgabe” müßtest du dich im Anschluss selber kümmern.

Darf man fragen, was du vor hast?

Hi, mann darf fragen :slight_smile:

Ich möchte für einen durch Variablen diffinierten Bereich später feststellen, ob es hier Autobahnzubringer gibt. Und wenn ja, welche Bezeichnung diese Autobahn(en) besitzt(en).

Der letzte Lösungsvorschlag zeigt zwar jetzt die Namen der Autobahnen an. Jedoch werden nicht nur die Autobahnzubringer angezeigt. Und da liegt das Problem :wink:

Dass die Zubringer nicht nagezeigt werden, liegt eigentlich nur daran, dass man das "motorway_link " falsch schreiben muss, dass die query ausgeführt wird. Dadurch ergibt sich aber zeitgleich das Problem, dass das Objekt "motorway_link " nicht existiert.

Eventuell kannst du ja auch mit der xapi glücklich werden - da klappt es nämlich…


http://overpass-api.de/api/xapi?*[bbox=12.7,47.6,13.0,47.8][highway=motorway_link][@meta]

Achtung: api und xapi tauschen X mit Y Koordinaten! (also bei der xapi Y1,X1,Y2,X2 verwenden und nicht X1,Y1,Y2,X2)

Nahmd,

Brauchst Du so etwas?
Also nicht die Kartendarstellung, sondern die zugrundeliegende Daten?

Ich habe (direkt in den OSM-Rohdaten des Regbz. Kölns) die Knoten herausgesucht, die sowohl zu einem Way(1) mit “highway=motorway” als auch zu einem Way(2) mit “highway=motorway_link” gehören und die die Ids der Objekte, die Koordinaten der Node und den “ref=” des Way(1) ausgeben lassen.

Möglicherweise wirst Du jemanden mit einer PostGis-Datenbank bitten müssen, Deine Daten mit einer passenden Abfrage bereitzustellen.

Gruß Wolf

Die Frage ist auch ob ein Autobahnkreuz als Zubringer durchgehen soll. Oft kommt man da ja gerade nicht auf die Autobahn wenn man nicht schon auf einer drauf ist.

Wenn ich dich recht verstehe, möchtest du motorway_link Wege suchen, und herausfinden zu welcher Autobahn diese hinführen.
Diese Frage ist mit der Overpass API allein nicht besonders leicht zu beantworten, weil die motorway_link Wege selbst diese Information nicht tragen (in der Regel - Beispiel), sonder nur die motorway Wege, an denen sie enden oder anfangen. So eine Abfrage ist zwar “irgendwie” möglich (siehe unten), aber dafür ist die Overpass API nicht wirklich geeignet.

[out:json];
way
  (47.7,12.8,47.89966803721,12.9)
  ["highway"="motorway"]
->.ab;
foreach.ab(
  ._;
  out body qt;
  node(w);
  way(bn);
  way._["highway"="motorway_link"];
  (
    ._;
    >;
  );
  out body qt;
);

Diese Query einfach in die Query Form (http://overpass-api.de/query_form.html) posten. Diese Query liefert alle Autobahnteilstücke (motorway) und jeweils darauf folgend (wenn vorhanden) abgehende oder ankommende Auffahrten (motorway_link).

Das ist korrekt. Die Bewohner dieses Schlosses können das bestätigen.

Die Nadeln gehören auch nicht an die Stelle, wo der motorway_link in einen motorway übergeht/einmündet, sondern dahin, wo ein nicht-Motorway/MotorwayLink in einen MotorWayLink übergeht, also letztendlich dahin, wo das Verkehrszeichen “Autobahn” steht.

Ein Motorway-Link kann aus Segmenten bestehen, z.B. wenn nach gemeinsamer Einfahrt er nach Fahrtrichtung sich aufteilt. Deshalb hat das Segment, das in Verbindung zu einer Nicht-Autobahn-Straße steht, möglicherweise keinen Kontakt zur Autobahn. Um an den Namen der Autobahn zu kommen, muss man also die Links “abfahren”, bis man eine Autobahn erreicht. Die Heuristik “nimm Name einer Autobahn in der Nähe” kann bei einer gerichteten Auffahrt in der Nähe eines Dreiecks irregehen.

Die vollständige und korrekte Lösung dieser Aufgabe muss möglw. auf einen Router zurückgreifen.

Oder man löscht einfach händisch die paar false Positives.

Gruß Wolf

Hallo Wolf

Die Gäste dieses Schloßhotel (am nächsten Autobahnkreuz Richtung Südost) fragen sich wahrscheinlich auch, ob das so eine gute Idee mit der Autobahn war.
Die Geräusche der Autobahn sind übrigens wesentlich dezenter, als man von der Lage her vermuten würde. Aber je nach Richtung in die man will, ist es schon etwas unübersichtlich, wie man fahren muss.

Bei den Nodes, die eine Ausfahrt markieren (motorway=junction), wäre man noch an der Nummer und dem Namen interessiert.

Edbert (EvanE)

Hi Thomas,

sowie ich das auf die schnelle sehe, erhält man mittels


http://overpass-api.de/api/xapi?*[bbox=12.7,47.6,13.0,47.8][highway=motorway_link][@meta]

nicht den Namen der Autobahn, oder? Zudem benötige ich auf jedenfall eine JSON Ausgabe :expressionless:

Nahmd,

Die Nadeln stehen jetzt da, wo der Link irgendetwas ungleich Link berührt (auch wenn das ein Fahrradweg ist).

Gruß Wolf

Hi tyr_asd

eigentlich suche ich eine Möglichkeit, in einem bestimmten Bereich feststellen zu können, ob hioer Autobahnauffahrten existieren und wenn ja, wie die Autobahnen heißen. :sunglasses:

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