BRouter: offline Fahrrad-Routing für Android

Zugegeben, auf längeren Touren (z.B. 70 km), habe ich noch keinen automatischen Router benutzt. Da stecken einfach zu viele persönliche Vorlieben drin, die eine Software nicht kennt und auch schlecht durch OSM-Tags ausgedrückt werden können. Nicht zu vergessen in der Routing-Metrik sind auch die Einkehrmöglichkeiten. Bisher hat mich noch keine Routing-App gefragt, ob ich lieber zum indischen Restaurant gehe oder doch zum Italiener (beide als OSM-POI im Kartenmaterial). Dazu kommen noch dynamische Probleme. Die Route und Einkehrmöglichkeiten werden soweit mit dem Regenradar verknüpft, dass man pünktlich zur großen Regenschauer im Lieblingsrestaurant sitzt und danach wieder trocken weiterfahren kann. Erstaunlich, aber es hatte im ersten Versuch funktioniert (auch dank der guten Regenradar-App von wetteronline). Als Routing-Engine habe ich dazu ein größeres neuronales Netz am laufen.

Meine längste geführte Radstrecke mit OsmAnd war ca. 30 km. An sich wäre die Strecke Ok gewesen, wenn es nicht wieder über die Berge gehen würde, die ich auf der Rücktour übers Tal vermeiden wollte.

Die von dir beschriebenen Zacken sind mir noch nicht aufgefallen. Aber manchmal kam es vor, dass partout ein bestimmter Weg verweigert wurde, auch als ich schon kurz davor stand. Einmal (pedestrian mode) habe ich versucht, in JOSM dafür eine Erklärung zu finden, aber es war alles richtig vernetzt, die Nodes verknüpft, der Weg als begehbarer Pfad getaggt. Keine Ahnung. Vielleicht habe ich die Verbots-Schemata nicht verstanden oder es war ein Bug in OsmAnd.

Kommt der Eindruck “vielleicht doch besser aussen rum” vielleicht durch eine andere Metrik zustande? Indem bestimmte Wege einfach bevorzugt werden? In BRouter war mir positiv aufgefallen, dass es einen langen ehemaligen Bahntrassenweg bevorzugt hatte, obwohl es ein tolerierbarer Umweg war. Eigentlich genau das, was man sich als Fahrradfahrer wünscht (wird doch in der Metrik stärker gewichtet, oder?).

Ich hab Dir auch drei konkrete Positiv-Beispiele genannt - die hast Du bloß untern Tisch fallen lassen. :slight_smile:

Bei der Grundgeschwindigkeit gibt es keinen nennenswerten Unterschied mehr. Das Problem sind nur die Programmierer, die es sich leicht machen und die teuersten Luxusklassen ohne Nachzudenken einsetzen. Java macht das einem leicht, weil es so viele schöne libs gibt. Aber in C kriegt man dasselbe z.B. mit Boost auch locker hin. Letztendlich entscheidet ob sich der Autor was dabei gedacht hat.

bye, Nop

So etwas hätte ich auch gerne.

Erst kürzlich gab es einen Blogeintrag zu externen Datenquellen in OSRM mit ähnlicher Thematik: Biking Directions With OSRM’s New External Data Support. Im Beispiel wird eine zusätzliche PostGIS Datenbank mit Imposm Schema verwendet, um Wege innerhalb oder in der Nähe eines Industriegebiets schlechter zu bewerten.

Dann noch Routing über Flächen und Arndt wird es im Winter nicht langweilig :wink:

Gruß,
Norbert

Ruhige Industriegebiete sind mir aber noch lieber als stark befahrene Hauptstraßen,
auch wenn da noch so ein toller “Radfernwanderweg” durch geht oder der Fahrradweg super ausgebaut ist.
Der Straßenlärm geht mir am meisten auf die Nerven.

Weiterhin mag ich ampelfreie Routen, z.B. am Fluß entlang, wo man mal so richtig
Gas geben kann und durch nichts aufgehalten wird.

Ein Rad-Router ist deutlich komplexer als ein Automobil-Router.

Eigentlich geht es nur mit “Persönlichkeitsprofilen”, also ein langes Interview
zu Beginn "fährst du gerne durch Wälder?, “wäre ein bisschen Matsch ein Problem für den Sonntagsrad?”,
“brauchst du Asphalt oder hast du richtige Reifen?”, “lieber die Strecke mit den hübschen Joggerinnen?” …

