... the user friendly GPS tool


Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Merkwürdige Interpretation einer GPX Datei
#1
Hallo,

Sorry, wenn ich vielleicht eine Newbie Frage stelle. Ich habe da eine GPX Datei mittels ExifTool aus einer Garmin Dash Cam Datei extrahiert. Aus meiner Sicht sieht sie korrekt aus und ist ähnlich zu anderen GPX Dateien aus, welche ich ebenfalls nutze. Diese stammen von anderen GPS Geräten. Anbei die Originaldatei (out.gpx) und die als GPX gespeichert Variante der Datei (test.gpx).

Was mir auffält ist, dass das interpretiete Format nicht GPX ist sondern Wintec WBT... Anbei auch ein Screenshot (Screen.jpg).

Hat jemand vielleicht eine Idee, was hier falsch läuft oder was ich tun kann, um ein korrektes Ergebnis zu erhalten? Ich wäre Euch sehr verbunden!

Gruß
Christian


.gpx   out.gpx (Size: 12.76 KB / Downloads: 212)

.gpx   test.gpx (Size: 252.47 KB / Downloads: 176)
   
Reply
#2
Kleines Update. Das Ganze in eine CSV Datei konvertiert (manuell) führt zu einem korrekten Ergebnis.


.zip   test.zip (Size: 1,014 bytes / Downloads: 130)
Reply
#3
Sorry, vergessen: nutze die 2.3.4 Snapshot 359...
Reply
#4
Habe dann mal die CSV direkt von ExifTool erzeugen lassen. Ergebnis: funktioniert nicht. Im Anhang die entsprechende Datei. Diese wird anstelle von CSV als Columbus GPS Type 1 interpretiert.
.zip   out.zip (Size: 1.24 KB / Downloads: 113)
Reply
#5
Hallo Christian,
was genau schief läuft, kann ich nicht sagen, aber zwei Tipps:
  • RouteConverter kümmert sich nicht um die Namenserweiterung (.gpx), sondern liest den Inhalt und entscheidet dann, um welches Format es sich handelt
  • Ich hab immer noch uralte GPX-Dateien, die mal mit einem QStarz-Tracker erstellt wurden. Die kann RouteConverter gar nicht lesen*. Irgendwann kam ich drauf was da stört und schrieb ein kleines Skript, das 'gpx version="v1.1.5"' durch 'gpx version="1.1"' ersetzt und es funktioniert. So was ähnliches könnte das in deinem Fall auch sein.
Also am besten mal die angebliche Wintec Datei mit RouteConverter öffnen, mit "SpeichernAls" als "GPS Exchange Format 1.1 (*.gpx)" speichern und beide mit einem Text-Editor vergleichen.

* "gar nicht lesen" heißt: Die Datei wird zwar geöffnet, aber mit sieht oben rechts, wie RouteConverter alle bekannten Formate durch probiert und nach einiger Zeit aufgibt.

Schönes Wochenende
Wilfried :)
Reply
#6
Moin Wilfried,

Danke für die Infos. Deinen Vorschlag habe bin ich gefolgt und hatte beide Dateien in dem ersten Eintrag angehängt. Damit konnte ich leider nur wenig anfangen.

Ich glaube ich bin ein bisschen weiter. Im Moment lasse ich mir die Daten als CSV erzeugen. Ich habe die Datei vom Exiftool unter der Power Shell erzeugen lassen. Mein Texteditor (notepad++) zeigt die Datei dann auch korrekt an. Schaut man aber in die Kodierung der Datei findet man dort UTF16, während im Header UTF8 steht... Konvertiert man diese dann in UTF8 funktionierts. Ergebnis: nicht mit der Power Shell und dem ">" Operator in eine Datei schreiben sondern mit "| out-file Filename -encoding utf8". Oder alternativ das alte Windows Command Fenster (Standard .bat Datei ist am einfachsten).

Leider funktioniert der Trick nicht bei der GPX Variante. Selbst wenn die Codierung UTF8 ist, ist das Ergebnis nicht identisch zu dem CSV Verfahren (und ich hätte gerne direkt GPX anstelle von CSV). 

