PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Höhendaten von GPS-Tracks anpassen



Juergen
20.03.2015, 13:03
Bei Trackaufzeichnungen stimmen manchmal die Höhenangaben nicht oder es sind
Sprünge in der Aufzeichnung (siehe Abbildung, gelber Pfeil).

https://www.outdoorseiten.net/fotos/uploads/17214/Hoehenprofil.png

Dies kann verschiedene Gründe haben: Die richtige Ausgangshöhe wurde nicht eingestellt.
Das GPS-Gerät passt die Höhe während der Wanderung an.
Der Anwender korrigiert die Höhe während der Tour.
Durch Luftdruckänderungen werden die Höhenwerte verfälscht.

Als Konsequenz sehen manche Höhenprofile ziemlich häßlich aus und eignen sich insbesondere
nicht für eine Veröffentlichung. Mit GPS-Babel kann man leider nur einen konstanten Wert zur
Höhe addieren.

Ich habe gerade ein kleines Perl-Skript geschrieben zur Korrektur von Höhendaten in GPS-Tracks
im GPX-Format. Der Programmcode ist unten.

Das Skript wird mit folgenden Parametern aufgerufen:

Hoehe.pl Input.gpx Output.gpx n1 n2 H1 H2

Input.gpx: GPX-Datei, die den Track enthält (und nur diesen !!!), statt "Input.gpx"
wird der Name der einzulesenden Datei angegeben.

Output.gpx: GPX-Datei, in die der korrigierte Track geschrieben wird. Dateiname ist
frei wählbar, Endung sollte .gpx sein.

n1: Nummer des ersten Trackpunkts, der verändert werden soll.
n2: Nummer des letzten Trackpunkts, der verändert werden soll.

H1: Höhe, die Trackpunkt n1 nach der Korrektur haben soll.
H2: Höhe, die Trackpunkt n2 nach der Korrektur haben soll.

Nach Aufruf des Skripts passt dieses die Höhenwerte zwischen n1 und n2 (einschließlich)
an und schreibt das Ergebnis in die Ausgabedatei. Wenn mehrere Segmente eines Tracks
geändert werden sollen, muss das Skript mehrfach aufgerufen werden und die Ausgabedatei
muss zur Eingabe verwendet werden.

Kann sein, dass noch ein paar Fehler im Skript sind, ich habe das noch nicht ausgiebig
getestet. Fehlermeldungen bitte an mich, ich setze dann eine korrigierte Version hier rein.

Viel Spaß

Jürgen


#!/usr/bin/perl -w

if (@ARGV != 6) {
print "Hoehe.pl Input.gpx Output.gpx n1 n2 H1 H2\n";
exit 0;
}

$i = 0;
($n1, $n2, $H1, $H2) = ($ARGV[2], $ARGV[3], $ARGV[4], $ARGV[5]);

open IN, $ARGV[0];
while ( $_ = <IN> ) {
if (m/<ele>(.+)<\/ele>/i) {
$i++;
if ($i == $n1) {
$h1 = sprintf "%f", $1;
$_ = <IN>;
$_ =~ m/<time>\d{4}-\d{2}-\d{2}T(\d{2}):(\d{2}):(\d{2})Z<\/time>/i;
$t1 = (($1 * 60 + $2) * 60) + $3;
} elsif ($i == $n2) {
$h2 = sprintf "%f", $1;
$_ = <IN>;
$_ =~ m/<time>\d{4}-\d{2}-\d{2}T(\d{2}):(\d{2}):(\d{2})Z<\/time>/i;
$t2 = (($1 * 60 + $2) * 60) + $3;
}
}
}
print "$i Trackpunkte\n";
close IN;

$dt = $t2 - $t1;
$m = $H2 - $H1 + $h1 - $h2;

$i = 0;
$flag = 0;
open IN, $ARGV[0];
open OUT, '>' . $ARGV[1];
while ( $_ = <IN> ) {
if (m/<ele>(.+)<\/ele>/i) {
$i++;
if ($i == $n1) {
$flag = 1;
} elsif ($i == $n2 + 1) {
$flag = 0;
}
if ($flag == 1) {
$h = sprintf "%f", $1;
$_ = <IN>;
$_ =~ m/<time>\d{4}-\d{2}-\d{2}T(\d{2}):(\d{2}):(\d{2})Z<\/time>/i;
$t = (($1 * 60 + $2) * 60) + $3;
$H = $h + $H1 - $h1 + ($t - $t1)/$dt * $m;
printf OUT " <ele>%4.7f</ele>\n", $H;
print OUT;
} else {
print OUT;
}
} else {
print OUT;
}
}
close IN;
close OUT;

Spartaner
20.03.2015, 13:13
Da die vom GPS aufgezeichneten Höhendaten idR erhebliche Abweichungen vom wahren Wert haben, setze ich stattdessen gerne mal die SRTM-Höhendaten (http://de.wikipedia.org/wiki/SRTM-Daten) ein. Dazu den gpx-Track mit dem Programm GPS-Track-Analyse.NET (http://www.gps-track-analyse.de/index.html) öffnen, die entsprechen Bereiche der SRTM-Höhendaten runterladen (http://www.viewfinderpanoramas.org/dem3.html), und die Werte zuweisen lassen. Klar, da kommt auch nicht immer die reine Wahrheit raus, aber im allgemeinen ist der Fehler erheblich geringer als bei den selbst aufgezeichneten Höhenwerten.

Gruß Michael

Juergen
20.03.2015, 13:35
Bei Garmin Connect kann man wählen, ob man die Höhendaten aus dem GPS
oder die von Vermessungsdiensten verwenden will. Die Höhendaten von
Vermessungsdiensten sind hier im Allgemeinen sehr schlecht.

Mein barometrischer Höhenmesser im eTrex Vista HCx ist schon auf 10 m genau,
ich kann nicht klagen. Die Verfälschungen kommen bei mir in erster Linie von
Fehleinstellungen oder Luftdruckveränderungen.

Radfahrer
24.03.2015, 23:14
Die Höhendaten von
Vermessungsdiensten sind hier im Allgemeinen sehr schlecht.


Bisschen OT:
Je nach Anforderung relativ gesehen. Ich bin bezüglich Oruxmaps zusammen mit den Srtm-Daten, sowie auch dem BRouter eigentlich schon gut bedient, würde mich aber diesbezüglich, auch für die Entwickler, über noch genauere Daten freuen. Die 3D-Ansicht in Oruxmaps zusammen mit Vektorkarten ist schon ziemlich brauchbar, um Streckenverläufe optisch gut einschätzen zu können.


Dieses Jahr soll es bezüglich der SRTM-Daten eine Freischaltung auf ein 30 m Raster auch für Europa geben. Bisher nur 90m Abstände. Sicherlich müssen Softwareentwickler auch dann noch berüchsichtigen, dass da teilweise Baumwipfelhöhen gemessen wurden. Für die Zukunft ist es natürlich wünschenswert, dass es aus vielen Quellen zusammengetragene und verifizierte Daten gibt, die für jedermann frei verfügbar sind.