Und nun zum Routingalgorithmus und wie er sich seinen Routing-Graphen erzeugt. Das ist eine echt spannende Frage!
Für die simple Frage “hat die Straße einen Gehweg” braucht es das noch nicht. Die Frage stellt sich erst, wenn die Lage der Gehwege im Routingalgorithmus berücksichtigt werden soll.
Und dann würden sie eine fehlende Querungsangabe genauso gnadenlos mit “fehlerhaftem” Umweg darstellen.
Aber nur, wenn man ‘crossing=no’ als Standardwert bei fehlenden Querungsangaben annimmt, siehe zwei Post früher an DieterDreist (#131). Das wäre jedoch inkonsistent zum bisherigen Umgang mit fehlenden Querungsangaben:
Bei Kreuzungen steht heute häufig nichts zu ‘crossing’, auch bei vielen Kreuzungen zwischen Gehwegen und Straßen. Vermutlich alle Router gehen davon aus, dass man dort die andere Straße queren kann, sonst würde das Routing oft schon an der ersten Kreuzung abbechen.
Genauso würde ich es auch mit Querungsangaben an Linien machen. Wenn keine Angabe da ist, so nehmen wir an, dass ein Queren möglich und der Querungswiderstand überall gleich ist.
Dann ergeben sich vier sinnvolle Querungsstellen:
-
wo ich auf eine Straße treffe
-
wo sich seitenraumbezogene Eigenschaften der Straße ändern können
-
wo Querungen getaggt sind
-
wo ich die Straße verlasse
Das sind
-
alle Knoten, wo Linien beginnen/enden/abzweigen.
-
alle Knoten mit Querungsangaben (außer ‘crossing=no’)
-
die Stellen, wo Start und Ziel der aktuellen Routingaufgabe liegen.
Ich denke, wenn der Routingalgorithmus dafür die virtuellen Gehwegkanten erzeugt, sollte er sie genau dort mit der Gegenseite bzw Fahrbahnkante verknüpfen. Dann solllte es auch keine fehlerhaften Umwege geben.
a. und b. kann man einmal im Pre-Prozess für das Netz machen.
c. ist für jede Routingaufgabe speziell, dafür müsste der Router jedes mal virtuelle Knoten im Graph setzen.
Ich bin mir allerdings nicht sicher, ob die Gehwege immer als eigene Kanten im Routing-Graphen abgebildet werden müssen. Womöglich ist das nicht notwendig, wenn es keine Angaben für Querungswiderstände gibt und sich routing-relevante Eigenschaften rechts und links nicht unterscheiden. Dann kann man einfach an der Hauptlinie routen wie bisher auch. Will man Querungen mit einem Malus versehen, wirds schon schwieriger.