Input für RC:
Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<gpx version="1.1"
creator="ExifTool 12.67"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.topografix.com/GPX/1/0"
xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
<trk>
<number>1</number>
<trkseg>
<trkpt lat="48.3673006854951" lon="-123.73093854636">
  <time>2023-07-11T17:26:17Z</time>
</trkpt>
<trkpt lat="48.3672786410898" lon="-123.730940725654">
  <time>2023-07-11T17:26:18Z</time>
</trkpt>
<trkpt lat="48.3672534115613" lon="-123.730951789767">
  <time>2023-07-11T17:26:19Z</time>
</trkpt>
<trkpt lat="48.3672240749002" lon="-123.730972995982">
  <time>2023-07-11T17:26:20Z</time>
</trkpt>
<trkpt lat="48.3672014437616" lon="-123.730998644605">
  <time>2023-07-11T17:26:21Z</time>
</trkpt>
<trkpt lat="48.367181411013" lon="-123.731026556343">
  <time>2023-07-11T17:26:22Z</time>
</trkpt>
<trkpt lat="48.3671691734344" lon="-123.731055306271">
  <time>2023-07-11T17:26:23Z</time>
</trkpt>
<trkpt lat="48.3671596180648" lon="-123.731084391475">
  <time>2023-07-11T17:26:24Z</time>
</trkpt>
<trkpt lat="48.3671446982771" lon="-123.731110207736">
  <time>2023-07-11T17:26:25Z</time>
</trkpt>
<trkpt lat="48.3671323768795" lon="-123.731134347618">
  <time>2023-07-11T17:26:26Z</time>
</trkpt>
<trkpt lat="48.3671193011105" lon="-123.731161756441">
  <time>2023-07-11T17:26:27Z</time>
</trkpt>
<trkpt lat="48.3671055547893" lon="-123.731188913807">
  <time>2023-07-11T17:26:28Z</time>
</trkpt>
<trkpt lat="48.3670904673636" lon="-123.731225710362">
  <time>2023-07-11T17:26:29Z</time>
</trkpt>
<trkpt lat="48.3670806605369" lon="-123.731269966811">
  <time>2023-07-11T17:26:30Z</time>
</trkpt>
<trkpt lat="48.3670719433576" lon="-123.731317911297">
  <time>2023-07-11T17:26:31Z</time>
</trkpt>
<trkpt lat="48.3670690935105" lon="-123.731365352869">
  <time>2023-07-11T17:26:32Z</time>
</trkpt>
<trkpt lat="48.3670732844621" lon="-123.731408771127">
  <time>2023-07-11T17:26:33Z</time>
</trkpt>
<trkpt lat="48.3670760504901" lon="-123.731457805261">
  <time>2023-07-11T17:26:34Z</time>
</trkpt>
<trkpt lat="48.3670794032514" lon="-123.731513461098">
  <time>2023-07-11T17:26:35Z</time>
</trkpt>
<trkpt lat="48.3670865278691" lon="-123.731564925984">
  <time>2023-07-11T17:26:36Z</time>
</trkpt>
<trkpt lat="48.3670978434384" lon="-123.731617312878">
  <time>2023-07-11T17:26:37Z</time>
</trkpt>
<trkpt lat="48.3671103324741" lon="-123.731666682288">
  <time>2023-07-11T17:26:38Z</time>
</trkpt>
<trkpt lat="48.3671199716628" lon="-123.731718314812">
  <time>2023-07-11T17:26:39Z</time>
</trkpt>
<trkpt lat="48.3671266771853" lon="-123.731776149943">
  <time>2023-07-11T17:26:40Z</time>
</trkpt>
<trkpt lat="48.3671334665269" lon="-123.731835829094">
  <time>2023-07-11T17:26:41Z</time>
</trkpt>
<trkpt lat="48.3671476319432" lon="-123.731883689761">
  <time>2023-07-11T17:26:42Z</time>
</trkpt>
<trkpt lat="48.3671633899212" lon="-123.731918977574">
  <time>2023-07-11T17:26:43Z</time>
