DE:Using filters with GPSBabel

From OpenStreetMap Wiki
Jump to navigation Jump to search

Diese Seite beschreibt, wie man mit dem Programm GPSBabel mittels Filter GPX-Spuren editieren kann. Weitere Information zum Thema findet sich hier (englisch).

GPSBabel ist ein Kommanozeilenprogramm. Programme mit graphischen Benutzeroberflächen finden sich auf dieser Seite.


Einführung

GPSBabel kann GPX-Dateien filtern. Das Programm kann Spuren, Routen und Wegpunkte modifizieren. Nicht alle Filter stehen für alle drei Datenarten zur Verfügung, bitte ggf. vorher capabilities page (englisch) prüfen, ob die benötige Funktion vorhanden ist.

Der Filterparameter wird zwischen Eingabe- und Ausgabedatei angegeben, und zwar in folgendem Format:

   -x <filter_name>,<filter_parameter1>,<filter_parameter2>...

Parsingfehler in JOSM

GPSBabel kann GPX-Dateien erzeugen, die JOSM nicht laden kann. Es erscheint folgende Fehlermeldung:

Im Fehlerfenster: ''Could not parse file''
Auf der Konsole: ''The prefix "gpxdata" for element "gpxdata:hr" is not bound''.

In diesem Fall kann man sich damit behelfen, alle Strings "gpxdata:" aus der GPS-Datei herauszufiltern. Auf einem UNIX-System geht das mittels folgendem Befehl:

sed 's/gpxdata://g' IN.gpx > OUT.gpx

Punkte innerhalb eines angegebenen Radius einschließen

Das folgende Filter arbeitet mit zwei GPX-Dateien als Eingabe und Ausgabe. Es gibt alle Wegpunkte der Dateien way_iii.gpx und way_rino.gpx, die sich in einem Radius von 5 Meilen um 40.75N, 119.25 W herum befinden, in eine Datei merge.gpx aus.

gpsbabel -i gpx -f way_iii.gpx -f way_rino.gpx \
     -x radius,distance=5M,lat=40.75,lon=-119.25 \
     -o gpx -F merge.gpx

Punkte innerhalb eines angegebenen Radius ausschließen (Datenschutz)

Wenn Du Spuren hochlädst, könntest (oder solltest) Du Dir Gedanken darüber machen, daß Anfangs- und Endpunkte Deiner Weges einfach und genau bestimmt werden können und die genauen Zeiten dazu. Das ist Dir möglichweise nicht recht, weil das Orte sind, an denen Du oder Deine Familie leben und arbeiten.

Die folgende Eingabe schließt alle Wegpunkte innerhalb eines Kreises von 1 km Radius um diese "privaten Orte" aus. Bitte passe Deine Koordinaten und den Radius an die von Dir gewünschten Werte an.

    gpsbabel -i gpx -f in.gpx \
       -x transform,wpt=trk,del \
       -x radius,distance=1K,lat=40,lon=10,nosort,exclude \
       -x transform,trk=wpt,del \
       -o gpx -F out.gpx

Man kann mehrere Kreise filtern, den Befehl "-x radius" also mehrfach angeben, z.B.:

  • wenn Du mehrere Brennpunkte hast (Zuhause, Arbeitsplatz, Freunde ...)
  • Glaubst Du, daß sie hinter Dir her sind? Wenn Du Deine Spuren mit genau einem Kreis filterst und mehrere Spuren hochlädtst, ist es ziemlich einfach, sich das abgeschnittene Stück Weg dazuzudenken und so Deinen Brennpunkt zu finden. Wer das fürchtet, kann ja mehrere Filterkreise mit wechselnden Mittelpunkten um den eigentlichen Brennpunkt herum anordnen.

Alle gespeicherten Spuren entfernen

Auf Garmin-Geräten kann man alte Spuren komprimiert speichern. Diese Spuren werden stets heruntergeladen, wenn sie nicht weggefiltert werden. Weil sie ohne Zeitstempel und komprimiert gespeichert sind, können sie in JOSM Ärger machen, wenn man Bilder georeferenzieren will. Das folgende Filter behält nur die Spuren, die im Titel das Wort ACTIVE aufweisen.

   -x track,name="ACTIVE *"

Doppelte und nahe Punkte löschen

Zum Löschen doppelter Punkte benutzt man folgendes Filter:

   -x duplicate,location

Zum Löschen von Punkten, die nicht weiter als 5 Meter vom vorherigen Punkt entfernt sind, verwendet man folgendes Filter:

   -x position,distance=5m

Bogenfilter

Man kann mit folgendem Filter eine Spur zu einer GPSBabel-Bogendatei konvertieren und dann Wegpunkte basierend auf ihrer Nähe zu diesem 'Bogen' oder zu dieser Route herausfiltern:

   '-x arc filter'.

Spuren vereinfachen

Man kann mit GPSBabel ganz einfach eine Spur auf eine vorgegebene Anzahl Wegpunkte vereinfachen. Je nach Spur beeinträchtigt das die Genauigkeit kaum. Auf meinen Fahrradtouren zeichnet mein GPS-Empfänger 2 Punkte/s auf. Ich konnte ohne große Auswirkungen eine Spur von 8000 Punkten auf 400 Punkte eindampfen, ja sogar auf 100.

 gpsbabel -i gpx -f way_iii.gpx  \
     -x simplify,count=400 \
     -o gpx -F merge.gpx

Eine andere Option ist das "Übersprech"-Filter. Es löscht Punkte aus der Spur, die nahe genug an einer Linie zwischen den beiden Nachbarpunkten liegen. Die Form der Gesamtspur beeinträchtigt das kaum. Vergleicht man die beiden Kompressionsverfahren, dann dampft das obige Filter eine Spur auf eine bestimmte Anzahl Punkte ein (und akzeptiert dabei eine gewisse Verschlechterung der Form der Spur), während das folgende Filter in jedem Fall die Form der Spur erhält, unabhängig von der Zahl der Wegpunkte. Punkte werden gelöscht, wenn sie weniger als 1 Meter (0,001 kilometer) außerhalb der Spur liegen.

gpsbabel -i gpx -f way_iv.gpx  \
     -x simplify,crosstrack,error=0.001k \
     -o gpx -F merge.gpx

Auch mit Potlatch kann man eine Spur vereinfachen. Das geht so: Spur auf OSM hochladen, dann "bearbeiten" clicken (und zwar bei der Spur, nicht oben auf der Seite), und dann auf Track clicken, wenn Potlatch anläuft.

Unsichere Punkte entfernen

-x discard,hdop=4

Zeitfilter

Nur Daten ausgeben, die nach 2008-07-23 20:00 aufgezeichnet sind:

gpsbabel -t -w -i garmin -f /dev/ttyUSB0 -x track,start=2008072320 -o gpx -F waypoint.gpx

Spuren zusammenführen

Man kann mit folgendem Befehl mehrere GPX-Dateien zu einer zusammenführen (Das führt die Spuren nicht echt zusammen, sondern erzeugt eine Datei, die mehrere Spuren enthält):

gpsbabel -t -i gpx -f track1.gpx -f track2.gpx -f track3.gpx -o gpx -F combined-tracks.gpx

Statt jede einzelne GPX-Datei einzeln aufzuführen, kann man auch ein Skript wie dieses verwenden.

#!/bin/bash
# append multiple gpx files easily
gpsbabel -i gpx $(echo $* | for GPX; do echo -n " -f $GPX "; done) \
-o gpx -F appended.gpx