GpxParser

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 bisher immer manuell erstellt, was mit viel Aufwand während der Wanderung und dann auch beim Schreiben verbunden war.)
  • Erstellung einer Höhenstatistik, die dann mittels Javascript visualisiert wird.
  • Erstellung x- und y-Koordinaten-Punkten der Strecke, die dann mittels Javascript visualisiert wird.

Ä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.
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.
  • ConsiderHeights:
    Eine Eigenschaft, die den Wert 0 oder 1 annehmen kann. Wenn 1 eingestellt ist, wird bei der Zeitaufstellung eine zweite Tabelle eingefügt, bei der in den Distanzen der Höhenunterschied auch eingerechnet wird. Wenn 0 eingestellt ist, wird nur die Zeitaufstellung mit den Distanzen zwischen den GPS Koordinaten ausgegeben.

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 wird dabei eine Zeitaufstellung temporär generiert, die danach mit den vorgefertigten Zeitaufstellungen im Unterordner test verglichen werden.
  • Wird ein Unterschied erkannt, so wird dieser auf der Kommandozeile ausgegeben, ansonsten wird nur "Everything OK" 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.
  • Danach 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 1.8 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.

Download

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.