… für den BRouter. Oder: wie bekomme ich eigene Informationen mit in das BRouter Kartenmaterial?
Zu nutze gemacht habe ich mir den „alten“ Weg um Segment-Dateien zu erstellen, wie vorhin hier schon beschrieben. Auch wenn es etwas langsamer geht, ich finde den mehrschrittigen Weg übersichtlicher. Und man kann eben, an geeigneter Stelle, einfach einen weiteren Schritt mit dazwischen hängen.
Oder konkreter: nachdem die Kartendaten initial konvertiert wurden (OsmCutter
) und der NodeFilter
gelaufen ist, nehme ich die ways.dat
und reichere sie um einen Pseudo-Schlüssel für die Heatmap an.
Den Schlüssel gilt es erst in profiles/lookups.dat
zu registrieren. Also unter der Rubrik „context:way“ eine weitere Zeile dazu. Die längliche Zahl, die da mit in der Zeile steht, ist übrigens einfach egal 🙂 … so sah das dann bei mir aus:
heatmap:stefan;0000000001 yes
… damit kann man einen Weg mit „heatmap:stefan=yes“ taggen.
Dann also ein bissl Java-Code schreiben, der
- die gefilterten Node-Tiles ausliest, sich pro Node aus der MongoDB die Information zieht, ob ich bei dem Node schon einmal war
- die ways.dat liest und Weg für Weg überprüft, ob ich an allen Nodes, die den Weg bestimmen, schon einmal war — und ggf. dann den Pseudo-Schlüssel ergänzt
Eine erste Version davon habe ich als Gist hochgeladen. Die Datei einfach mit nach brouter-map-creator/src/main/java/btools/mapcreator
packen und dann durchkompilieren.
Das Skript will übersichtliche acht Parameter, und kann dann z.B. so aufgerufen werden:
java -jar brouter-server-1.6.1-jar-with-dependencies.jar -Ddeletetmpfiles=true -DuseDenseMaps=true btools.mapcreator.HeatmapEnricher ../../../profiles2/lookups.dat 172.17.0.2 heatmaps points stefan ftiles ways.dat ways-enriched.dat
… und wenn man danach die weiteren Schritte zum Erstellen der Segment-Dateien (wie üblich) vollführt, den Server startet und testet: sieht man erstmal gar nix.
Der BRouter-Server gibt einem in der Antwort nämlich nur diejenigen Tags zurück, die ausgewertet wurden. Und ohne Bezug im Profil kommen die Neuen halt auch nicht mit zurück.
… der zunächst einfachste Weg führt über einen dummyUsage-Eintrag in einem benutzerdefinierten Profil, also so:
assign dummyUsage = heatmap:stefan=
… und wenn man dann eine Route ermitteln lässt, dann sieht das etwa so aus:

… der erste Routingschritt betrifft ein Straßenstück, das ich noch nie befahren habe. Der zweite Eintrag dann hingegen schon. Unter WayTags wird der Pseudo-Schlüssel mit aufgeführt. Yay 🙂
So, nächster Schritt ist dann natürlich noch ein Profil dahingehend zu modifizieren, dass es die Information geeignet mit berücksichtigt. Konkret ist die Idee, bei kleineren Straßen und Wegen einen kleinen Bonus zu vergeben, wenn das Heatmap-Tag noch nicht gesetzt ist …