</trkpt>
<trkpt lat="48.3671880327165" lon="-123.731931131333">
  <time>2023-07-11T17:26:44Z</time>
</trkpt>
<trkpt lat="48.3672043774277" lon="-123.731924761087">
  <time>2023-07-11T17:26:45Z</time>
</trkpt>
<trkpt lat="48.3672138489783" lon="-123.731921659783">
  <time>2023-07-11T17:26:46Z</time>
</trkpt>
<trkpt lat="48.3672124240547" lon="-123.731916043907">
  <time>2023-07-11T17:26:47Z</time>
</trkpt>
<trkpt lat="48.3672114182264" lon="-123.731912104413">
  <time>2023-07-11T17:26:48Z</time>
</trkpt>
<trkpt lat="48.3672109153122" lon="-123.731910511851">
  <time>2023-07-11T17:26:49Z</time>
</trkpt>
<trkpt lat="48.3672100771219" lon="-123.731905482709">
  <time>2023-07-11T17:26:50Z</time>
</trkpt>
<trkpt lat="48.3672109991312" lon="-123.731900956482">
  <time>2023-07-11T17:26:51Z</time>
</trkpt>
<trkpt lat="48.3672106638551" lon="-123.73190020211">
  <time>2023-07-11T17:26:52Z</time>
</trkpt>
<trkpt lat="48.3672106638551" lon="-123.73190020211">
  <time>2023-07-11T17:26:53Z</time>
</trkpt>
<trkpt lat="48.3672106638551" lon="-123.73190020211">
  <time>2023-07-11T17:26:54Z</time>
</trkpt>
<trkpt lat="48.3672106638551" lon="-123.73190020211">
  <time>2023-07-11T17:26:55Z</time>
</trkpt>
<trkpt lat="48.3672106638551" lon="-123.73190020211">
  <time>2023-07-11T17:26:56Z</time>
</trkpt>
<trkpt lat="48.3672106638551" lon="-123.73190020211">
  <time>2023-07-11T17:26:57Z</time>
</trkpt>
<trkpt lat="48.3672106638551" lon="-123.73190020211">
  <time>2023-07-11T17:26:58Z</time>
</trkpt>
<trkpt lat="48.3672106638551" lon="-123.73190020211">
  <time>2023-07-11T17:26:59Z</time>
</trkpt>
<trkpt lat="48.3672106638551" lon="-123.73190020211">
  <time>2023-07-11T17:27:00Z</time>
</trkpt>
<trkpt lat="48.3672182075679" lon="-123.731897855178">
  <time>2023-07-11T17:27:01Z</time>
</trkpt>
<trkpt lat="48.3672560099512" lon="-123.731870949268">
  <time>2023-07-11T17:27:02Z</time>
</trkpt>
<trkpt lat="48.3672934770584" lon="-123.73183096759">
  <time>2023-07-11T17:27:03Z</time>
</trkpt>
<trkpt lat="48.3673332910985" lon="-123.731771707535">
  <time>2023-07-11T17:27:04Z</time>
</trkpt>
<trkpt lat="48.367371764034" lon="-123.731687217951">
  <time>2023-07-11T17:27:05Z</time>
</trkpt>
<trkpt lat="48.3674102369696" lon="-123.731589401141">
  <time>2023-07-11T17:27:06Z</time>
</trkpt>
<trkpt lat="48.3674544095993" lon="-123.731481526047">
  <time>2023-07-11T17:27:07Z</time>
</trkpt>
<trkpt lat="48.3675087243319" lon="-123.731363257393">
  <time>2023-07-11T17:27:08Z</time>
</trkpt>
<trkpt lat="48.3675692416728" lon="-123.731222692877">
  <time>2023-07-11T17:27:09Z</time>
</trkpt>
<trkpt lat="48.3676463551819" lon="-123.731086486951">
  <time>2023-07-11T17:27:10Z</time>
</trkpt>
<trkpt lat="48.367728330195" lon="-123.730956399813">
  <time>2023-07-11T17:27:11Z</time>
</trkpt>
<trkpt lat="48.3678169269115" lon="-123.730830922723">
  <time>2023-07-11T17:27:12Z</time>
