Sonntag, 29. Januar 2017

Einen GPX-Track auf einer Landkarte darstellen

Routen und Wege erfassen Sie mit einem GPS-fähigen Gerät, bspw. ihrem Smartphone. Dafür muss bei diesem die Standorterfassung über GPS eingeschaltet werden, damit es die Verbindung zu den Navigationssateliten herstellen kann. Das erreichen Sie über die Einstellungen ihres Gerätes. I.d.R. ist für die Nutzung dieser Funktion keine Datenverbindung erforderlich.

Die Wegpunkte selbst erfassen Sie mit einem zusätzlichen Programm, bspw. GPS Logger für Android. Damit gelingt das automatisiert und in regelmäßigen Abständen.

GPS Logger im Einsatz
Zur Darstellung des GPX-Tracks stehen Ihnen verschiedene Werkzeuge zur Verfügung, bspw. gpsprune, QLandkarteGT und dessen nachfolger QMapShack. Alle Erlauben das direkte Einlesen des Tracks sowie die Nachbearbeitung, sofern erfasste Wegpunkte korrigiert werden müssen. Die nachfolgenden Abbildungen zeigen die Darstellung in gpsprune und QLandkarteGT. Alle Darstellungen verwenden das Kartenmaterial von OpenStreetMap.

Eine erfaßte Wegstrecke mit Höhenprofil und Details zu dem ausgewählten Wegpunkt, dargestellt mit gpsprune

Die gleiche Wegstrecke samt Wegpunkten und Höhenprofil, dargestellt mit QLandkarteGT

Duiker's Island - der westlichste Punkt des Weges


Samstag, 28. Januar 2017

Naturschauspiele am Kap

Manche Momente sind einfach nur beeindruckend anzusehen - hier die Fallwinde und die Wolken zum Sonnenuntergang südlich von Kapstadt.

Abendstimmung in Clifton

Hier liegt der Hafen von Hout Bay in der Abendstimmung.

Abendstimmung in Hout Bay

Dienstag, 17. Januar 2017

Hout Bay's Schätze

Der kleine Ort liegt etwa 20km südlich von Kapstadt an einer malerischen Bucht und hat etwa 20.000 Einwohner. Eingerahmt von den schroff wirkenden Höhenzügen des Tafelbergmassivs bieten sich faszinierende Kontraste zwischen dem blauen Wasser des Atlantiks, dem hellen Sandstrand und der mediterranen Vegetation - ganz ohne den Trubel der Mutterstadt Cape Town.

Zunächst etwas unscheinbar wirkend, glänzt es mit den lokalen Attraktionen wie dem jedes Wochenende stattfindenden Hout Bay Market sowie dem World of Birds. Letzteres ist ein mit privater Initiative eingerichteter und erhaltener Zoo, der sich vorrangig der Vogelwelt der südlichen Hemisphäre widmet. Mit über 400 verschiedenen Spezies gilt es als der größte Vogelpark Südafrikas. Die Anregung von Dirk Deimeke hat sich voll gelohnt - danke!

Gehege im World of Birds

Hout Bay ist weiterhin Ausgangspunkt des Chapman’s Peak Drive, einer etwa 9km langen, mautpflichtigen Strecke am Meer entlang in Richtung des Kap der Guten Hoffnung. Diese Strecke ist sowohl für den Fahrer, als auch für den Beifahrer ein echter Genuß.

Blick von Hout Bay auf den Chapman's Peak Drive

Der Empfehlung der Mother City Hikers und dem Cape Town Magazine folgend, ergeben sich attraktive Blickwinkel von den Höhenzügen rund um den Ort. Neben leichteren Routen wie bspw. zur Sandy Bay mit mehreren Schiffswracks erlauben der Constantiaberg (928m) und der Skorsteenberg (504m) imposante Aufstiege im Table Mountain National Park.

Abendstimmung auf dem Plateau rund um den Skorsteenberg mit Blick zum Tafelberg

Mittwoch, 11. Januar 2017

Auswertung mit NumPy, Pandas und Matplotlib

Die drei Python-Bibliotheken NumPy, Pandas und Matplotlib erlauben eine Datenauswertung mit graphischer Darstellung. Die Ausgabe der Wegstrecken für 2016 ergibt nachfolgende Grafik. Jeder enthaltene Staffelbalken repräsentiert dabei einen Monat.

Darstellung als Staffelbalken mit Legende

Die Legende in obiger Abbildung wird automatisch erzeugt, ist hier aber noch nicht optimal. Gleiches gilt für die verwendeten Farben in der Darstellung. Ideal wäre, wenn jede Wegstrecke eine eigene, unverwechselbare Farbe hätte.

Zur Erzeugung der Grafik kommt zunächst dieser Aufruf zum Einsatz:

df = pd.DataFrame(distances, index=month,columns=pd.Index(travelDescription))
df.plot(kind='barh', stacked=True)

df ist ein DataFrame aus der Pandas-Bibliothek. Dieser wird gefüttert mit den Distanzen, den Zeitintervallen und den Beschreibungen der jeweiligen Wegstrecke. plot() berechnet daraus die horizontalen Balken, der Parameter stacked=True sorgt für die Staffelung.