Und für jede Person kann man weiter differenzieren
Profil “will schnell nach Hause”, “habe Zeit für die Natur”, “heute mal sportlicher” …

Aber bei all den Fortschritten: es ist auch schön, mal ohne Karte und Navi rauszufahren
und sich überraschen zu lassen.

Ist ja auch nur ein Beispiel, wenn man technisch Industriegebiete vermeiden kann, kann man auch Nähe zu Hauptstraßen vermeiden und Wälder oder Nähe zu See/Fluß bevorzugen.

Deutlich einfacher umzusetzen wäre aber vermutlich ein Flag für Wanderrouten, analog zu longdistancecycleway/lcn. Zur Planung von kürzeren Touren halte ich Wanderrouten meist für einen besseren Hinweis auf schöne und ruhige Strecken als Radrouten. Sofern man geschotterte Feld- und Waldwege mag, Pfade kann man ja vermeiden.

Um schon jetzt Radwege an Hauptstraßen zu vermeiden, könnte man in einem BRouter Profil evtl. auch einfach generell track und residential gegenüber Radwegen (cycleway/bicycle) bevorzugen.

Da sehe ich ja eben die Stärke von BRouter, dass man sich seine persönlichen Profile definieren und auch spontan ändern kann. Das geht dann auch schon in Richtung automatische Tourenvorschläge wie bei komoot. Und ja, das ist alles auch ein bisschen nerdige Spielerei, aber halt eben ein spannendes Thema.

Gruß,
Norbert

Nein, OsmAnd kann keine verschachtelten access-regeln, es ist dieses Thema hier:

http://code.google.com/p/osmand/issues/detail?id=1380

ich kenne den Effekt gut, wenn ich am Rhein den R6 langfahre und am Kernkraftwerk Biblis vorbeikomme. Da ist der R6 als access=private, bicycle=yes getagged, was völlig korrekt ist (es ist ja ein Privatweg auf dem Kraftwerksgelände), aber OsmAnd schickt Dich einmal um das Kraftwerksgelände rum.

Bahntrassen-Radwege sind ja nicht speziell getagged, sondern sind einfach track/grade1 oder cycleway, aber hier hilft vielleicht auch die relative grosse “Winkelstrafe” in den BRouter-Profilen, die gerade Wege bevorzugt und zumindest bergab auf der Höhenterm, der sanfte Abfahrten bevorzugt.

Die Landuse-Polygone auszuwerten und als Pseudo-Tags für die Routing-Profile zugänglich zu machen (forest=yes) scheint mir jetzt tatsächlich nicht unmöglich.

Da bin ich dann aber wieder bei dem Thema des 64-bit limits im der “Way-Decsription-Bitmap” - ich hab da einfach keine Bits mehr frei und wüsste also nicht, wo ich das forest=yes bit hinschreiben sollte. Also noch ein Grund mehr, diese Datenstruktur umzubauen um dieses Limit aufzuheben, denn da fehlen ja noch ganz andere Infos, wie zum Beispiel die Wander-Relationen, die Turn-Restrictions oder die Wheelchair-Tags. Das reicht dann auch erstmal, soviel lange Winterabende gibts ja auch nicht…

Hmm, schade. Das sollte man ändern. Ein neues Tag/Attribut dafür?
Bahntrassen haben einen ganz besonderen Character, die sie von anderen Radwegen unterscheidet.
Die sind eben nicht entlang der Hauptstraßen, sondern mitten in der Landschaft.
Steigungen im Mittelgebirge werden durch Tunnel und Viadukte unterdrückt.

Die Attraktivität für Radfahrer ist also besonders hoch, gerade wenn man noch einen Kinderanhänger ziehen muss.

Meinst du den BRouter könnte man als Plugin in OsmAnd integrieren,
so dass er wie der eingebaute Router fungiert ?
Also incl. Routen-Neuberechnen, wenn man mit Absicht von der berechneten Route abweicht
(bei mir sehr typisch).

Damit kann man sich im Android-Market auch noch ein paar Euros dazuverdienen.
Du wirst schon reich, wenn nur ein Bruchteil der weltweiten Population (1 Mrd.?)
mit Android-Smartphone und Fahrrad jeweils ein paar Euros für das Plugin geben würden.
Sehr viel Konkurrenz hast du bei Profil “Rad” nicht. Man muss nur eben besser sein.
Fürs Auto ist mein kommerzielles Navi besser und darum nutze ich das dort exklusiv.

Genau das hab ich längst gemacht und so benutze ich das auch fast täglich:

