Auto (OSRM) versus Auto (GraphHopper)

Florian Lohoff f at zz.de
Do Dez 20 15:56:42 CET 2018


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_handlers.lua

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 at zz.de
        UTF-8 Test: The 🐈 ran after a 🐁, but the 🐁 ran away


Mehr Informationen über die Mailingliste OSM