Die Methode plot() kennt einen weiteren Parameter namens colormap, mit der Sie die Farbauswahl steuern. Zur Auswahl stehen über ein dutzend Farbsets, bspw. Blues, Pastel1, Pastel2, spectral oder auch autumn. Je nach Farbset ist es ein Übergang zwischen zwei einzelnen Farben oder ein mehrstufiges Spektrum. Eine genaue Übersicht liefert Ihnen dazu das SciPy Cookbook. Die nachfolgende Abbildung benutzt das Farbset Set1 und macht die Darstellung schon aussagekräftiger. Folgender Aufruf wird dazu genutzt:

df.plot(kind='barh', stacked=True, colormap='Set1')


Darstellung als Staffelbalken mit Farbset Set1 und Legende

Dienstag, 10. Januar 2017

Aufbruch nach Süden

Strahlend blauer Himmel mit Sonnenschein macht die kalte Januarluft Berlins etwas erträglicher. Bald ist es soweit und ich habe erneut afrikanischen Boden unter den Füßen. Anspannung, Vorfreude und Herzklopfen. Es dauert nicht mehr allzu lange - hoffe ich.

Blick auf das Rollfeld in Berlin-Tegel

Sonntag, 1. Januar 2017

Mit Linux-Bordmitteln Fahrstrecken ausrechnen

Unterwegs zwischen Neuenburg und Genf
Wer viel zwischen unterschiedlichen Orten unterwegs ist, kennt das Bedürfnis: irgendwann will man wissen, wieviele Kilometer man tatsächlich zurückgelegt hat. Erfassen Sie das nicht automatisiert mit ihrem Smartphone -- bspw. mit Route Tracker --, helfen für das Ergebnis etwas Handarbeit und wenige Zeilen Programmcode.

Grundlage für die Berechnung ist eine Textdatei mit den fünf Spalten Anzahl, Von, Nach, Distanz und Grund. Erstere gibt an, wie häufig diese Strecke genutzt wurde, Von und Nach den Start- und Endpunkt der Reise, Distanz die Entfernung zwischen Start- und Endpunkt sowie Grund den Anlass der Reise. Alle Spalten sind mit Tabulatoren voneinander getrennt, damit die Spalten bei der Ausgabe auf dem Terminal oder im Texteditor auch hübsch untereinander angeordnet werden. Leerzeichen kommen nicht als Spaltentrenner in Frage, da Ortsangaben noch Erweiterungen wie Flußnamen oder Regionen haben können.

Ausschnitt aus den erfaßten Strecken für 2016 im Texteditor Vim
Für die Lösungsvariante tritt awk in den Ring und punktet mit einem Dreizeiler.

awk-Variante zur Berechnung der Gesamtkilometerzahl
In Zeile 1 wird der Inhalt der internen awk-Variable FS redefiniert. FS kürzt field separator ab und beinhaltet die Trennzeichen, die awk benutzt, um die einzelnen Spalten zu erkennen. Hier wird FS auf mehrfach aufeinanderfolgende Tabulatoren gesetzt.

In Zeile 2 werden der Inhalt der beiden Spalten 1 und 4 miteinander multipliziert und zur Variable gesamt addiert. awk merkt sich für jede gelesene Zeile den Spalteninhalt in den Variablen $1 bis $5. Die Spaltentrennung erfolgt anhand von FS wie zuvor in Zeile 1 festgelegt.

Nützlich sind hier mehrere Automatismen von awk:
  • die Variable gesamt wird automatisch angelegt und mit 0 initialisiert, sofern diese noch nicht existiert. 
  • Enthalten die Variablen $1 bis $5 keine Zahlenwerte, erfolgt keine Berechnung. Damit wird die erste Zeile elegant verabeitet und muss nicht zuvor von Hand entfernt werden.
  • Alles zwischen den beiden Schlüsselworten BEGIN und END wendet awk auf jede gelesene Zeile an. Eine explizite for-Schleife entfällt.
Abschließend erfolgt in Zeile 3 die Ausgabe der aufsummierten Gesamtkilometer mit Hilfe der awk-Funktion printf.

Für das Kalenderjahr 2016 sieht das Ergebnis wie folgt aus, wobei das awk-Skript aus der Datei distanz.awk kommt und das Fahrtenbuch in der Datei fahrtenbuch-2016.txt enthalten ist:

$ awk -f distanz.awk fahrtenbuch-2016.txt
Gesamt: 100245 km

$

Das sind zweieinhalbmal um die Erde. Welche Orte es 2016 waren, entnehmen Sie dieser Liste.

Weitere Lösungsvarianten für die Shell sowie mittels Python, Perl, Tcl und SQL inklusive einer ausführlichen Beschreibung entnehmen Sie meinem Artikel Sieben Brücken. Alltagsaufgaben mit Bordmitteln lösen aus LinuxUser 05/2016. Die Skripte finden Sie auch in meinem Repository auf GitHub.