Kategorien
Allgemein

Heatmap Segmente

… 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

  1. die gefilterten Node-Tiles ausliest, sich pro Node aus der MongoDB die Information zieht, ob ich bei dem Node schon einmal war
  2. 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 …

Kategorien
Allgemein

BRouter Segmente

… nachdem das Erstellen von eigenen BRouter Segment-Dateien mit einer gewissen Lernkurve verbunden ist, hier ein paar Dinge, über die ich gestolpert bin …

Zunächst ist da die offizielle Dokumentation, die im Wesentlichen auf das Skript process_pbf_planet.sh verweist. Wie ich lernen musste, funktioniert dieses jedoch nicht (also den Bug-Report habe ich gefunden, nachdem ich wusste warum es nicht geht).

So oder so, es gibt zwei Varianten des „map creators“: den „alten“ Weg (der beginnt mit dem Einsatz von OsmCutter.java) und den „neuen“ Weg (der die OsmFastCutter.java verwendet). Letztlich passieren bei letzterer Variante nur mehrere Dinge auf einen Rutsch — und der alte Weg geht Schritt für Schritt vor.

Das Problem beim alten Weg ist (inzwischen) einfach nur, dass die Dateinamen nicht mehr passen. Die OsmCutter schreibt Dateien, die auf .ntl enden, jedoch erwartet die NodeFilter-Klasse, dass die Dateien dann auf .tls enden (und NodeCutter/WayCutter erwarten wiederum als Endung .tlf).

Kurzum, um auch den alten Weg beschreiten zu können, einfach die Dateien NodeFilter.java, NodeCutter.java & WayCutter.java bearbeiten und .tls bzw. .tlf einfach durch .ntl ersetzen.

Fertig 🙄

Update: gibt sogar einen Pull Request, der das behoben hätte – der wurde aber ohne merge geschlossen.