ubuntuusers.de

gpsbabel: Zeitformat und Optionen

Status: Ungelöst | Ubuntu-Version: Ubuntu 15.10 (Wily Werewolf)
Antworten |

caiusjuliuscaesar

Anmeldungsdatum:
20. Januar 2009

Beiträge: 307

Hallo,

1. Ich möchte gerne aus diversen (vielen) gpx-Dateien alle Geodaten auslesen: sowohl Trackpoints als auch Waypoints. Das folgende Kommando funktioniert aber nicht, obwohl -t für Track, -w für Waypoint steht. Die Ausgabedateien bleiben leer:

1
 gpsbabel -t -w -i gpx -f gpxdatei.gpx -o unicsv -F gpxdatei.csv

Das folgende funktioniert, aber natürlich nur für die Tracks

1
 gpsbabel -t i gpx -f gpxdatei.gpx -o unicsv -F gpxdatei.csv

2. Der verarbeitbare Zeitstempel nach diversem Ausprobieren scheint nur für Zeitpunkte nach dem 01.01.1970 zu funktionieren. Kann das jemand bestätigen? Gibt eine Abhilfe für Daten vor 1970?

Gruß, CJC

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

Kann das jemand bestätigen?

Zeitstempel unter Linux / Unix beginnen am 1.1.1970 um 0 Uhr - der Zeitstempel ist also 0.

Ergo kennen die Zeitstempel kein Datum vor dem 1.1.1970.

Abgesehen davon: warum brauchst du Zeitstempel < 1.1.1970?

Gruß, noisefloor

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Wenn ich das gpx- Schema richtig lese, dann ist *.gpx sowieso nur ein XML- Format.

Das heißt, Du könntest ggf. (falls es mit gpsbabel nicht geht) auch einfach mit xmlstarlet die rohen Daten aus den entsprechenden Nodes ziehen. Hat allerdings den Preis, dass Du die entsprechenden Befehle und Xpath's zu Fuß aufstellen musst.
(in dem Fall wäre es gut, wenn Du uns mal ein Beispiel zum testen posten würdest)

Falls es Zeitstempel vor 1970 gibt, würde man bei der Gelegenheit auch gleich sehen, wie die codiert sind.

LG,

track

caiusjuliuscaesar

(Themenstarter)

Anmeldungsdatum:
20. Januar 2009

Beiträge: 307

Das mit den Zeiten ist sowieso ein Problem. Die scheinen überall unterschiedlich kodiert zu sein. Der Zeitstempel ab dem 01.01.1970 ist so eine Sache, wenn man mit einer int-Zahl im Zweierkomplement ab dem 01.01.1970 die Sekunden zählt, kommt man bis zum Jahr 2038, nimmt man die negativen Zahlen und zählt die Sekunden rückwärts, so kommt man bis zum Jahr 1903. Das machen manche Betriebssysteme, glaube ich. Bei mysql und Excel ist es noch anders.

Und hier die Dateien in Kurzform:

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" creator="byHand" version="1.1"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">

<wpt lat="52.372695" lon="4.916804"><time>1915-10-16T19:43</time><name>52.372695/4.916804</name></wpt>
<wpt lat="51.421844" lon="6.998986"><time>1915-12-02T15:15</time><name>51.421844/6.998986</name></wpt>
</gpx>

bzw.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" creator="byHand" version="1.1"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">

<trk>
<trkseg>
<trkpt lat="49.320771" lon="5.801156"><time>1918-09-01T08:00:00</time><name>Landres</name></trkpt>
<trkpt lat="49.695028" lon="4.930675"><time>1918-09-01T08:00:00</time><name>Sedan</name></trkpt>
<trkpt lat="50.245976" lon="4.149178"><time>1918-09-01T08:00:00</time><name>Cousolre</name></trkpt>
</trkseg>
</trk>
</gpx>

Ich schaue mir xmlstarlet mal an, bin aber für Vorschläge offen...

Grüße,

CJC

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

dann ist *.gpx sowieso nur ein XML- Format.

Korrekt ☺

kommt man bis zum Jahr 2038

Korrekt. Das ist auch als das Jahr-2038-Problem bekannt.

Das Zeitformat in den GPX-Dateien ist ISO_8601. Wo hast du die Dateien her? Wenn die ein GPSr aufgezeichnet hat, dann stimmt daran die Datumseinstellung nicht. Wo hast du die Dateien denn her? Und warum willst / musst du daraus einen Unix-Zeitstempel machen?

Im gegebenen Fall würde ich zu eine XML-Parser greifen. Geht in der Bash, geht aber auch in jeder gängigen Programmiersprache (Python hat z.B. die nötigen XML-Parser schon an Bord).

Gruß, noisefloor

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Mit xmlstarlet wird das etwas in der Art werden:

xmlstarlet sel -N x="http://www.topografix.com/GPX/1/1" -t -m "//*/x:time" -v . -o ";" -v ../x:name -n

Oder aber Du nimmst direkt xpath :

xpath -e "//*[@lat]/*/text()" -q

Hält sich also in Grenzen mit dem Aufwand.

LG,

track

Antworten |