</trkpt>
<trkpt lat="48.3679100498557" lon="-123.730702595785">
  <time>2023-07-11T17:27:13Z</time>
</trkpt>
<trkpt lat="48.3680115547031" lon="-123.730580555275">
  <time>2023-07-11T17:27:14Z</time>
</trkpt>
<trkpt lat="48.3681277278811" lon="-123.730480307713">
  <time>2023-07-11T17:27:15Z</time>
</trkpt>
<trkpt lat="48.3682353515178" lon="-123.730364385992">
  <time>2023-07-11T17:27:16Z</time>
</trkpt>
</trkseg>
</trk>
</gpx>

Hier wird die Datei dann als GPX 1.0 erkannnt. Aber leider ohne Wegpunkte. Wenn ich dann die Daten von RC wieder abspeichern lasse kommt nur folgendes dabei heraus:

Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<gpx xmlns:gpxtpx1="http://www.garmin.com/xmlschemas/TrackPointExtension/v1" xmlns="http://www.topografix.com/GPX/1/1" xmlns:trp="http://www.garmin.com/xmlschemas/TripExtensions/v1" xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3" xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v2" version="1.1" creator="RouteConverter 2.34-SNAPSHOT-359">
    <metadata>
        <time>2023-10-14T09:52:15.529Z</time>
    </metadata>
    <rte>
        <name>?</name>
    </rte>
</gpx>

Gruß
Christian
Reply
#7
Ich glaube ich habe den Fehler gefunden.

