GPX files einer Pulsuhr mit GPSbabel und XSLT optimieren

optimize GPX files
Praktisch jede GPS Pulsuhr erlaubt es die einzelnen Trainingseinheiten als GPX Datei abzuspeichern – dabei sind neben den Geodaten auch andere Daten enthalten die für die Darstellung in Landkarten nicht notwendig sind und auch die Auflösung ist weit über jener die man für das Einbinden in eine Homepage benötigt – zB. mit WordPress und dem OpenStreetMap plugin OSM. Der Artikel zeigt am praktischen Beispiels eines Halbmarathons mit der Garmin Forerunner 305, wie eine Reduktion auf ca. 16% der GPX-Dateigröße die Ladezeit einer Homepage optimiert wird ohne dabei nennenswerte Verluste in der Genauigkeit zu erkennen. Alle tools sind unter Win, Linux und Mac verfügbar.

Die einzelnen Schritte mit ihrem Fortschritt:

  • GPS Daten eines Halbmarathon mit Garmin Forerunner 305 aufzeichnen: 341,7kByte
  • Information der einzelnen Wegpunkte mit XSLT reduzieren: 69,2kByte
  • Anzahl der Wegpunkte mit GPSBabel reduzieren: 58kByte

Das GPX file der Garmin Forerunner 305 unter Linux Ubuntu

Wer mit pyTrainer unter Linux Ubuntu seine Trainingsdaten verwaltet, findet die GPX files der einzelnen Trainingseinheiten unter:

.pyTrainer/gpx/

Wer zu Sicherungskopien neigt sollte daher auch diesen Ordner in sein Backup miteinbeziehen.

Mit XSLT das GPX file den Bedürfnissen anpassen

Wenn man das GPX-file mit einem Texteditor öffnet findet man einzelnen Punkte seiner Trainingseinheit in der Form:

<trkpt lat=”35.8612283″ lon=”129.2111794″>
<ele>40.5128174</ele>
<time>2010-10-17T00:07:14Z</time>
<extensions>
<tp1:TrackPointExtension>
<tp1:hr>127</tp1:hr>
</tp1:TrackPointExtension>
</extensions>

</trkpt>

Für die Darstellung auf der Karte werden allerdings nur die Geodaten benötigt, also lat und lon (grün markiert). Von Nick habe ich folgende XSLT Codezeilen erhalten um die unnötigen Daten (rot markiert) in der GPX Datei zu eliminieren:

<?xml version="1.0" encoding="UTF-8"?>
 <xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xs="http://www.w3.org/2001/XMLSchema"
 xmlns:fn="http://www.w3.org/2005/xpath-functions"
 xmlns:gpx11="http://www.topografix.com/GPX/1/1">
 <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<!-- Root node, elements and attributes: Copy the node and recurse -->
 <xsl:template match="/|*|@*">
 <xsl:copy>
 <xsl:apply-templates/>
 </xsl:copy>
 </xsl:template>
<!-- trkpt element: Copy the node; process lat and lon attributes only -->
 <xsl:template match="gpx11:trkpt">
 <xsl:copy>
 <xsl:apply-templates select="@lat|@lon"/>
 </xsl:copy>
 </xsl:template>
 </xsl:stylesheet>

Um diesen Code auf die GPX-Datei anzuwenden verwendet man zB. einfach das XSLT Service von online-toolz und gibt in der linken Spalte seine Eingabedatei ein, in der rechten Spalte den Code und dann erhalte ich die neue GPX Datei mit 69.2kByte, die ich unter 2011_HM_Gyeongju_latlon.gpx abspeichere. Gegenüber der Eingabedatei 2011_HM_Gyeongju.gpx mit 341,7kByte ist das bereits eine Reduktion auf 20% der Dateigröße.

Die Anzahl der Punkte im GPX file mit GPSBabel an die Anwendung anpassen

Wer einen Lauf über mehrere Stunden in einer Karte darstellen will wird nicht einen Punkt alle 5 Sekunden des Laufs benötigen. In der Annahme, daß man gleichmäßig läuft, könnte man zB. für einen Halbmarathon (21.000 Meter) alle 20 Meter einen Punkt darstellen. Das wären dann 1.050 Punkte. Das GPSBabel Kommando ist einfach aufgebaut:

gpsbabel [Optionen] -i Typ_der_Eingabedatei -f Name_der_Eingabedatei [Filter] -o Typ_der_Ausgabedatei -F Name_der_Ausgabedatei

Für meine Beispieldatei mit 2011_HM_Gyeongju_latlon.gpx (69,2kByte) wähle ich zwei Filter, einen um die Strecke zu “vereinfachen” und einen um die Punkteanzahl auf 1.050 zu limitieren:

gpsbabel -i gpx -f 2011_HM_Gyeongju_latlon.gpx -x simplify,count=1050 -o gpx -F 2011_HM_Gyeongju_latlon_2100p.gpx

Damit schrumpft die Größer der Datei nochmals auf 58kB und damit auf ca. 16% der ursprünglichen Größe bei ausreichender Auflösung der Strecke für die Homepage.

Die Darstellung der optimierten GPX Datei in WordPress OSM

Karte erstellt mit dem WordPress OSM plugin (bei gedrückter Shift-Taste mit Maustaste zoomen). Die Datei der dargestellten Strecke hat nur 16% der Dateigröße wie man sie vom Garmin Forerunner 305 bekommt.

Natürlich können die beide Schritte (XSLT und GPSBabel) jeweils auch alleine ausgeführt werden, wenn zB. der XSLT Code für die eigene GPS-Uhr Datei nicht passt. Es ist allerdings zu erkennen, daß der entscheidende Faktor das Entfernen der unnötigen Informationen in den einzelnen Wegpunkten ist.

Eine alternative Form der Datenreduktion wäre natürlich einfach schneller zu laufen 😉

Related links:

GPSBabel
XSLT Service von online-toolz
pyTrainer
XSLT – Info

 

Posted in tutorial
Tags: ,

Leave a Reply

Your email address will not be published. Required fields are marked *

*