Open Source im professionellen Einsatz
Linux-Magazin 03/2016
© Galina Peshkova, 123RF

© Galina Peshkova, 123RF

GPS-Daten optimieren und grafisch aufbereiten

Steighilfen

Handgeräte für die Navigation weisen den Weg und schreiben bei Wanderungen laufend die aktuelle Position mit. Mit einigen Skripten unter Linux bereitet Extrembergsteiger Michael Schilli die Daten seiner waghalsigen Erstbesteigungen optisch ansprechend auf.

721

Online PLUS

Im Screencast demonstriert Michael Schilli das Beispiel: http://www.linux-magazin.de/Ausgaben/2016/03/plus

Jedes Smartphone bietet einen GPS-Empfänger und Apps zuhauf, die den Wanderer auf eingeblendeten Landkarten über Berg und Tal leiten. Allerdings geht es in der Wildnis oft etwas rustikal zu, und da kommen robustere und spritzwasserfeste Geräte mit dicken Batterien zum Einsatz. Vor einiger Zeit hatte ich im Sonderangebot ein Garmin 62s gekauft, das mittlerweile etwas in die Jahre gekommen ist, aber aussieht, als könnte es einem darüberfahrenden Panzer standhalten.

Wer allerdings von seinem Smartphone intuitive On-Screen-Bedienung gewöhnt ist, reibt sich verwundert die Augen, dass es tatsächlich noch LCD-Displays mit bizarr gestalteten Menüs gibt, über die der User einen Cursor mit einem Dutzend Plastikknöpfen auf der Vorderseite des Geräts bugsieren muss (Abbildung 1).

Abbildung 1: Der GPS-Tracker Garmin 62s.

UI für Steam-Punks

Ich wurde aus diesen Gründen schon beim Eingeben eines einzigen Wegpunktes zur Markierung des Trail-Eingangs fast wahnsinnig. So hätte wohl die Zukunft des mobilen Telefonierens ausgesehen, wenn Bill Gates mit seiner aggressiven Monopolpolitik gewonnen hätte, gar nicht auszudenken! Wäre ich Produktdesigner bei Garmin, brächte ich sofort eine an den neuen Mad-Max-Film "Fury Road" angelehnte Produktlinie im Steam-Punk-Look heraus.

Auch die Software zum Auslesen und Beschreiben des Geräts läuft nur auf Windows, die Version für den Mac erkannte das eingestöpselte Gerät gar nicht. Aber da mein Ubuntu-System sofort darauf ansprang, als ich den USB-Stecker einschob (Syslog in Abbildung 2) und die Datenbereiche des Geräts auf zwei gemounteten Platten offenlegte, beruhigte ich mich sofort wieder und beschloss, das Gerät auf Wanderungen einfach eingeschaltet mitzuführen.

Abbildung 2: Nach dem Einstöpseln des USB-Steckers erkennt Ubuntu das Navigationsgerät und mountet dessen internen Speicher als Festplatte.

Auch ohne Zutun des Users schreibt es alle paar Sekunden einen Eintrag in eine so genannte Tracks-Datei, die festhält, zu welchem Zeitpunkt sich das Gerät an welcher Position befindet. Es notiert neben dem Zeitstempel die geografischen Längen- und Breitengrade sowie die aktuelle Höhe über dem Meeresspiegel.

Open Source statt Windows

Diese Werte legen Garmin-Geräte in einem XML-Dialekt namens GPX ab, der sich einfach mit Open-Source-Tools erforschen lässt. Abbildung 3 zeigt die auf dem Gerät liegenden Dateien. Die Tracks-Datei »Track_2015-12-31 130304.gpx« enthält die gesuchten, über die Zeit festgehaltenen Aufenthaltsorte.

Abbildung 3: GPX-Dateien auf dem Garmin 62s.

Das XML zu parsen ist nicht weiter schwierig und ein CPAN-Autor hat sich schon die Mühe gemacht, alles sauber in das Modul Geo::Gpx zu verschnüren, sodass Listing 1 nach dem Herunterladen des Moduls nur noch wenige Zeilen benötigt, um das Ganze ins Yaml-Format zu überführen, das sich sowohl einfach visuell inspizieren als auch maschinell weiterverarbeiten lässt.

Listing 1

gpx2yaml

01 #!/usr/local/bin/perl -w
02 use strict;
03 use Geo::Gpx;
04 use YAML qw( Dump );
05
06 my( $file ) = @ARGV;
07 die "usage: $0 file" if !defined $file;
08
09 open my $fh, "<$file" or die $!;
10 my $gpx = Geo::Gpx->new( input => $fh );
11
12 print Dump $gpx->tracks->[ 0 ]->
13    { segments }->[ 0 ]->{ points };

Die Ausgabe in Abbildung 4 zeigt zu jedem Zeitpunkt (»time« ) in Unix-Sekunden die geografische Länge (»lon« für Longitude), die Breite (»lat« für Latitude) und die Höhe über dem Meeresspiegel in Fuß (»ele« für Elevation) an. Falls es gewünscht ist, lässt sich das Gerät in den Settings auch auf metrische Maßeinheiten umstellen.

Abbildung 4: Listing 1 wandelt die GPX-Daten der Tracks-Datei in das weitaus augenfreundlichere Yaml-Format um.

Listing 1 nutzt hierzu die beiden Module Geo::Gpx und YAML vom CPAN. Letzteres exportiert auf Anfrage die Methode »Dump()« , die eine verschachtelte Datenstruktur als Yaml ausgibt, in diesem Fall den von Geo::Gpx gelieferten Array von Hashes unter »tracks« , »segments« und schließlich »points« im GPX-Salat.

Die hier nachfolgend vorgestellten Skripte in der Verarbeitungskette lesen die Yaml-Ausgabe per Unix-Pipe und der Funktion »Load()« des YAML-Moduls ein und arbeiten dann mit der vereinfachten Datenstruktur weiter. Ihre Ausgabe verpacken sie dann ebenfalls ins Yaml-Format, sodass sich beliebig viele solcher Skripte in guter alter Unix-Manier hintereinanderhängen lassen und jedes sich auf eine spezielle Aufgabe konzentrieren kann.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 6 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Hinterm Horizont

    Der naturverbundene Perl-Hacker erforscht die Bergwelt selbstverständlich mit einem Navigationssystem. Dass er anschließend seine erbrachte Wanderleistung grafisch auswertet, ist Ehrensache.

  • Gute Führung

    Mobile Navigationslösungen stecken inzwischen in vielen mobilen Rechnern und Handys. Mit freier Software und freien Kartendaten holen sich Nutzer und Entwickler deutlichen Mehrwert auf ihre Geräte - abseits vom Lizenz- und Gebührendschungel.

  • Fermilab, the Tevatron, and Linux
  • Bitparade

    Fast alle Hersteller von GPS-Geräten verwenden eigene Formate, um Routen, Tracks und Wegpunkte zu speichern. Zum Up- und Download oder Bearbeiten der Daten bieten die Firmen leider selten Linux-Software an. Vier GPS-Editoren bringen Linuxer auf die richtige Fährte.

  • Datenmaler

    Googles Chart-Service zeichnet optisch ansprechende Diagramme, ganz gleich, woher die Daten dafür stammen. Ein CPAN-Modul gibt die Zeichenanweisungen dafür in objektorientiertem Perl weiter, statt vom Programmierer URL-Fitzelei zu verlangen.

comments powered by Disqus

Ausgabe 08/2016

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.