Während unseres Elba Urlaubs habe ich mit meinem ForeRunner fleissig unsere Radtouren verfolgt, leider ist dabei was schief gegangen und mein GPS Log startet und endet am ersten Tag unseres Urlaubs – obwohl wirklich alle Strecken korrekt aufgezeichnet in der TCX-Datei stehen.
So wie ich das sehe hat der ForeRunner einfach immer am nächsten Tag bei der alten Strecke weiter gemacht anstatt den Track abzuschließen und einen neuen zu beginnen – werd ich wohl noch mal das Handbuch konsolidieren müssen 😉
Wie auch immer, das Kind ist bereits in den Brunnen gefallen – also muss eine Lösung her!
Normalerweise verwende ich RouteConverter für das Zerlegen und Umwandeln meiner TCX Dateien, allerdings klappt das in diesem Fall nicht weil RouteConverter keine TCX Dateien schreiben kann und allen ähnlichen Formaten fehlen dann die Pulswerte.
Aus der Not heraus habe ich mir dann das TCX Format ein wenig angeschaut und festgestellt dass es klassisches XML ist und in der Datei die einzelnen Tracks schön aufzufinden sind.
Wenige Minuten später steht schon mal ein Bash Script welches mir die Datei nach dem im Time-Tag angegebenen Tagen aufsplittet:
#!/bin/bash
if [ ! „$1“ ]; then
echo „Bitte zu lesende Datei angeben!“
exit
fiIFS=“
„if [ „$3“ ]; then
START=$(grep -n „<Track“ $1| head -1| awk -F‘:‘ ‚{print $1}‘)
START=$((START-1))
head -$START $1
ENDE=$(($3-$2))
head -$3 $1 |tail -$ENDE
ENDE=$(grep -n „</Lap>“ $1|tail -1| awk -F‘:‘ ‚{print $1}‘)
GESAMT=$(wc -l $1|awk ‚{print $1}‘)
ZENDE=$((GESAMT-ENDE+1))
tail -$ZENDE $1else
for T in $(grep -A2 „<Track>“ $1|grep „Time“); do
TAG=$(echo $T|awk -F‘>‘ ‚{print $2}’|awk -F'<‚ ‚{print $1}’|awk -F ‚T‘ ‚{print $1}‘)
if [ ! „X$TAG“ == „X$LASTTAG“ ]; then
START=$(grep -n „<Time>$TAG“ $1|head -1|awk -F‘:‘ ‚{print $1}‘)
START=$((START-3))
ENDE=$(grep -n „<Time>$TAG“ $1|tail -1|awk -F‘:‘ ‚{print $1}‘)
ENDE=$((ENDE+2))
echo -e „$TAGn Start: $STARTn Ende: $ENDEn“
fiLASTTAG=$TAG
done
echo „Bitte Start- und Endzeile mit angeben!“
fi
Ich habe das Programm unter dem Namen „split_track.sh“ abgespeichert, beim ersten Aufruf muss man lediglich den Dateinamen der TCX-Datei angeben und schon werden einen die möglichen Start/Endpunkte angezeigt. Beim zweiten Starten gibt man dann einfach den entsprechenden Start/Endpunkt zusätzlich als Parameter an und leitet die Ausgabe mit „>“ in die gewünschte Datei um.
Das Ergebnis ist eine frische TCX Datei mit lediglich dem Tag den man vorher ausgewählt hat.
Diese hatte in meinem Fall allerdings einen kleinen Schönheitsfehler, die Streckendaten waren über Tage summiert und daher starteten die Daten vom 3. Tag z.B. bei Kilometer 67 und nicht bei Null wie ich es für eine Tagestour erwartet hätte.
Also muss ein weiteres Script her das die einzelnen Werte in „DistanceMeters“ um einen Angegebenen Wert korrigiert!
#!/bin/bash
if [ ! „$1“ ]; then
echo „Bitte zu lesende Datei angeben!“
exit
fiif [ ! „$2“ ]; then
echo „Bitte falschen Startwert Entfernung angeben!“
FST=$(grep „DistanceMeters“ $1|head -2 |tail -1|awk -F‘>‘ ‚{print $2}’| awk -F ‚<‚ ‚{print $1}‘)
echo „z.B.: $FST“
exit
fiFSTART=$2
GSTART=$(echo $FSTART|awk -F‘.‘ ‚{print $1}‘)IFS=“
„for I in $(cat $1); do
TYP=$(echo $I|awk -F‘>‘ ‚{print $1}’|sed -e „s/ //g“)
WERT=$(echo $I|awk -F‘>‘ ‚{print $2}’| awk -F ‚<‚ ‚{print $1}‘)
WERTGANZ=$(echo $WERT|awk -F‘.‘ ‚{print $1}‘)
if [ „X$TYP“ == „X<DistanceMeters“ ]; then
if [ $WERTGANZ -ge $GSTART ]; then
NEUWERT=$(echo „scale=7; $WERT-$FSTART“|bc)
echo “ <DistanceMeters>$NEUWERT</DistanceMeters>“
else
echo “ <DistanceMeters>$WERT</DistanceMeters>“
fi
else
echo $I
fidone
Vom Ablauf her funktioniert das zweite Script (ich habe es entf_chg.sh genannt) fast gleich, beim ersten Aufruf nur den Dateinamen der TCX Datei angeben und anschließen noch als Parameter den abzuziehenden Meterwert inkl. Nachkommerstellen (durch Punkt getrennt – nicht Komma!) angeben.
Leitet man die Ausgabe dann erneut in eine Datei um, erhält man eine neue TCX Datei mit hoffentlich korrekten Entfernungsangaben. Der Script-Durchlauf kann etwas dauern, mir war wichtiger dass es funktioniert – die Geschwindigkeit war da erst mal zweitrangig.
Bei meinen Versuchen hatte ich ab und zu noch das Problem dass nach dem Splitten in der TCX Datei noch ein LAP-XML-Eintrag vorhanden war ohne vernünftige Werte, den musste ich händisch rauslöschen damit das zweite Script korrekte Entfernungsangaben liefern konnte.
Alles in allem ist das ganze sicher nicht perfekt, aber es hat bei mir sehr gut funktioniert und eventuell hilft es ja dem einen oder anderen bei einem ähnlichen Problem weiter 🙂
Ich habe schon länger nicht mehr hier im Blog geschrieben, was nicht daran liegt dass…
Man macht es nicht jeden Tag, darum schadet es nicht sich's kurz zu notieren... Hier…
Meine Suche bei Google hatte mal wieder keinen vernünftigen Treffer gelandet, das Problem - ich…
Ich muss mal eben etwas Druck ablassen, ein Kunde von mir setzt einen Drucker von…
Wer beim Server bestellen vergessen hat die erweiterte IRMC Lizenz zu ordern, der steht vor…
Ich nutze seit langer Zeit ein System für meine Backups welches in der Nacht von…