Bei dem Pull-Request bin ich mir aber mittlerweile nicht mehr so sicher, ob Victors Bedenken wirklich technisch motiviert sind oder ob er einfach nicht will.

Hallo

ich habe den BRouter mit dem MapsforgeSwingMapviewer “verheiratet”. Ein Tester hat den Router jetzt mal in den Schweizer Alpen “vergewaltigt”. Routet man jetzt auf einer Bergstrecke in kurzen Abschnitten geht der Router irgenwann zurück auf eine “weit” abliegende Nebenstrasse…

Meine Frage ist nun: Läßt sich der BRouter auch so konfigurieren (vergewaltigen?) dass er auch auf Wanderpfaden (Bergpfaden) die kürzeste Route sucht. Egal welche Wege/Pfad Beschaffenheit vorhanden ist. Ich weiß, e soll ja ein Fahrradrouter sein. Ich bin in dieser Richtung auch zufrieden.

Zusammenfassung: Ist es möglich,den BRouter so zu konfiguriern dass er den kürzesten Wegt such unabhängig von Steigung und Wegbeschaffenheit ?
Hintergrund: WanderRouten in den Bergen…

Das sollte mit dem shortest Profil schon jetzt ohne weiteres funktionieren, wenn man nicht auch Privatwege und gesperrte Wege benutzen will.

Hallo schiki,

leider nicht! Hab ich schon probiert. Auf meinem Testpfad routet die ReitWanderKarte diesen Pfad problemlos…

Hallo womisa,

das wäre dann ein Fall für eine Rückmeldung im OSM-Android-Bike-Routing Forum bei Google. Evtl. sind auch nur die Routing-Daten veraltet.

Ich hab’ das mal in den östereichichen Alpen gesehen, dass eine Wintersperre für den Pass als access=no für ein kurzes Stück der Passstrasse eingetragen war. Was dann natürlich dazu führt, dass der Router irgendwelche noch unpassierbareren Wanderrouten findet.

Sowas kann man patchen, indem man access=no einfach rausnimmt, also aus “or access=private access=no” einfach nur “access=private” macht

Hallo

vielen Dank für die Antworten. Ich habe mal ein Snapshot gemacht (Zentrum ca. 46.53;8.37) geroutet wurde vom 1. roten Punkt zum 2. roten Punkt und dann sollte zum 3 . roten Punkt geroutet werden, aber dann kommt die Blaue Nebenlinie ohne roten Endpunkt…
Ich habe den “shortest.brf” genommen und die Routingdateien sind neu.

siehe da: http://augilabs.de/swingmapViewer/bilder/Oberwald.jpg

Wie schon beschrieben die http://www.wanderreitkarte.de/ routet das problemlos. Die Kartenbasis (OSM) müßte doch gleich sein, oder?.

ich habe das geändert:

zeile 23: switch or access=private acces=no geändert: switch or access=private
zeile 65: switch or access=private acces=no geändert: switch or access=private

dan kommt aber ein Fehler:

Exception in thread “AWT-EventQueue-0” java.lang.IllegalArgumentException: ParseException at line 30: assign operator within expression
at btools.expressions.BExpressionContext.parseFile(BExpressionContext.java:470)
at btools.router.RoutingEngine.(RoutingEngine.java:78)
at womisa.brouter.BRouter.findROUTE(BRouter.java:25)
at org.mapsforge.map.swing.controller.MouseEventListener.mouseClicked(MouseEventListener.java:119)
at java.awt.Component.processMouseEvent(Component.java:6508)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4501)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

Na, ich wollte meine Original-Version nicht deinstallieren. Die ist mittlerweile bei Version 1.6.5 und dein
Binary wäre ein Downgrade auf 1.6.1. Dazwischen hat sich laut Release-Notes das Format der Kartendateien geändert.
Die kommen jetzt auch von einem neuen Server (hatte ich schon bei mir aufgespielt):
http://new.osmand.net/list.php

Die Java-Version läuft auf meinem billigen Samsung-Smartphone (lahme CPU, wenig RAM) extrem langsam.
Mit den native Libs (C++) ist das erträglicher. Der Kartenaufbau könnte natürlich flotter sein, aber es sind
eben auch viele Objekte drin (Detailmodus ist aktiviert). Einmal hatte ich aus Versehen die Java-Version drauf,
da wegen Speichermangel die “Link to SD-Card” Funktion fehlerhaft war, OsmAnd dann die native Libraries
wohl nicht finden konnte. Mein interner Flash-Speicher ist nur 150 MB. Darum muss ich alles auf eine
ausgelagerte Partition der 32 GB µSD-Karte verlinken.

