How can I export only Autobahn and Bundestraßen in OSM Germany

Hello everyone,
I’m a beginner with OSM and working on a project for university and I’ve been stuck for about two weeks so I’m hoping to get some help from here.

I need a functioning Network of Germany consisting of all Autobahn and Bundesstreet (Federal Streets) and later on will use this for a simulation.

I downloaded the full Germany map (4GB) and used this command to extract the data:

ogr2ogr -f “GeoJSON” -progress cleaned_network.geojson germany-latest.osm.pbf lines -where “highway IN (‘motorway’, ‘trunk’, ‘motorway_link’, ‘trunk_link’, ‘primary’, ‘primary_link’, ‘roundabout’, ‘mini_roundabout’)”

I imported this in QGIS and made sure that the network only consists of one component, there was some issue with roundabouts not beeing automatically connected but I snapped them together, however despite all points beeing connected there is a massive amount of points that are inaccessable when manually using those roads later on.

I know this goes more in the direction of QGIS but maybe someone can tell me if my command was already wrong or any ideas what else I could try? Been trying to figure this out for weeks now :frowning:

Hi,
Auch secondary kann Bundesstraße sein.
Du könntest noch auf die ref abfragen, bsp. ref BEGINS “B”.

2 Likes

Danke schonmal! Das mit ref werde ich mal versuchen, Secondary hatte ich auch schonmal drin, nur hat das leider mein Problem mit der connectivity nicht gelöst und meine Simulation wird dann zu langsam deshalb möchte ich es klein halten.
Also auf dem Screenshot hier hab ich meine Map in Komponenten unterteilt (Mit v.net.component in QGIS) also sprich meine Map besteht aus einer Komponente und alle Straßen sind verbunden, aber trotzdem gibt es bestimmte Strecken die nicht gefunden werden ca. 30-40% der Strecken funktionieren nicht und ich komme nicht drauf woran das liegen könnte.

Kannst Du genauer beschreiben, wie sich das äußert, dass “bestimmte Punkte nicht gefunden werden”? Was für einen Algorithmus verwendest Du da und wie ermittelst Du die Eingabekoordinaten dafür?

1 Like

Also ich benutze das MARS Framework meiner Universität, sprich an dem Framework kann ich nichts ändern. Und hier teste ich jetzt bestimmte wichtige Routen, später dann noch ausführlicher aber wenn die einfachen Routen schon nicht gehen muss es hier ja ein Problem geben…

Um den Code hier mal möglichst kurz zu halten:
-Das Framework bekommt eine GeoJSON
-Ich hole mir nur für start und end Koordinaten den Nearest Node
-Und dann hat das Framework eine Methode FindshortestRoute (startNode, endNode)
-Die returned mir dann null wenn keine Route gefunden wurde

Also diese Methode funktioniert auch für andere kleinere Maps und da der Code für 60% der Routen funktioniert gehe ich davon aus das ich hier keinen Fehler habe in dem Test.

Das Problem ist, das ich in QGIS bei “shortest Path (point to point)” egal was ich eingebe immer nur den Fehler bekomme…

Also den bekomme ich auch für Routen die in meiner Simulation funktionieren und jetzt habe ich das Problem von fehlerhaften Routen und kann nicht wirklich nachvollziehen woran dies liegt.

Die Eingabekoordinaten habe ich einfach im Stadtzentrum in QGIS auch nicht zwingend zu 100% auf der Straße gewählt, also bsp:
(50.9375, 6.9603, 52.5200, 13.4050, “Cologne to Berlin (West to East)”)

Bei meinem Framework wird ja der NearestNode ausgewählt und da ich außer ein paar Inseln am Rand nur eine Komponente habe ist das im Framework ansich kein Problem. In QGIS kenne ich mich da leider nicht aus müsste ich die start und end Koordinate da besser wählen?

wenn dein Ziel nur ist, den Graphen nicht zu groß werden zu lassen, und es nicht unbedingt nur Bundesstraßen sein sollen, dann bist du am besten bedient (m.E.) wenn du ref ignorierst und dir einfachh alle highway=motorway|trunk|primary und deren links herausfilterst, wie du es auch schon machst. Die roundabouts brauchst du nicht filtern, das sind keine "highway"s.