Im Header der erzeugten Datei steht folgendes:
Code:
<gpx version="1.1"
...
xmlns="http://www.topografix.com/GPX/1/0"
xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
Wenn man hinschaut und versucht die Daten zu interpretieren steht bei topografix /1/0 (was vermutlich auf GPX1.0 hindeutet.

Ändert man die erste Zeile wie folgt:
Code:
<gpx version="1.0"
 funktioniert es!
Reply
#8
Hier die vollständige Anleitung, wie man aus einer Garmin Dash Cam MP4 Datei GPX Daten mittels ExifTool für RC extrahiert.

Es wird eine Datei benötigt, welche das zu schreibende Format festlegt (gpx.fmt):
Code:
#------------------------------------------------------------------------------
# File:         gpx.fmt
#
# Description:  Example ExifTool print format file to generate a GPX track log
#
# Usage:        exiftool -p gpx.fmt -ee3 FILE [...] > out.gpx
#
# Requires:     ExifTool version 10.49 or later
#
# Revisions:    2010/02/05 - P. Harvey created
#               2018/01/04 - PH Added IF to be sure position exists
#               2018/01/06 - PH Use DateFmt function instead of -d option
#               2019/10/24 - PH Preserve sub-seconds in GPSDateTime value
#               2023/10/14 - CD changed to Garmin DashCam 67W available data and
#                                correction of gxp version to 1.0
#
# Notes:     1) Input file(s) must contain GPSLatitude and GPSLongitude.
#            2) The -ee3 option is to extract the full track from video files.
#            3) The -fileOrder option may be used to control the order of the
#               generated track points when processing multiple files.
#            4) Coordinates are written at full resolution.  To change this,
#               remove the "#" from the GPSLatitude/Longitude tag names below
#               and use the -c option to set the desired precision.
#------------------------------------------------------------------------------
#[HEAD]<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
#[HEAD]<gpx version="1.0"
#[HEAD] creator="ExifTool $ExifToolVersion"
#[HEAD] xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
#[HEAD] xmlns="http://www.topografix.com/GPX/1/0"
#[HEAD] xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
#[HEAD]<trk>
#[HEAD]<number>1</number>
#[HEAD]<trkseg>
#[IF]  $gpslatitude $gpslongitude
#[BODY]<trkpt lat="$gpslatitude#" lon="$gpslongitude#">
#[BODY]  <time>${gpsdatetime#;my ($ss)=/\.\d+/g;DateFmt("%Y-%m-%dT%H:%M:%SZ");s/Z/${ss}Z/ if $ss}</time>
#[BODY]</trkpt>
#[TAIL]</trkseg>
#[TAIL]</trk>
#[TAIL]</gpx>

Weiterhin wird eine Configdatei benötigt, welche die Zeitdaten korrekt darstellt (gpsdatetime.config):
Code:
%Image::ExifTool::UserDefined = (
    'Image::ExifTool::Composite' => {
        GPSDateTime => {
            Description => 'GPS Date/Time',
            Groups => { 2 => 'Time' },
            SubDoc => 1,
            Require => {
                0 => 'Main:CreateDate',
                1 => 'SampleTime',
            },
            ValueConv => q{
                my $time = $val[0];
                my $diff = $val[1];
                # handle time zone and shift to UTC
                if ($time =~ s/([-+])(\d{1,2}):?(\d{2})$//) {
                    my $secs = (($2 * 60) + $3) * 60;
                    $secs *= -1 if $1 eq '+';
                    $diff += $secs;
                } elsif ($time !~ s/Z$//) {
                    # shift from local time
                    $diff += GetUnixTime($time, 1) - GetUnixTime($time);
                }
                my $sign = ($diff =~ s/^-// ? '-' : '');
                $time .= '.000';    # add decimal seconds
                ShiftTime($time, "${sign}0:0:$diff");
                return $time . 'Z';
            },
            PrintConv => '$self->ConvertDateTime($val)',
        },
    },
);

Dann kann man mit einer Batchdatei (im Command Window) wie folgt eine GPX Datei erzeugen:
Code:
.\exiftool.exe -config gpsdatetime.config -p gpx.fmt -ee a.MP4 > out.gpx

Alle drei Dateien müssen natürlich im gleichen Verzeichnis stehen, wie die MP4 Datei oder alternativ müssen Pfade ergänzt werden.

Wer CSV bevorzugt:

Die Datei zur Erzeugung der CSV Variante sieht wie folgt aus (csv.fmt):
Code:
#------------------------------------------------------------------------------
# File:         csv.fmt
#
# Description:  Example ExifTool print format file to generate a CSV track log
#
# Usage:        exiftool -p gpx.fmt -ee3 FILE [...] > out.gpx
#
# Requires:     ExifTool version 10.49 or later
#
# Revisions:    2023/10/13 - CD
#
# Notes:     1) Input file(s) must contain GPSLatitude and GPSLongitude.
#            2) The -ee3 option is to extract the full track from video files.
#            3) The -fileOrder option may be used to control the order of the
#               generated track points when processing multiple files.
#            4) Coordinates are written at full resolution.  To change this,
#               remove the "#" from the GPSLatitude/Longitude tag names below
#               and use the -c option to set the desired precision.
#            usage with windows power shell: .\exiftool.exe -config gpsdatetime.config -p csv.fmt -ee a.MP4 | out-file "out.csv" -encoding ascii
#            command window or batch file: .\exiftool.exe -config gpsdatetime.config -p csv.fmt -ee a.MP4 > out2.csv
#-----------------------------------------------------------------------------
#[HEAD]Latitude,Longitude,Timestamp
#[IF]  $gpslatitude $gpslongitude
#[BODY]$gpslatitude#,$gpslongitude#,${gpsdatetime#;my ($ss)=/\.\d+/g;DateFmt("%Y-%m-%dT%H:%M:%SZ");s/Z/${ss}Z/ if $ss}

Die config Datei ist identisch zu oben und die batch Datei muss minimal angepasst werden:
Code:
.\exiftool.exe -config gpsdatetime.config -p csv.fmt -ee a.MP4 > out.csv

Gruß
Christian
Reply
#9
(14.10.2023, 11:16)cc_dd Wrote: Hier die vollständige Anleitung, wie man aus einer Garmin Dash Cam MP4 Datei GPX Daten mittels ExifTool für RC extrahiert.

Klasse, Christian! Vielen Dank für die Rückmeldung.
Wilfried :)
Reply
#10
(14.10.2023, 11:05)cc_dd Wrote: Ich glaube ich habe den Fehler gefunden.

Korrekt – da erzeugt ExifTool kaputtes GPX 1.0. Schreib doch mal den Autoren des Tools an.
--
Christian
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)