© The Vorck Project
GPS-Daten mit Perl auswerten und online in Karten
einblenden
Hinterm Horizont
von Michael Schilli
Erschienen im Linux-Magazin
2006/07
Der naturverbundene Perl-Hacker erforscht die Bergwelt selbstverständlich mit einem Navigationssystem. Dass er anschließend seine erbrachte Wanderleistung grafisch auswertet, ist Ehrensache.
Mit einem tragbaren Navigationssystem wandern macht gleich viel mehr Spaß. Der GPS-Empfänger teilt dem Wanderer nicht nur ständig die aktuelle Position mit, sondern auch seine Höhe über dem Meeresspiegel oder seine Entfernung zu einprogrammierten Objekten. Auch von der Wandergeschwindigkeit, der bisher zurückgelegten Wegstrecke und der wahrscheinlich noch benötigten Zeit bis zum Ziel weiß das System stets zu berichten. Nach abgeschlossener Wanderung lässt sich das Gerät an den heimischen PC anschließen, um die unterwegs gesammelten GPS-Daten herunterzuladen und auszuwerten.
Der GPS-Empfänger Etrex von Garmin [7] ist nur ein Einsteigermodell, eignet sich aber hervorragend für den sporadischen Wanderer. Er ist ab etwa 120 Euro zu haben, handlich, wasserfest und so robust, dass er auch leichte Stürze überlebt (Abbildung 1). Um den Empfänger nach der Wanderung an den heimischen PC anzuschließen, ist ein Spezialkabel erforderlich, das den Etrex mit der seriellen Schnittstelle des Rechners verbindet. Das Original ist überteuert (ab 25 Euro), weswegen es unter [3] ein Selbstbau-Projekt gibt. Mein Lötkolben blieb dieses Mal kalt, ich habe das Teil einfach gekauft (Abbildung 2),
01 #!/usr/bin/perl -w
02 use strict;
03 use Sysadm::Install qw(:all);
05 use XML::Twig;
06 use Date::Parse;
07 use YAML qw(DumpFile);
08
09 my $twig= XML::Twig->new(
10 TwigHandlers => {
11 "trkpt" => &handler,
12 }
13 );
14 my @points = ();
15 $twig->parsefile("tracks.xml");
16 DumpFile("tracks.yml", @points);
17
18 ###########################################
19 sub handler {
20 ###########################################
21 my($t, $trkpt)= @_;
22 my $lat = $trkpt->att('lat');
23 my $lon = $trkpt->att('lon');
24 my $ele = $trkpt->first_child(
25 'ele')->text();
26 my $isotime = $trkpt->first_child(
27 'time')->text();
28 my $time = str2time($isotime);
29 push @points, {
30 lat => $lat, lon => $lon,
31 ele => $ele, time => $time,
32 isotime => $isotime,
33 };
34 }
|

|
Abbildung 1: Der mobile GPS-Empfänger Etrex von Garmin, ein preiswertes Gerät der Einsteigerklasse.
|