Macht QGIS denn überhaupt die Verbindung der Linien automatisch?

Das hatte ich zuerst gemacht, allerdings haben dann tatsächlich alle roundabouts gefehlt die gibt es bei Landstraßen teilweise, erst wenn ich die explizit mit exportiert habe waren die roundabouts auch mit drin. Das Problem war dann allerdings das die Roundabouts meine Map in Komponenten geteilt haben.

Deshalb habe ich um die Roundabouts die kann man über das tag selecten kann, ein buffer gemacht und dann die umliegenden Straßen gesnapped. Wenn ich dann nochmal v.net.components benutze habe ich nur noch eine Komponente sprich alles ist verbunden. Das Problem ist nur das leider trotzdem bestimmte Routen immer noch nicht befahrbar sind und da ich am Framework nichts machen kann, mir beim Testcode eigentlich sicher bin kann es nur an der Map liegen nur leider habe ich da gefühlt alles probiert und finde einfach nicht heraus warum manche Routen sich nicht benutzen lassen.

Sorry, ich verstehe leider nicht ganz deine Frage, also ich hab die GeoJson map bei QGIS importiert und kann mir über diverse Funktionen anzeigen lassen das sie Straßen eine Komponente sind…

Mein Verdacht ist, dass Dein Vorgehen grundlegend falsch ist für das, was das Framework erwartet. Ich kenne das Framework nicht, aber Routing-Engines wollen oft, dass der Input ein sauberes Knoten-Kanten-Modell ist. Das heisst, das Framework erlaubt ein “Abbiegen” nur am Anfang und Ende eines Segments, aber nicht unterwegs. In OSM ist es aber völlig denkbar, dass die Bundesstraße an dem Punkt, wo die Abfahrt abzweigt, nicht unterbrochen ist. Dann würde eine simple Routing-Engine dort auch kein Abbiegen erlauben. Du müsstest also in einem Vorverarbeitungsschritt erstmal dafür sorgen, dass es diese Verbindungen überhaupt alle gibt - das ist vermutlich das, was Du bei den Kreisverkehren mit “snapping” meintest.

Nur nochmal zum Besseren Verständnis:

Diese Route zum Beispiel relativ kurz funktioniert sowohl in QGIS über shortestPath als auch in meinem Framework nicht. Andere Routen wie quer durch Deutschland gehen dagegen. Das ist hier Grün weil es sich um eine Komponente handelt. Da halt ShortestPath nicht funktioniert wäre die Frage wie ich heraudfinden kann warum bereits dieses kurze Stück Route nicht funktioniert…

Wenn du einen kleinen Datensatz (Saarland?) importierst, was passiert dann?

Hm das ist eine interessante Idee, da habe ich so noch nicht drüber nachgedacht, das ist aufjeden Fall mal einen Versuch wert, weißt du ob es in QGIS eine Funktion gibt oder generell um ein Netzwerk so aufzubereiten das jede ein und ausfahrt quasi durch Knoten definiert und dazwischen die Straßen du meintest definiert sind, gibt es da ein tool um das nachzubessern. Ich werde parallel mal nachfragen, ich habe am Dienstag ein Meeting mit dem der das Framework leitet, dann könnte ich da schonmal fragen ob es daran liegen könnte.

Der Startpunkt dieser Route liegt auf der Nordseite des Schlossplatzes, d.h. man muss erstmal in die “falsche” Richtung fahren und irgendwie einen U-Turn machen, um das Ziel zu erreichen. (Vorausgesetzt, dass Du überhaupt Einbahn-Eigenschaften importiertst?) Die ersten paar Gelegenheiten für einen U-Turn sind secondary/tertiary-Straßen, werden also in Deinem Datensatz fehlen. Aber die kleine Querverbindung beim Friedrich II müsste eigentlich gehen…

