Routenplaner für Fahrradtouren in Golang back to frontpage

Vor Kurzem habe ich mir (endlich mal wieder) ein Fahrrad zugelegt, mit dem ich nun auch begeistert nahezu täglich unterwegs bin. Gerne plane ich am Computer meine Fahrradtouren und lasse mich dann von meinem Fahrrad-Navi leiten. Das funktioniert auch ziemlich gut, bis auf die wenigen Male, bei denen es mich auf Wege navigieren möchte, die fahrraduntauglich sind (weil die Straße zum Beispiel als Belag Kopfsteinpflaster aufweist). Ich bin mir bewusst, dass insbesondere die zugrundeliegenden Geoinformationen diese Art von Informationen besitzen müssen, um sie überhaupt in der Navigation berücksichtigen zu können. Aber nicht nur das: Diese Informationen müssen eben auch im Routenalgorithmus berücksichtigt werden.

Als Fahrradfahrer (und natürlich Informatiker ;-)..) habe ich mich gefragt, wie komplex es wohl sei, eine einfache Routennavigation für Fahrradfahrer zu entwickeln (die natürlich nicht den Anspruch hat, etablierten Systemen Konkurrenz zu machen – dafür fehlt es natürlich an noch vielem mehr). Aber zumindest wollte ich es nachvollziehen können. Der Ehrgeiz war geweckt, und ich habe schneller Ergebnisse erzielt, als ich anfänglich gedacht habe.

Fahrrad-Routenplaner in Golang

Innerhalb eines halben Tages war immerhin eine Routen-Engine (in Golang, ohne 3rd-party-libs) entwickelt, der ich heute eine kleine Web-GUI verpasst habe. OpenStreetMap ist super; ich selbst bin dort in meiner Gegend auch aktiv und finde es immer wieder erstaunlich, wie viele Detailinformationen sich dort finden. Neben der Anzahl Fahrspuren, Informationen zur Radzugänglichkeit und der Geschwindigkeitsbegrenzung findet sich eben auch – hin und wieder – eine Information zur Beschaffenheit der Straße oder des Weges (für obige besagte Kopfsteinpflasterstraße fehlte übrigens eine Information hierzu, die ich nachgetragen habe).

Fahrrad-Routenplaner in Golang

Einige der Informationen habe ich bislang in meinem Algorithmus berücksichtigt. Wenn die Fahrrad-Option aktiviert wird, werden Routen mit folgenden Bedingungen bevorzugt:

  • Fahrradwege und Parks,
  • aktive Beleuchtung,
  • schlechten Untergrund meiden,
  • 50 km/h-Straßen bevorzugen und
  • Fußgängerwege meiden.

Das funktioniert ziemlich passabel (und zeigt mir zumindest für eine Strecke, die ich fahren wollte, ein besseres Ergebnis als die Fahrradroute von Google Maps).

Dabei ist der Routenplaner insgesamt doch noch recht überschaubar:

$ wc -l *.go
148 calc.go
 29 geohelper.go
105 http.go
  8 main.go
371 osm.go
 81 route.go
742 insgesamt

Auch die Suchgeschwindigkeit ist völlig ausreichend (und von mir auch noch nicht auf Geschwindigkeit hin optimiert). Für eine 35 km lange Strecke quer durch Berlin werden ca. 20 ms auf meinem Rechner fällig, für kleinere Strecken, wie die im Video, befindet sich die Suche im Mikrosekundenbereich).

Ich habe zwei kleine Videos erstellt, die den Routenplaner vorstellen. Vielleicht baue ich ihn aus und stelle den Code mal zur Verfügung. Mal schauen, wie groß die Motivation noch so ist.

Hinweis: In den Screenshots und Videos findet sich als letzter Punkt der Route der Hinweise “Hier beginnt Ihre Route”. Das ist natürlich falsch und Copy&Paste geschuldet; eigentlich sollte der Text lauten “Hier endet Ihre Route”. Die Anzeige auf der Karte ist dann aber auch richtig. Ich bin nur zu faul, Screenshots und Videos zu aktualisieren. :-)

Die Videos am besten im Fullscreen ansehen.

1. Update (16. Mai 2014)

Ich habe nun einige Punkte ergänzt:

  • Start- und Zielmarker können per Drag & Drop nun beliebig gesetzt werden (dabei wird stets berücksichtigt, ob Start/Ziel für Auto oder Fahrrad festgesetzt wird und ggf. im Falle des Autos die nächstnähere befahrbare Straße ausgewählt)
  • Autobahnen werden bevorzugt für Autos und für Fahrräder gemieden
  • Straßenführung/Fahrtrichtung wird nun korrekt berücksichtigt
  • Abbiegebeschränkungen (nur gerade aus/nur links/nur rechts/nicht links/nicht rechts/nicht geradeaus/nicht umkehren und alle Kombinationen davon) werden korrekt berücksichtigt

Das folgende Video gibt einen kleinen Eindruck vom 1. Update:

2. Update (16. Mai 2014)

Abbiegehinweise (links/rechts/scharf links/scharf rechts/gerade aus) sind nun auch implementiert. Zudem habe ich angefangen, vorausschauende Spurhinweise zu geben (“links/rechts halten”). Für größere Fahrbahnen mit mehreren Spuren habe ich zumindest vor, eine Art Spurassistent zu implementieren, der einen auf die richtige Spur lotst, um der Tour zu folgen.

Fahrrad-Routenplaner in Golang

3. Update (1. Juni 2014)

Der Routenplaner ist in einer ersten Alpha-Version online.


New comment

Comments are moderated and therefore are not published instantly.





Comments

No comments yet. Be the first! :-)