BRouter: offline Fahrrad-Routing für Android

Hi Christian,

naja, was ich bräuchte und was ich in den jetzigen rd5-Dateien drin habe ist leider nicht dasselbe… Ein voll-konfigurierbarer Router braucht per Definition alle Tags mit abzählbaren Wertebereich (d.h. Freitextfelder oder auch Strassennamen brauche ich nicht) In der lookup-Datei (http://brensche.de/brouter/profiles2/lookups.dat ) sind die 26 way-tags aufgeführt, die tatsächlich drin sind, wobei einige auch synthetisch sind (reversedirection, highway=ferry, …). Die Beschränkung auf diese 26 ist eine rein technische, weil ich die in ein 64-bit Wort kodiere, und das ist eine ziemlich schmerzhafte Einschränkung, weil das viele Spezialanwendungen verhindert (Wheelchair-Routing zum Beispiel). Bei den Relationen ist es noch dünner, ich packe nur ein syntethisches Tag an den way: longdistancecycleway=yes heisst, es gibt mindestens eine Relation mit route=bicycle. Das heisst das Network-Tag an der Relation geht mir verloren, und das tut auch weh (“route=bicycle network=radweit” ist was ganz anderes als network=ncn), und Fernwanderwege sind auch nicht drin und Abbiegebeschränkungen auch nicht.

Also sollte ich irgendwann nochmal das Format refactoren, dann natürlich mit dem Ziel, diese Beschränkungen zu überwinden. Aber aktuell ist das kein Thema für mich. Speziell ist natürlich in den rd5-Dateien noch, dass an jedem Node die Höhe dransteht (linear aus SRTM interpoliert), glaube in den Vektor-Karten steht die nur indirekt als Höhenlinie?

Gruss, Arndt

Ich vermute einfach mal, dass Orux die Android-Sprachausgabe nutzt. Also müsste man nicht Orux gescheite Sprachansagen beibringen sondern dem Android eine bessere TTS-Engine verpassen (in FroYo: com.android.settings → “Voice input & output settings” (das vorletzte)). (Ausser du meintest den verwendeten Text und nicht die Stimme, ich kenne Orux nicht)

So, ich oute mich mal, als wenig englisch sprechender/verstehender. :slight_smile:
Kann mir bitte einmal jemand die Namen der Profile übersetzen/erklären?

car-Test = scheint für Autos zu sein, also für mich nix. :slight_smile:
trecking-ignore-cr= ???
trecking-nosteps= ???
trecking=Normales Radfahren?
safety=Sicherheit? Was wird da sicherer?
shortest=Kürzester Weg auch über Landstraßen?
trekking-steep= ???
trekking-noferries= ???
fastbike= Rennrad?
moped= Roller/Moped, also keine Radwege, also für mich nix. :slight_smile:

Meine Frage ist, welches der Profile soll ich verwenden, wenn mir folgendes wichtig ist.
Radwege=OK
Fußgängerwege=OK
Feldwege=Ok, wenn sie befestigt sind. (ich bin kein Matschfahrer)
Normale Straßen, also Ausserorts nur wenn es sein muss.

Ich dachte, damit wäre ich der normale Radfahrer.

Gruß, Rudi

car-Test = Auto, aber ohne Abbiegebeschränkungen, also in Städten mit Vorsicht zu geniessen
trekking-ignore-cr= Radrouten ohne Berücksichtigung von Fernradwegen
trekking-nosteps= Radrouten, die keine Treppen enthalten dürfen
trekking= “Normale Radrouten”
safety=Radrouten mit Vermeidung von Hauptstrassen ohne Radweg
shortest=kürzester Weg, der zu Fuss passierbar ist
trekking-steep= Radrouten ohne Berücksichtung des Höhenprofils
trekking-noferries= Radrouten, die keine Fähren enthalten dürfen
fastbike= Radrouten im wesentlichen auf Strassen oder erstklassigen Wirtschaftswegen/Radwegen
moped= Radrouten da, wo auch Autos fahren dürfen (auch für S-Pedelec)

Dann ist trekking schon o.k., wobei das im Dunkeln oder bei Regen
schon grenzwertig sein kann. Dann besser auf fastbike ausweichen.

Kurz und schmerzlos: ausprobieren!
steep heißt steil, noferries vermeidet Fähren, nosteps wahrscheinlich Treppen, ignore-cr und safety… k.A., bislang habe ich keines dieser Profile getestet.
Tracking ist zumindest nicht übel.

Wenn eine Landstraße auf dem kürzesten Weg vorkommt, ja.
Ansonsten werden Steiltreppen und Drahtkäfige genauso bevorzugt wie SIngletrails, also nicht matschig sondern mitunter auch extrem holprig.

Ausgehend von der Prämisse “BRouter: offline Fahrrad-Routing für Android” sollte man da vielleicht einen Warnhinweis ausgeben :wink:

Ich wollte es kaum glauben, aber Orux war fast schneller als der Schall:P, heute morgen war eine neue Beta fettich!

  1. Brouter starten und als Server schlafen legen.
  2. Oruxmaps starten, die Routenschalfläche betätigen, Route suchen selektieren, Startposition klicken, Ziel klicken, Broute (offline) als Dienst selektieren und ab die Lucy…nach kurzer Wartezeit wird die fertige Route eingeblendet. Wow!

Es handelt sich um eine erste Beta ohne viel Schnickschnack, da geht es ums Zusammenspiel, um Serverstabilität, einfach um die generelle Funktionsweise.
Brouter wird aufgerufen so wie er ist, bzw. in dem Zustand, in dem er als Server zum Schlafen bzw. watchdoggen, lauschen oder was auch immer geschickt wurde, d.h. ohne weitere Wegpunkte, ohne Profile, es wird das zuletzt verwendete herangezogen.
Wer das Profil wechseln möchte muss Brouter aufwecken und das gewünschte Profil selektieren.
Wer mit Wegpunkten und Sperrzonen arbeiten möchte kann das selbstverständlich auch, einfach wie gehabt definieren, Brouter starten, Animation betrachten und im Anschluss die erstellte Route selektieren und laden.
Möchte man im Anschluss wieder das interne Serverrouting strapazieren, no problem. Wenn man dafür aber das Profil wechselt und die erstellten Wegpunkte in der DB nicht entfernt hat gibt es eine schöne Animation und eine weitere Route:P

Und sonst? Einmal habe ich mich vertan und beim Initialisieren des Servers wahrscheinlich das Autoprofil gewählt, meine in die Pampas gelegten Eckpunkte wurden ungefragt auf in der Nähe befindlichen Kreuzungspunkten von Autustraßen gelegt:D

Ein paar Bildchen…


Definition in Oruxmaps


erneute Definition in Oruxmaps mit gleichen Koordinaten nach vorheriger Profiländerung fast → track


Beide Ergebnisse in einem Bild


Selbe Gegend, andere Eckpunkte, diverse Ergebnisse intern/extern bzw. mit ohne Wegpunkte, aber mit selbststänger Verlagerung der Eckpunkte durch den Router


Und noch mal ne Übersicht mit Kurzprofil


OSMAND
Davon hatte ich nur eine Uraltversion auf meiner Speicherkarte, gestern habe ich mal das neueste gesaugt. Das mochte die alten Karte nicht mehr, also weitere 500 MB! für ein paar qkm. Erst heute wurden sie dann nach gefühlten 100 Startversuchen im Emulator erkannt.
Positiv: Von der Orientierung her eine der besten OSM-Karten, in vielen Zoomstufen werden Städte- und Gemeindenamen gelistet, auch wenn sich hier ebenfalls der ein oder andere Hinterhof hineinschummelt.
Negativ: entfällt - das gleiche wie früher, ich kapier das System nicht, für meinen Horizont ist das Proggie nicht geschaffen, mit Intuition komme ich nicht weiter, zum Einlesen habe ich keinen Bock.

Edit:
Und noch etwas: Orux hat sich an anderer Stelle zur Problematik des wohl auch bei ihm manchmal abrauchenden Servers geäußert.
Bei mir ist er bislang nicht weggetaucht, weder in der virtuellen Box noch auf’m Defy (Quarx’sche Spezialversion :wink: )

Hi und Danke fuer den Hinweis,

Du hast es zwar verlinkt, aber hier nochmal der Link auf das APK: http://www.oruxmaps.com/OruxMaps5.5.2beta10.apk

Hab’s auch mal probiert und funktionert schon nicht schlecht.

Aber die Issues sind ja bekannt:

  • einmal das Konfigurations-Thema, dass in diesem Setup auch die car/bike/foot,fast/short Auswahl aus dem Maptool einen Sinn machen sollte (wie couchmapper auch schon geschrieben hat: http://forum.openstreetmap.org/viewtopic.php?pid=340861#p340861 )

  • und das Problem der Server-Stops durch Android, von dem Du auch schreibst.

Aber da kommt langsam Dynamik in das Thema, sollte doch möglich sein, bald ein unabhängiges Maptool ↔ Router Interface zu etablieren, was nicht nur für BRouter funktioniert, sondern für jeden offline-Router, der das Interface implementiert.

Die Sperrzonen behält auch der Servermode! Die Wegpunkte aber nicht, das geht konzeptionell nicht.

Das er die Position auf den nächstgelegenen Weg matched, über den das gewählte Profil auch routen kann, ist ein Feature und kein Fehler… Für automatische Neuberechnungen, wenn die Position vom GPS kommt und nicht von einer Benutzereingabe, ist das wichtig.

Hallo Arndt,

Die Höhendaten gibt es in Mapsforge tatsächlich nur als Kontourlinie ohne jede interne Beziehung zu den OSM-Nodes.

Es gibt noch eine kleine Gemeinheit in Mapsforge:
Wenn in einem Objekt mehrere Attribute drinstehen die die gleichen Values habe können (oneway=yes/no tunnel=yes/no etc) ist es dem Zufall überlassen was nun für welches Tag gerendert wird, dh. wenn ein tunnel (=yes) ein oneway=no enthält so wird der Tunnel oft mit dem Attribut des oneways gerendert (also NO).
Wo der Fehler liegt weis ich nicht, ich würde mich beim Routing jedenfalls nicht auf Mapsforge verlassen - für die Kartendarstellung selbst ist egal, ich Filtere einfach die unnötigen Tags raus oder weise ihnen eindeutige values zu - fürs Routing ist das sicher weniger lustig mit solch “gekürzten/modifizierten” Datensätzen zu arbeiten.

Viele Grüsse
Christian
PS: Ich habe mir den BRouter mal angesehen - WELL DONE, alle Achtung, das das überhaupt geht hätte vor ein paar Monaten noch keiner geglaubt!!

Also zuerst nochmal:
Ein ganz dickes DANKE an den brouter Autor!

Ich versuche den in Zusammenarbeit mit OSMAND. (Hatte ich ja schon erwähnt)
Um Ihm nun ab zu gewöhnen, mich immer wieder über Wege zu routen, die ich nicht mag,
Versuche ich mich in den Config Files.
Da ich des Englischen aber nicht so 100% mächtig bin versuche ich mal, mir das eine
und andere hier erklären zu lassen. Ich hoffe ich gehe euch nicht zu sehr auf den Keks.

Zuerst mal zu der Zeile:
“assign probablyGood or ispaved and isbike not isunpaved”
Da wird der Variablen “probablyGood” etwas zugewiesen.
Was ich dabei nicht verstehe: wie ist das oder das und und das not zu sehen.
Kann mir das mal einer in der Form hinschreiben:
probablyGood = (( ispaved || != isunpaved ) && (isbike) )
Also etwas C Like. :slight_smile:
Stimmt das was ich da geschrieben habe?

Nächster Fall, der mir etwas Kopfzerbrechen bereitet:

switch or highway=track or highway=road or highway=path highway=footway
    switch tracktype=grade1 switch probablyGood 1.0 1.3
    switch tracktype=grade2 switch probablyGood 1.1 2.0
    switch tracktype=grade3 switch probablyGood 1.5 3.0
    switch tracktype=grade4 switch probablyGood 2.0 5.0
    switch tracktype=grade5 switch probablyGood 3.0 5.0
                            switch probablyGood 1.0 5.0

Warum stehen da immer 2 Zahlen dahinter.
Es scheint mir so, das ich das ganze SWITCH Konstrukt nicht verstehe.
Schon die Eingangszeile mit dem “switch or …” versteh ich nicht.
Wann ist ein switch fertig?

Ich bin wie immer für alle Antworten Dankbar.

Gruß, Rudi

Auf meinem Motorola Defy+ (Android 2.3.6) mit OruxMaps v.5.5.2 funktioniert BRouter 0.9.3 nicht.
Ich starte BRouter und wähle das “trekking”-Profil.
Dann erscheint die Meldung:
"Success

no from/to found (coordinate-source: /mnt/sdcard/oruxmaps)

[Exit] [Server-Mode]"
Diese Meldung bestätige ich mit [Server-Mode].
Danach setzte ich die service-modes foot_short, foot_fast, bicycle_shot und bicycle_fast und bestätige mit [Ok].
Nach dem Tippen auf [Ok] (bei der service-mode-Auswahl) erscheint wieder mein Android-Home-Screen. Ist jetzt BRouter abgestürzt?
Wenn ich jetzt in OruxMaps das Routing über BRouter versuche, erhalte ich die Fehlermeldung:
“BRouter http://brence.de/brouter not found or not started. Must be installed and started as a server.” (oder so ähnlich)

Nein. Es heisst:

probablyGood = ispaved || ( isbike && !isunpaved )

Das ungewohnte ist, dass der Operator immer voran steht (=polnische Notation,
http://de.wikipedia.org/wiki/Polnische_Notation )

Lag ursprünglich daran, dass mir ein parser/compiler für die “gewohnte” Notation zu schwierig war, aber letztendlich finde ich diese klammerfreie Schreibweise auch ganz gut lesbar, wenn man’s mal gewohnt ist.

Nach 3 Ausdrücken, also

switch

In dieser verketteten Schreibweise wird ein “switch” also in einer Zeile nicht fertig,
in der naechsten Zeile beginnt in der Regel die “false-expression” eines unfertigen
Switch-Ausdrucks, also wenn man Klammern setzt:


    switch (or highway=track or highway=road or highway=path highway=footway)
    ( switch tracktype=grade1 ( switch probablyGood 1.0 1.3 )
    ( switch tracktype=grade2 ( switch probablyGood 1.1 2.0 )
    ( switch tracktype=grade3 ( switch probablyGood 1.5 3.0 )
    ( switch tracktype=grade4 ( switch probablyGood 2.0 5.0 )
    ( switch tracktype=grade5 ( switch probablyGood 3.0 5.0 )
                           ( switch probablyGood 1.0 5.0 )
    ) ) ) ) )

Leider nur auf englich mehr dazu hier: http://brensche.de/brouter/profile_developers_guide.txt

Also für die direkte Zusammenarbeit zwischen OruxMaps und BRouter passt das so leider nicht zusammen.

Was Oruxmaps da macht bezieht sich auf die Vorgaenger-Schnittstelle, die internes HTTP auf dem Handy verwendet. Dazu musst Du BRouter BRouter 0.9.2 verwenden. Macht aber nicht so wirklich Freude, weil der HTTP-Server sich immer mal beendet und dann neu gestartet werden muss. Siehe http://brensche.de/brouter/revisions.html

Jose wollte in Oruxmaps die neue Schnittstelle aus BRouter 0.9.3 einbauen (=Android-Spezifische Interprozesskommunikation), aber irgendwie ist da gerade Sommerpause, das zieht sich bisschen.

Was aber auf jeden Fall funktioniert ist die “klassische Bedienung” über die Dateischnittstelle, wenn Du Wegpunkte setzt in Oruxmaps.

Ok, dauert etwas für mich, mich da einzulesen, aber ich glaube der erste Funke ist über gesprungen.
Danke dir dafür.

Gruß, Rudi

Mittlerweile ist die Technik umgestellt, BRouter implementiert seit Version 0.93 eine Android-spezifische Dienste-Schnittstelle und OruxMaps in der Version 5.5.3 (= aktuell in Google-Play) ruft diese Schnittstelle.

Damit gibt’s keine Probleme mehr mit dem Dienst-Lebenszyklus (da muss kein Dienst laufen, OruxMaps startet ihn einfach) und damit gibt’s auch nicht mehr die “voller Internetzugang” Berechtigung bei BRouter (ist ja schliesslich eine Offline-App…)

Ich hab’ an der “anderen Stelle” heute noch bisschen was geschrieben zur Konfiguration.

https://groups.google.com/forum/#!topic/osm-android-bikerouting/dAGCaq32QUU

Das die Google-Play Variante von Orux das jetzt kann ist ein schöner Schritt vorwärts, aber es gibt halt auch noch sooo viel zu tun (schnelle partielle Neuberechnungen, Advanced Voice-Navigation hints, …)

Bei Locus besteht Interesse, diese Schnittstelle zu integrieren (aber er hätte auch gerne die Voice-Navigation hints…), bei OsmAnd ist das Interesse gedämpfter weil sie ja einen eigenen offline Router haben, aber die Aussgae ist, dass sie einen Pull-Request dazu nicht ablehnen würden. Was jetzt fehlt ist primär Zeit…

Hi Arndt,

ich habe BRouter in Verbindung mit Oruxmaps getestet. Auf meinem Huawei X3 mit Android 2.3.3 läuft die Verbindung BRouter OruxMaps problemlos.
Oruxmaps liegt auf der SD Karte unter /mnt/sdcard/oruxmaps. Es geht sowohl Brouter mit “from/to”, als auch das Routing innerhalb von OruxMaps.

…aber auf meinen LG-P700 mit Android 4.0.3 bringe ich das nicht zum Laufen.
OruxMaps kann ja nicht vollständig auf /mnt/sdcard/external_sd/ ausgelagert werden die ORUX-DB mit den Waypoints etc. muß auf der internen SD liegen (laut Forum) also auf /mnt/sdcard.
Es gibt also zwei Pfade:

/mnt/sdcard/oruxmaps kann/darf nicht verschoben werden laut Orux
und
/mnt/sdcard/external_sd/OruxData zegt auf die Maps, exportierten Tracklogs etc. gleiche Struktur wie zuvor

Wie muß man BRouter installieren bzw. geht das überhaupt?

BRouter meldet “An Error occured”
No coordinate source from a maptool found…etc…

und kann nicht gestartet werden. Kann nur durch Deinstallation beseitigt werden.

Was mache ich falsch?

Viele Grüsse
Achim

Ps: Pathproblem OruxForum ==> http://oruxmaps.foroactivos.net/t2816-track-db-path-bug-or-feature

Hi Arndt,

das klingt wunderbar. Leider bekomme ich weder ein Routerin mit OruxMaps hin (was muss in einstellen?) und dann verstehe ich noch nicht die Zuordnung der Routing-Profile. Welches ist welches? Was ist “Bicycle_short” und was “Bicycle_fast”? Ich würde gerne “trekking” und ein eigenes Profil verwenden, dass sich an die CycleRoutes hält. Kann man die Profile zuweisen?

Hi Achim,

garnichts, Du hast einfach Recht, da ist eine Lücke. Da muss ich wohl nochmal ran und die Konfiguration der Basisverzeichnisse bzw. die Suche nach den Map-Tools flexibler machen.

Du kannst natürlich das BRouter-Verzeichnis auch unter /mnt/sdcard/ anlegen, dann passt es, d.h. er findet die Datei /mnt/sdcard/oruxmaps/tracklogs/oruxmapstracks.db (mehr braucht er nicht).

Du kannst aber auch einmalig die Datei oruxmapstracks.db händisch an eine Stelle im Dateisystem kopieren, wo BRouter sie findet, also /mnt/sdcard/external_sd/oruxmaps/tracklogs/oruxmapstracks.db (wenn /mnt/sdcard/external_sd Dein Basisverzeichnis ist), denn Du brauchst da ja nur initial, um die Konfiguration durchzuführen, beim Betreib über die Diensteschnittstelle spielen Datei-Pfade ja dann keine Rolle mehr.

Hallo thaigait,

in oruxmaps ist es das Autobahn-Symbol in der Top-Leiste und dann “Route suchen”. Dann hast Du unten 3 Auswahlboxen. In der dritten musst Du statt “Cloudmade” “BRoute” wählen. Die beiden anderen definieren den Modus (also eine der 6 Kombinationen aus Auto/Fahrrad/Fuss + short/fast).

Ein Mapping zwischen Modus und Profil gebe ich nicht vor, das musst Du selber konfigurieren, indem Du Brouter “klassisch” startest (mit oder ohne from/to-Koordinaten, geht beides) und anschliessend den “Server-Mode” Button drückst, dann hast Du die 6 Modi zur Auswahl und kannst wählen, für welche Du die gerade eben benutzte Konfiguration (=Profil + Liste der Sperrpunkte) hinterlegen willst. Solange Du das nicht gemacht hast, wird Oruxmaps eine Fehlermeldung bringen, wenn nur einModus fehlt, nimmt er stattdessen den zuletzt konfigurierten.

I do know it… und habe es bereits vor einiger Weile gestestet, Orux hatte wenige Tage nach Erscheinen Deiner 0.93 bereits umgestellt, ich war lediglich schreibfaul…:stuck_out_tongue:

Ich hatte die Kombi intensiv getestet und dutzende Bilder hochgeladen, bei Gelegenheit werd ich mal einige hier verlinken.
Vorab: Ein Hauptproblem im Zusammenspiel ist nach wie vor die Geschwindigkeit, was auf dem 4-Kerner in der Emu noch klappt rennt auf dem realen Androiden dann ins timeout: Routen mit mehr als ca. 50km Länge kann mein Defy nicht routen.
Lange Routen, so 120 - 150 km in ca. dauern auch in der Emu so ab 300 sec aufwärts, 500 - 600 sec können erreicht werden.
Lt. Animation scheinen 3 Durchläufe statt zu finden, der erste ist meistens recht schnell, von Sekundenbruchteilen bis zu ca. 20 sec, der zweite deutlich langsamer und der dritte quälend langsam. SO kann z.B. eine 60 km Route im 1. Lauf unter 2 sec benötigen, im 2. zwischen 5 und 20 und im 3. dann im Zeitfenster noch gerade ein Ergebnis liefern oder dieses mit über 100 sec drastisch verfehlen.

Hier ist noch einiges zu tun, imho sinnvoller als Auto(mobil) Gedöns und weitere Profile.

Des weiteren ist mir aufgefallen, dass Brouter bei LInkskurven mit separaten Radwegen den Weg in der Gegenrichtung wählt, nach STVO nicht gestattet und kürzlich in D’dorf im Rahmen einer Aktionwoche mit saftigem Bußgeld (30 Euro wegen Verkehrgefährdung) belegt.

???
Das verstehe ich nicht so wirklich…wieso interne SD Karte, verschieben…?

Möchtest Du die app auf die externe SD Karte verschieben? Warum um alles in der Welt?
Ich bin kein ANdroid Spezi, aber ich habe mal irgendwo gelesen, das das Verschieben einer app-Installation auf die externe SD Karte seid Version 4.0 nicht mehr möglich ist, jedenfalls nicht mit dem offiziellen Android.
Im Normalfall sollte daher die app auf der internen SDcard installiert sein, die Arbeitsverzeichnisse (also Karten, Db e.t.c, der ganze schmarren halt) aber komplett auf der externen SD Karte! Und deren Hauptverzeichnis wird bei der Brouter Installation angegeben!
Wie das nun letztendlich ist abhängig von android Version bzw. Herstellerimplementation.

Das kann sein:
/mnt/sdcard
/mnt/ext_SD
/mnt/erternal_sd
/storage/external
/storage/emulated/0

Am häufigsten gesehen habe ich bislang /mnt/sdcard und /storage/emulated/0.

Solltest Deine externe SD also /mnt/sdcard/external_sd heißen dann ist dem halt so.
Die paar kB Oruxmaps sollten doch noch ein Plätzchen auf der internen SD Karte finden und als Arbeitsverzeichnisse nimmst Du die externe Karte,
also /mnt/sdcard/external_sd/oruxmaps/tracklogs z.B für die oruxmapstracks.db