Also die Attribute sind alle mit drin also da wird auch one way beachtet denke ich. Das ist zwar logisch was du sagst aber ich hätte trotzdem erwartet das eine Route gefunden wird, auch wenn man zu not durch halb Deutschland über Autobahnen einen kreis fahren muss. Aber hier siehst du zum Beispiel das in QGIS selbst für so eine kleine Route (beide auf der rechten Seite der Autobahn) mit shortestPath (point ot point) keine Route gefunden wird.

Aber die shortestPath von QGIS funktioniert bei mir auch für keine Strecke also ist auch die Frage wie aussagekräftig das jetzt is aber jedenfalls würde ich erwarten das auch wenn die Route sehr uneffizient ist für zwei punkte innerhalb der selben Komponente immer eine Strecke gefunden werden sollte.

Also selbst wenn ich nur das Saarland ohne Filter, ohne alles importiere und eine Route mit shortestPath (point to point) bilde findet QGIS keine Route. Verstehe ich da irgendwas falsch wie man die Koordinaten wählt oder so? Ich hab die jetzt einfach von einem Punkt auf der Straße manuell ausgewählt oder muss ich in der GEOJson einzelnd die exakten Koordinaten suchen?

In meinem Framework funktionieren die Routen aber, hier habe ich jetzt aber auch alle Straßenarten drin, was auf ganz Deutschland ressourcen technisch später für mich nicht infrage kommt, ich werde mal schauen ob es auch funktioniert wenn ich hier nur Autobahn und Bundesstraße benutze aber ohne dieses tool shortestPath kann ich das halt alles nicht in QGIS gescheit testen

Vorab: Ich bin hier kein Experte und kenne Framework auch nicht.

Aus anderer Erfahrung heraus würde ich prüfen, ob die Koordinaten, die da übergeben werden auch die (exakt!) passende Genauigkeit haben. Nicht, dass da die halbe Mannschaft auf Grund einer Rundung (das kann auch die 15. Nachkommastelle sein) “knapp daneben” liegt.

Habe ich probiert, hab die Koordinaten ein paar mal extra aus der GeoJSON datei genommen also aus den rohen Daten in dem ich mir die osmid der Straße genommen habe und dann in der geoJSON datei nachgeschaut habe.

Ich habe allerdings inzwischen eine weitere Spur gefunden, ich habe festgestellt das eine konkrete Straße die bei Benutzung zu fehlern geführt hat einen unvollständigen Inhalt hat im Feld other_tags…

Und zwar genau 255 Zeichen. Meine Vermutung ist das eine meiner Operationen die ich auf die Map ausgeführt hat um die Kreisverkehre einzubinden wie Buffer, Dissolved, Simplify, Merge, Snap to Geometry möglicherweise die maximal Länge der Attribute verändert hat was dann dafür sorgt diese Straße unbefahrbar zu machen. Ist aber nur eine Vermutung, ich arbeite gerade daran die Attribute in vollem Umfang zu behalten und werde dann nochmal testen ob es daran gelegen hat.

Nur für den Fall, dass wir uns missverstehen: Ich meinte nicht, ob die Koordinaten mit denen der Rohdaten in voller Länge identisch sind, sondern ob die übergebenen Koordinaten auch mit den Koordinaten, die der Router (tatsächlich) nutzt übereinstimmen. Im Zweifelsfall würde ich die Stützpunkte des Routing-Graphen und die Start-/Endpunkte (die, so wie ich es verstanden habe, auf genau den Stützpunkten liegen) auf die gleiche Art runden…

Also so eine Problem(-lösung), wie bei “Fließkommazahlen auf Gleichheit bzw. Ungleichheit testen
Nur so eine Idee.

Ich habe auch keine Ahnung von den verwendeten tools, aber ich würde erst mal schauen, ob es beim Import bzw. dem ganzen Vorgang Fehlermeldungen gibt, die man auswerten kann bzw. das Logging aktivieren. Wenn es ein anderes System gibt, bei dem zumindest etwas funktioniert, dann muss man doch nur noch schauen, wo die Unterschiede in den logs sind.