Da ich seit Ende Januar mit dem neuen Fahrradcomputer alle meine Fahrten aufzeichne, möchte ich natürlich irgendwann auch eine Heatmap erstellen.

Eine Heatmap ist eine Karte, auf der man erkennen kann, welche Strecken man oft gefahren ist und welche eher selten.

Es gibt verschiedene Tools für diesen Zweck. Ich habe mehrere ausprobiert und mich letztlich für eines entschieden.

Sie alle verarbeiten GPX-Dateien, manche auch optional Fit-Dateien.

.fit nach .gpx konvertieren

Mittels gpsbabel kann man eine fit-Datei1 in eine gpx-Datei konvertieren. Mit diesem Aufruf werden z. B. alle .fit-Dateien in einem Verzeichnis in gpx-Dateien konvertiert:

for file in *.fit; do gpsbabel -i garmin_fit -f "${file}" -o gpx -F "${file}.gpx"; done

Das Tool – Strava-local-heatmap

Das Tool gibt es auf Github, siehe hier.

Obwohl “Strava” ein Teil des Projektnamens ist, braucht man weder Strava-Account noch sonst etwas aus der Cloud. Das ist nur deshalb im Namen, weil solche Heatmaps von Strava bekannt sind.

Wichtig: Änderungen am Script

Dort ist noch der Tileserver von Wikimedia voreingestellt, der jedoch aus Sicherheitsgründen abgeschaltet wurde. Das bedeutet, man muss das Script etwas ändern, sonst erhält man beim Aufruf nur eine leere Karte.

In Zeile 39 ändert man die URL nach:

OSM_TILE_SERVER = 'https://tile.openstreetmap.org/{}/{}/{}.png'

Und zusätzlich in Zeile 92 den User Agent auf irgend etwas, am besten etwas individuelles, bei mir z. B. auf strava-heatmap.

Ändert man den User Agent nicht, dann bekommt man beim Download einen HTTP-Status 403 (Forbidden), was man sehr gut mit wget testen kann. Im Browser wird ein Tile jedoch angezeigt.

Heatmap erstellen

Sobald man die Änderungen eingefügt hat, kann man das Tool verwenden:

python3 strava_local_heatmap.py --dir /tmp/gpx_files/ --output /tmp/headmap.png
Reading 1.fit.gpx
Reading 2.fit.gpx
[]
Reading 6.fit.gpx
Read 25571 trackpoints
Auto zoom = 14
downloading tile 1/54
downloading tile 2/54
[]
downloading tile 54/54
Saved /tmp/headmap.png

Heruntergeladene Tiles werden für den nächsten Aufruf lokal abgespeichert.

Aus Gründen der Privatspähre füge ich hier keine Heatmap von mir ein. Ein Beispiel gibt es auf der Projektseite in der Projektbeschreibung, siehe hier.

Hilfe

Weitere Möglichkeiten gibt es in der Hilfe des Tools, die man mittels --help erreicht.

Helferscript

Ich werde noch ein kleines Helferscript schreiben, um auf der Kommandozeile mit einem Aufruf eine Heatmap für z. B. Juni erstellen zu können, das dann im Hintergrund temporär fit-Dateien in gpx umwandelt, danach wieder löscht und nur die generierte Heatmap im aktuellen Verzeichnis ablegt.

Das werde ich dann hier später auch verbloggen.


  1. Das neue Format 2.x kann so nicht mehr von gpsbabel verarbeitet werden, der Fahrradcomputer “Wahoo Elemnt v2” liefert aber noch das “alte” Format. ↩︎