|
Abbildung 2: Ein Spezialkabel verbindet den Etrex mit der seriellen Schnittstelle des Rechners.
|
Babylonische Verwirrung
GPS-Empfänger arbeiten leider mit unterschiedlichen Koordinaten-Formaten. Diese Sprachverwirrung babylonischen Ausmaßes bekämpft das Freeware-Programm »gpsbabel« [4]. Es beherrscht nicht nur Dutzende Datenformate, sondern liest unter Linux auch die Daten von einem am seriellen Port hängenden Garmin Etrex aus. Im Speicher des GPS-Empfängers liegen gesammelte Waypoints (auf Knopfdruck festgehaltene Ortspunkte), Routes (Wegpunkte geplanter Routen) und Tracks (Spuren, automatisch alle paar Sekunden aufgezeichnete Ortspunkte).
Wer vor dem Start seinen Trackspeicher löscht und am Ziel auf den Rechner herunterlädt, erhält eine digitale Aufzeichnung der Wanderstrecke. Nun kann er die Positionsdaten kreativ auswerten. Hängt der Garmin etwa an der zweiten seriellen Schnittstelle, lädt »gpsbabel -t -i garmin -f /dev/ttyS1 -o gpx -F tracks.txt« die Trackdaten (»-t«) im Garmin-Format (»-i garmin«) von der Schnittstelle »/dev/ttyS1« und speichert sie im GPX-Format (»-o gpx«) in »tracks.txt« (»-F tracks.txt«).
Damit der Prozess, der den Garmin ansteuert, nicht mit Root-Rechten laufen muss, macht der folgende Befehl den Device-Eintrag für die serielle Schnittstelle einfach für alle beschreibbar:
> chmod a+rw /dev/ttyS1
> ls -l /dev/ttyS1
crw-rw-rw- 1 root uucp 4, 65 Feb 10 22:47 /dev/ttyS1
Nach geraumer Weile (serielle Schnittstellen stammen aus dem vergangenen Jahrhundert) kehrt das »gpsbabel«-Kommando zurück und in »tracks.txt« liegen die Daten im XML-Format (Abbildung 3). Damit die folgenden Auswertungen diese XML-Daten nicht parsen müssen, transformiert sie das Skript »tracks2yml« in das augenfreundliche YAML-Format, das sich zudem in einem Rutsch in eine Perl-Datenstruktur verwandeln lässt. Abbildung 4 zeigt die YAML-Daten.

|
Abbildung 3: Dieses nicht leicht lesbare Format haben die frisch vom Garmin heruntergeladenen GPX-Streckendaten vor der Konvertierung.
|

|
Abbildung 4: Die gleichen Track-Daten wie in Abbildung 3 jetzt im YAML-Format nach der Umwandlung durch »track2yml«.
|
Koordinaten-Objekt
Das Skript »tracks2yml« in Listing 1 nutzt das Modul »XML::Twig«, das - wie in [5] schon gezeigt - einen Handler definiert, den der Twig-Tänzer bei jedem Trkpt-Tag anspringt. Das dem Handler übergebene Objekt vom Typ »XML::Twig::Elt« repräsentiert das gefundene Trkpt-Tag mit allen Unter-Tags.
Das Attribut »lat« (Latitude, Breite) gibt die geographische Breite des Wegpunkts in Dezimalschreibweise an. Nördliche Breitengrade sind positiv, südliche negativ. Das Attribut »lon« (Longitude, Länge) benennt die geographische Länge, wobei westliche Längengrade negativ, östliche hingegen positiv sind. Das Unterelement »ele« (Elevation, Höhe) legt die Höhe des Trackpunkts über dem Meeresspiegel in Metern fest. Im Tag »time« liegt die UTC-Uhrzeit (GMT-Zeitzone) in ISO-8601-Schreibweise.
Die Funktion »str2time()« aus dem Modul Date::Parse vom CPAN macht daraus die Zeitzonen-unabhängige Unix-Zeit in Sekunden für spätere Berechnungen. »handler()« ab Zeile 19 packt alle gefundenen Daten in einen Hash und speichert eine Referenz darauf als Element im globalen Array »@points« ab. Die abschließend aufgerufene Methode »DumpFile()« des Moduls »YAML« speichert den gesamten Array mit den darin enthaltenen Hashreferenzen gut lesbar in der Datei »tracks.yml«. Von dort wird der Array in den folgenden Skripten wieder mit einem einfachen »LoadFile()« eingelesen.
| Whitepaper |
|
The Role of Open Source in Data Integration
Obwohl in den letzten Jahren viele technische Fortschritte erzielt werden konnten, verfügen die meisten Datenintegrationsprozesse nach wie vor nur über eine sehr begrenzte Automatisierung. Das vorliegende White Paper von dem Industry Analyst Mark Madson wird zunächst ein grundlegendes Verständnis von Daten Integration vermitteln, die Vorzüge von Open Source Lösungen für Daten Integration erläutern und Ihnen professionelle Empfehlungen geben, damit Sie Ihre Integrationsjobs noch einfacher und produktiver gestalten können.
Download PDF (Registrierung erforderlich)
|
|
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele (Folge 2)
Der zweite Teil des Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele White Papers beleuchtet anhand weiterer ausgewählter Case Studies die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.
Download PDF (Registrierung erforderlich)
|
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links"
nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedrucken Fassung entsprechen.
|