Allgemeines
Nachdem ich für meine Wanderungen jeweils eine GPX Datei mit den GPS Koordinaten der Strecke zur Verfügung habe, will ich diese
Daten für folgende Dinge nutzen:
- Automatische Erstellung der Zeitaufstellung am Ende meines Wanderberichts. (Dieser wurde davor immer manuell erstellt, was mit
viel Aufwand während der Wanderung und dann auch beim Schreiben verbunden war.)
-
Erstellung einer Übersichtsstatistik ähnlich wie bei der Bergfex-App, welche auf der Wander-Titelseite
jede Wanderung in Zahlen zusammenfasst.
-
Erstellung einer Höhenstatistik, die dann mittels Javascript visualisiert wird. (Noch nicht realisiert.)
-
Erstellung von x- und y-Koordinaten-Punkten der Strecke, die dann mittels Javascript visualisiert wird. (Noch nicht realisiert.)
Änderungen an der GPX Datei
Damit das Programm die einzelnen Ziele der Wanderung berücksichtigen kann, müssen zusätzliche Daten eingetragen werden.
Diese Daten trage ich direkt über dem ersten trkseg
Element ein.
Dafür sind pro Ziel (XML- Entity target
) die Attribute Name (name
), die Uhrzeit im Format HH:mm (time
) und die
Seehöhe als ganze Zahl (ele
) anzugeben.
Da an manchen Zielen gerastet wird und sich die Anzahl der Kilometer nicht erhöht, gibt es noch eine zusätzliche XML Entity targetleave
bei dem wieder die selben Namens- und Höhenangaben vergeben werden, aber die Uhrzeit eingetragen wird, wann man das Ziel verlassen hat.
Im folgenden gibt es ein Beispiel für eine solche Erweiterung:
<target name="Payerbach Bahnhof" time="8:05" ele="494" />
<target name="Stojer Höhe" time="9:05" ele="815" />
<target name="Speckbacherhütte Ankunft" time="10:10" ele="1089" />
<targetleave name="Speckbacherhütte Aufbruch" time="10:30" ele="1089" />
<target name="Gasthof Poleres Ankunft [br](über Loshaus)"
time="11:45" ele="888" />
<targetleave name="Gasthof Poleres Aufbruch" time="12:50" ele="888" />
<target name="Konditorei Alber Ankunft" time="13:45" ele="469" />
<targetleave name="Konditorei Alber Aufbruch" time="14:10" ele="469" />
<target name="Payerbach Bahnhof" time="14:20" ele="494" />
Zusätzlich gibt es noch ein paar Besonderheiten:
-
Zeilenumbrüche:
Wenn im Namen ein Zeilenumbruch benötigt wird, dann wird dies im XML mit [br]
gekennzeichnet. Bei der HTML-Ausgabe der
Zeitaufstellung wird dies dann in das HTML Element <br/>
umgewandelt.
-
Umlaute:
Umlaute können normal im XML eingetragen werden, sie werden aber bei der HTML Ausgabe in die entsprechenden HTML entities umgewandelt.
Haupt-Funktionalität
Das Programm führt folgende Schritte durch:
- Es wird die GPX Datei geparst.
-
Die Timestamps der einzelnen Trackpunkte enthalten meist eine Uhrzeit, die um ein paar Stunden von der lokalen Uhrzeit abweicht.
Daher wird der Zeitpunkt des Starts und der erste GPS Trackpunkt verwendet, um den Unterschied in Stunden zu berechnen und damit die
Zeitpunkte der Trackpunkte zu korrigieren.
- Die Höhenanalyse wird im CSV-Format ausgegeben.
- Die Zeitaufstellung wird im HTML Format ausgegeben.
- Die Übersichtsstatistik wird im HTML Format ausgegeben.
Dabei können folgende Einstellungen über die Datei GpxParser.properties
eingestellt werden:
-
InputFile:
Name der GPX Datei, die verarbeitet werden soll. (Der Pfad zu dieser Datei ist vom Verzeichnis
der Datei GpxParser.properties
aus anzugeben.)
-
HeightAnalysisOutput:
Name der CSV Datei, in welche die Höhenanalyse geschrieben werden soll.#
-
TimeStatisticOutput:
Name der HTML Datei, in welche die Zeitaufstellung geschrieben werden soll.
-
OverviewStatisticOutput:
Name der HTML Datei, in welche die Übersichtsstatistik geschrieben werden soll.
Test-Funktionalität
Zusätzlich gibt es noch eine Test-Funktionalität, die folgende Schritte durchführt:
- Alle GPX Dateien im Unterordner
test
werden geparst.
-
Es werden dabei Zeitaufstellungen temporär generiert, die danach mit den vorgefertigten
Zeitaufstellungen im Unterordner
test
verglichen werden.
-
Zustätzlich werden Übersichtsstatistiken temporär generiert, die danach mit den vorgefertigten Übersichtsstatistik
im Unterordner
test
verglichen werden.
-
Werden Unterschiede erkannt, so werden diese in Text-Dateien im Test-Verzeichnis geschrieben. In der Kommandozeile
wird ausgegeben, in welche Dateien diese Informationen geschrieben wurden. Die temporären Statistik-Outputs werden in diesem
Fall nicht gelöscht, um die Unterschiede untersuchen zu können.
-
Werden keine Unterschiede zwischen den temporären Resultaten und den vorgegebenen Dateien gefunden, so werden alle
temporären Resultate wieder gelöscht und eine "Everything OK" - Meldung angezeigt.
Kml2Gpx
Da ich für eine Wanderung eine KML Datei mit den GPS Koordinaten zur Verfügung hatte, habe ich zusätzlich noch einen
KML zu GPX Konverter geschrieben. Ich bin dann folgendermaßen vorgegangen:
-
Konfiguration: in der Konfigurationsdatei
Kml2Gpx.properties
habe ich die KML Datei, die konvertiert werden
soll beim Parameter InputFile angegeben. Die zu erstellende GPX Datei habe ich beim Parameter OutputFile angegeben.
-
Durch den Aufruf der
kml2gpx.bat
(Windows) bzw. klm2gpx.sh
(Linux)
habe ich die GPX Datei erstellt, wobei nur die Trackpunkte vom Inhalt übernommen werden.
-
Danach habe ich die erstellte GPX Datei um die Targets erweitert, wie in
Änderungen an der GPX Datei beschrieben.
-
Anschließend habe ich die Konfiguration in der Datei
GpxParser.properties
angepasst, so dass der Parameter
InputFile auf die neue erstellt GPX Datei zeigt.
-
Mit
run.bat
(Windows) bzw. run.sh
(Linux) habe ich danach die Statistiken erstellt.
Installation
Voraussetzungen
-
Java Runtime Environment 11 oder höher. (Für das Kompilieren ist das JDK notwendig.)
Installation des Programms
-
Die Datei
GpxParser.zip
in ein Verzeichnis entpacken.
-
Die Konfigurations-Datei
GpxParser.properties
entsprechend anpassen.
-
Die Datei
run.bat
(Windows) bzw. run.sh
(Linux) ausführen.
Kompilieren
-
Die Datei
GpxParser.zip
in ein Verzeichnis entpacken.
-
Für Windows muss in der Datei
compile.bat
der Pfad zur Datei javac.exe
angepasst werden.
-
Abschließend die Datei
compile.bat
(Windows) bzw. compile.sh
(Linux) ausführen.
Downloads
Changelog für Version 0.0.3
Folgende Änderungen sind für Version 0.0.3 geplant:
-
Mehr Testfälle für die Übersichtsstatistik und die Zeitstatistik.
-
Kleine Logik-Anpassungen bei der Ermittlung der Höhenunterschiede bzw. der minimalen und maximalen Höhe.
-
Erstellung einer Höhenstatistik, die dann auch auf meiner Homepage zur Anwendung kommt.
Diese Änderungen sind in der Zwischenzeit bereits realisiert:
-
Umstellung auf Java 11 und Entfernung einiger Code-Warnings.
-
Statt einer CSV-Ausgabe der Höhenstatistik wird eine json-Datei erstellt, die dann in JavaScript einer Homepage eingebunden werden kann.
Die neue Höhenstatistik enthält nun die gemittelten Höhenwerte, die schon für die Berechnung der Höhenunterschiede in der Übersichtsstatistik
verwendet wird.
Changelog für Version 0.0.2
Folgende Änderungen sind für Version 0.0.2 umgesetzt worden:
-
Einführung der neuen Übersichtsstatistik:
-
Ein HTML Code wird generiert. In diesem sind die reine Wanderzeit, die gesamte Dauer der Wanderung,
die Distanz, die Geschwindigkeit, die Zeit pro Kilometer, der Anstieg, der Abstieg und die minimale
und die maximale Höhe angeführt.
-
Die Berechnung der Höhenwerte wählt zunächst jeden 25. Tracking-Punkt aus. Von jedem gewählten Tracking-Punkt
wird die durchschnittliche Höhe der 5 aufeinander folgenden Punkte rund um diesen Punkt verwendet.
Dadurch sollen die Auswirkungen Ausreißern und vom Rauschen in den Höhenwerten verringert werden.
-
Die Übersichtsstatistik wird in einer HTML-Datei abgespeichert. Der Dateiname wird in der Property
OverviewStatisticOutput in der Datei
GpxParser.properties
festgelegt.
-
Änderungen in der Zeitaufstellung:
- Das HTML Format wurde auf mein neues responsives Layout angepasst.
-
Änderungen bei der Testfunktionalität:
- Die Test-Resultate für die Zeitaufstellung wurden an das neue responsive Layout angepasst.
- Die Unterschiede zwischen den neu erstellten Resultaten und den Soll-Resultaten werden jetzt in Dateien geschrieben.
- Tests für die Übersichtsstatistik wurden erstellt.
Mögliche Erweiterungen
-
Eine Testroutine für dem KML zu GPX Konverter.
-
Die Erstellung der Höhenstatistik im CSV-Format fertigstellen, bzw. an die Anforderung der Javascript Funktionalität
auf der Homepage anpassen.
-
Eine Testroutine für die Höhenstatistik erstellen.
-
Daten für das Zeichnen des Tracks mit Javascript auf der Homepage zur Verfügung stellen.
-
Eventuell einmal eine kleine GUI für diese Anwendung schreiben.