Also Brouter benimmt sich dann genauso wie der Interne Router? Der merkt relativ schnell, wenn ich der Route nicht folge,
und berechnet dann ohne Nachfrage oder Benutzerinteraktion gleich die neue Route.

Soll das denn wirklich ein OsmAnd-Plugin werden? Die stehen unter “Zusatzmodule”.
Dein Download ist ja kein Plugin, sondern eine gepatchte Version von OsmAnd selbst.
Der Unterschied beim Plugin wäre, dass man immer die Updates der Originalversion bekommt,
auch wenn sich das BRouter-Plugin nicht geändert hat.

Interessant. Willst du den zum Download anbieten?

Ich suche schon länger eine Offline-OSM-Karte, z.B. für den Laptop, wenn man mal kein Netz hat.
Am liebsten hätte ich den OsmAnd auf dem Laptop, aber das geht bisher nur umständlich in einer Android VirtualBox.
Eben mit den Funktionen, nach POI auf der Karte zu suchen oder Routen berechnen zu lassen.
Kann man mit dem Mapsforge Viewer auch nach POI suchen? Die Kombination ist sehr praktisch
(“kürzester Weg zur nächsten Pizzeria” oder so).

Hallo

das ist aus verschiedenen Tools mit “heißer Nadel” und nicht all zu vielen Java Kenntnissen zusammengestrickt. Suchen nach POIS lokal wüßte ich derzeit nicht wie man das machen sollte…?
Nehme da aber gerne Anregungen entgegen.
Das GANZE ist noch sehr BUGGY und bei der Bedienung nicht stabil genug für “Jedermann” und die “Inbetriebnahme” an Randbedingungen wie Karten, RenderThemes, Routingfile etc. geknüpt, deshalb möchte ich das nicht publizieren. Außerdem weiß ich nicht wie das mit den Urheberechten von Mapsforge, BRouter, GPXCreator ist.
Mein Beitrag dabei ist kein Geheimnis. Ich bin aber selbst erstaunt, wie man mit Klick,Klick,Klick eine Route auf eine Vektorkarte via BRouter (Mapsforge,Openandromap, Freizeitkarte) erstellen kann.
Gedacht ist das für meine Routenplanungen auf dem Desktop um dies dann auf das Smartphone zu übertragen. Ich verwende derzeit Oruxmaps.

Ok. Verstehe ich. Kannst du denn andere Offline OSM-Kartenprogramme empfehlen?
Ich suche schon länger nach einer Alternative zu Google Earth auf OSM-Basis,
zum schnellen Anschauen der Karte (Earth ist bei mir viel flotter und flüssiger als WWW-basierte Apps),
und zum Annotieren (drübermalen von Polygonen, Tracks, Fähnchen, Textkommentar, Flächen markieren,
Austausch der Overlay-Objekte via KML-Datei, etc.).

“Marble” sieht auf dem ersten Blick ganz gut aus, läuft aber nicht mit den Vektorkarten
und hat keine Annotierungsmöglichkeit.

Basecamp?

Gruß Klaus

…NEIN! Deshalb habe ich mich auf den Weg gemacht auf dem Desktop ein Tool zu schaffen, mit dem ich meine Mapsforge basierenden Vektorkarten anschauen kann. Dazu war das Mapsforge Rewrite mit dem Desktop SwingMapViewer eine Steilvorlage und ein Grund zum Einstieg in diese Thematik.

Weiterhin kam hinzu, dass der BRouter leicht zu integrieren war. Somit habe ich eine vertraute Umgebung für meine Android / Oruxmaps Karten/ und BRouterwelt auf dem Desktop. Somit habe ich auch auf dem Desktop einen “grafische” Routenerstellungsmöglichkeit, ohne Onlineverbindung. Karten und Routen sind 1:1 austauschbar.

Wenn sich das Ganze stabilisiert hat kann man eventuell auch über eine Weitergabe auch nachdenken…aber dazu bedarf es einer vernünftigen Doku bzw. Infoseite und das machen Entwickler sehr ungern.

Ps.: Nebenbei eine Frage an NOP.:

Ich weiß ich soll einen eigenen Thread aufmachen, aber weiter oben habt Ihr weit ab vom Thema diskutiert…

Welcher Router steckt hinter der “wanderreitkarte” und wo könnte man Infos für eine lokale Integration und Konfiguration finden?