Auto (OSRM) versus Auto (GraphHopper)
Auch auf die Gefahr hin, dass ich mich noch unbeliebter mache als ich es eh schon bin, möchte ich noch einmal auf das Routing über die Nordumgehung A 30 zurückkommen. Ich wohne 1 km von der Abfahrt Bad Oeynhausen-Nord entfernt. Wenn ich zum Toom-Baumarkt in Löhne fahre, nehme ich die Route über die A 30. Sowohl Auto (OSRM) - Distanz: 10km, Zeit: 0:13 – als auch Auto (GraphHopper) - Distanz: 10km, Zeit: 0:09 – routen über die Autobahn. Maxspeed ist auf der Autobahn bisher noch nicht eingetragen. Nach endgültiger Fertigstellung wird es gemäß Andreas Meier, Leiter Straßen NRW in Bielefeld keine Geschwindigkeitsbegrenzung geben. Im Moment sind die Begrenzungen wie in Baustellen üblich. Auf dem Rückweg geht es mit Auto (GraphHopper) wieder über die A 30 (Distanz: 9.7km. Zeit: 0:08). Auto (OSRM) verweigert ja bekanntermaßen die Fahrt über die A 30. Alternativ (durch wiederholte Betätigung des Los-Buttons) bietet mir Auto (GraphHopper) eine Route über die alte A 30, jetzt bzw. bald B 61 (ab Gohfeld) an: 8.8km, Zeit: 0:14, ausschließlich Bundes und Landesstraßen. Auto (OSRM) führt dagegen u. a. über die Werster Str., Ringstr. und Kirchbreite zur Eidinghausener Str. (Distanz: 8.0km, Zeit: 0:15). Maxspeed 50 km sowie 0,6 km mit Tempo 70 und 2,5 km mit Tempo 30. Vielleicht kann mir als Bank-Revisor im Ruhestand mal jemand plausibel erklären, warum man für einen Router, der nicht einmal in der Lage ist 30 km-Zonen zu meiden, OSM verbiegen soll? Ulrich
Hi Ulrich, du bist nicht unbeliebt - Wir sind hier eine Gemeinschaft und wir machen gemeinsam eine Karte. On Thu, Dec 20, 2018 at 03:05:26PM +0100, Ulrich Wehmeier wrote:
Auch auf die Gefahr hin, dass ich mich noch unbeliebter mache als ich es eh schon bin, möchte ich noch einmal auf das Routing über die Nordumgehung A 30 zurückkommen.
[ ... ]
Vielleicht kann mir als Bank-Revisor im Ruhestand mal jemand plausibel erklären, warum man für einen Router, der nicht einmal in der Lage ist 30 km-Zonen zu meiden, OSM verbiegen soll?
Warum sollte der die meiden? Routing funktioniert das man das gesamte Straßennetz nimmt und darauf eine Verbindung sucht. Diese Verbindung muss irgendwelchen "kosten" genügen. Kosten sind hier aber nicht €uro sondern ein rein numerischer wert der von irgendwelchen tags abhängt z.b. können Kosten die Geschwindigkeit sein. Je langsamer desto Teurer. Damit sucht er dann die schnellste Verbindung. Theorie ist hier Dijkstra: https://de.wikipedia.org/wiki/Dijkstra-Algorithmus Oder die Weiterentwicklung A* https://de.wikipedia.org/wiki/A*-Algorithmus Alles andere sind nur optimierungen wie z.b. Contracted Hierarchies: https://en.wikipedia.org/wiki/Contraction_hierarchies Schnell ist hier natürlich nur zu raten anhand der Tags die auf den Wegen in OSM sind. Hier nehmen die Standard router mal die Straßenklasse d.h. ein secondary geht schneller als eine residential. Dazu kommen maxspeed, surface, lanes etc. Jeder router ist da subtil anders und benutzt andere Tag Kombinationen um zu ermitteln wie schnell man wohl auf einer Straße vorran kommt. Dazu kommen angenommene Zeiten für Links und Rechts abbiegen, Ampeln, Stopschilder etc. Alles das zusammen genommen ergibt dann die vermutete Zeit einer Verbindung. Wenn jetzt eine "Abkürzung" durch eine Zone 30 schneller ist wird die natürlich genommen - Weil die eben schneller ist. Oftmals ist das aber eher mangelndes tagging auf den eigentlichen routen. D.h. da fehlt dann ein maxspeed, surface, lanes etc. U.a. meine ich das OSMAnd auch "traffic calming" mit einbezieht. D.h. wenn du in der Zone 30 die Kissen oder Verengungen mit tags wird OSMAnd die kosten der Straße nach oben setzen und damit wird es unwahrscheinlicher das die genutzt wird. OSRM hat das Prozessieren dieser Tags in eine Scriptsprache ausgegliedert. Das Car profile in Lua findet sich hier: https://github.com/Project-OSRM/osrm-backend/blob/master/profiles/car.lua https://github.com/Project-OSRM/osrm-backend/blob/master/profiles/lib/way_ha... Nur um mal bei dem Beispiel der lanes zu bleiben: local lanes_string = way:get_value_by_key("lanes") if lanes_string and tonumber(lanes_string:match("%d*")) then lanes = tonumber(lanes_string:match("%d*")) end [ ... ] if width <= 3 or (lanes <= 1 and is_bidirectional) then width_penalty = 0.5 end D.h. wenn die lanes <= 1 ist und das KEIN oneway ist dann nimmt er die hälfte der Durchschnittsgeschwindigkeit. Weil man ja wenn einem jemand entgegen kommt man davon ausgeht das man auf die Bankette muss. Kurzzusammenfassung: Ob und welche Route genommen wird entscheiden die Kosten die in dem Graphen minimiert werden. Die Kosten eines Straßenabschnittes ergibt sich aus den tags. Flo -- Florian Lohoff f@zz.de UTF-8 Test: The 🐈 ran after a 🐁, but the 🐁 ran away
Moin Ulrich,
Vielleicht kann mir als Bank-Revisor im Ruhestand mal jemand plausibel erklären, warum man für einen Router, der nicht einmal in der Lage ist 30 km-Zonen zu meiden, OSM verbiegen soll? ich "kann" Dir dies nicht - bin aber auch der Meinung, dass wir in OSM erst einmal die 'Realität' hinterlegen sollten (für mich gibt es da zwar auch begründete Ausnahmen - aber das ist wieder ein ganz anderes Thema)...
Wie Florian gerade schon in seiner Antwort versucht hat zu beschreiben - alle RoutingEngines versuchen basierend auf den vergebenen OSM-Tags "kosten" zu errechnen - und dann wird die "billigste" Route als Ergebnis ausgegeben... Also um zu verstehen, warum GraphHopper die Route A ausspuckt und OSRM die Route B, muss man (leider) tatsächlich jedes einzelne Teilstück der möglichen Routen untersuchen und herausfinden basierend auf welchem OSM-Tag welche "Kosten" je Teilstück errechnet werden. Um es NOCH SCHLIMMER zu machen... Die "angenommenen Durchschnittsgeschwindigkeit" für eine Strecke ist nur *eine* Größe die in die Kostenberechnung mit einfließt - je nach Engine gibt es da auch noch so etwas wie "bevorzugte" Strecken... Was nun bevorzugt wird liegt wieder ausschließlich in der Implementierung für die einzelnen Fahrzeugklasse... Viele dieser zusätzlichen Routen Konfigurationen (neben der "schnellsten") werden aber in vielen WebOberflächen den Benutzern gar nicht erst zur Auswahl geboten - was es eben noch viel schwerer macht tatsächlich zu erkennen, WAS da unter der Haube abgeht ["schnellste" vs. "kürzeste" vs. "schönste" vs. "mit wenigster Steigung" vs. ... ]. Meiner Meinung nach: Es sollte das gemappt werden, was Du als ortskundiger vor Ort vor findest (also das von Florian häufiger zitierte "Map what's on the ground") - wenn Du von diesem Grundsatz zu Gunsten einer bestimmten RoutingEngine (oder auch ALLER) abweichst, dann solltest Du das zumindest in den OSM-Notitzen Dokumentieren... Ich bin da leider selbst auch nicht konsequent! - das führt aber hier & jetzt zu weit... [ https://www.openstreetmap.org/changeset/63236170]... Also Du kannst aus meiner Sicht jetzt zusätzliche Tags hinzufügen, die möglicherweise in der ein oder anderen RoutingEngine (und wir haben alle gelesen, das Florian OSRM bevorzugt) zu einer anderen "Kosten"-Berechnung führt - allerdings garantiert Dir leider niemand, dass diese zusätzlichen Tags in Deinem Sinne Richtig interpretiert werden [oder überhaupt in der Engine (in dem Modus) berücksichtigt werden] - also am Ende die von Dir als Mensch bevorzugte Route herausfällt... Wenn man versucht die Wechselwirkungen der OSM-Tags in einer Routing-Engine zu verstehen, kann man sich schon den ein oder anderen Knoten im Gehirn einfangen... Grüße Matthias <http://about.me/matthiasmarquardt>
participants (3)
-
Florian Lohoff -
Matthias Marquardt -
Ulrich Wehmeier