GPS-(NMEA-)Tracks mit Gnuplot zu Animationen verarbeiten

vorhergehende Artikel in: Geo Linux
02.11.2021

Durch einen Post auf Mastodon wurde ich auf eine Idee gebracht...

Der Post beschrieb die Idee, Live-Video mit einer Darstellung des gefahrenen Höhenprofils und/oder der Darstellung der gefahrenen Geschwindigkeit zu überlagern.

Ich hatte so etwas vor vielen Jahren einmal mit Java realisiert: Wir hatten damals die Live-Aufnahmen der Dashcam mit GPS-Daten verheiratet: unten links war im Kamerabild eine Miniaturkarte von OpenStreetMap eingeblendet, die immer auf den aktuellen Standort zentriert war, der mittels GPS-Empfänger ausgelesen wurde.

Dieses Mal wollte ich aber kein Java-Programm schreiben, sondern legte mir andere Werkzeuge auf der Werkbank zurecht: AWK und Gnuplot.

Mit AWK konvertierte ich einen rohen Mitschnitt von NMEA-Daten aus dem GPS-Receiver (ich nutzte hier die GPRMC-Pakete, das lässt sich natürlich auf alle anderen NMEAS-Botschaften anpassen) zunächst in ein etwas Gnuplot-freundlicheres Format - vor allem, was die Zeit anging:

gawk -F "," '$1=="$GPRMC" && $3 != "V" {print substr($10,1,2)"/"substr($10,3,2)"/"substr($10,5,2)"-"substr($2,1,2)":"substr($2,3,2)":"substr($2,5,2)"\t"$10"\t"$2"\t"$8}' input_nmea.TXT>gpl.dat

Danach konnte ich daran gehen, das Gnuplot-Skript zu entwerfen - die Grundidee war, dass ich die Gesamtdaten des Tracks darstellen wollte und darüber überlagert die Daten bis zu einem gewissen Zeitpunkt - dieses Bild hier zeigt einen frühen Entwurf dessen, was ich damit zum Ausdruck bringen wollte:

Screenshot Früher Entwurf

Kurz danach fiel mir noch eine weitere Möglichkeit der Visualisierung ein - Man könnte doch auch die Gesamtdaten mit einem Marker genau zu einem gewissen Zeitpunkt überlagern - dieses Bild aus einer späteren Phase des Entwurfs zeigt diese Variante:

Screenshot Früher Entwurf

Variiert man den Zeitpunkt zwischen Beginn und Ende des Tracks und speichert die jeweils gerenderten Abbildungen, kann man darauf eine Animation erstellen. Dazu kam das folgende Gnuplot-Skript zum Einsatz:

stats "gpl.dat" using 4 name "A"

set xdata time set timefmt "%d/%m/%Y-%H:%M:%S" plot 'gpl.dat' using 1:4 min_y = GPVAL_DATA_Y_MIN max_y = GPVAL_DATA_Y_MAX min_x = GPVAL_DATA_X_MIN max_x = GPVAL_DATA_X_MAX

set format x '%H:%M'

set xrange[min_x:max_x] set yrange[min_y:max_y]

do for [ii=0:A_records] { set terminal pngcairo transparent size 800,600 set size 1,0.5 filename = sprintf("tmp/gnuplotanim/%05d.png", ii) set output filename #Visualisierung Variante 1 #plot 'gpl.dat' using 1:4 w lines title "",'gpl.dat' u ($0<= ii ? timecolumn(1) : 1/0):4 w lines lw 3 title "" #Visualisierung Variante 2 plot 'gpl.dat' using 1:4 w lines title "",'gpl.dat' u ($0 == ii ? timecolumn(1) : 1/0):4 w p pt 7 ps 2 title "" }

Dabei wurde die Höhe des Diagramms noch ein wenig angepasst, um dem Hintergrund (zum Beispiel Live-Kamerabild) mehr Geltung verschaffen zu können. Die endgültige Größe und Position des Diagramms kann ebenso wie die Größe des erzeugten Bildes und das Styling des Diagramms in weiten Grenzen angepasst werden - mir ging es lediglich um die Mechanik des Ganzen.

Zum Schluss kann man - zum Beispiel mittels ffmpeg - die Einzelbilder zu einer Animation zusammenfassen, indem man ein Kommando wie dieses hier ausführt:

ffmpeg -r:v 1 -start_number 50704 -i "tmp/gnuplotanim/%05d.png" -codec:v libx264 movie.mp4

Dieses Kommando erzeugt eine Animation in Echtzeit: sie dauert exakt so lange, wie die Aufzeichnung des Tracks gedauert hat und eignet sich daher sehr gut als Overlay des Live-Kamerabilds. Das wird dadurch erreicht, dass mittels -r 1 eine Framerate von einem Bild pro Sekunde vorgegeben wurde - der Originaltrack wurde mit einem Datenpunkt jede Sekunde aufgezeichnet.

Hier ist das Resultat, das FFMpeg für den Beispieltrack nach Behandlung mit AWK und Gnuplot wie beschrieben ausspuckt (funktioniert wahrscheinlich nicht in Firefox...):

Artikel, die hierher verlinken

Gnuplot Snippets Projekt

28.04.2022

Nachdem ich hin und wieder über verschiede Aspekte von Gnuplot berichtet habe, habe ich mich entschieden, diese über die Jahre gewonnenen Erkenntnisse zu systematisieren und endlich mal davon wegzukommen, immer das letzte Gnuplot Skript zu kopieren und anzupassen.

Alle Artikel rss Wochenübersicht Monatsübersicht Codeberg Repositories Mastodon Über mich home xmpp


Vor 5 Jahren hier im Blog

  • xBrowserSync in Docker

    29.03.2021

    Nachdem ich schon längere Zeit nicht mehr über neue Dienste in meinem Docker-Zoo berichtet habe, habe ich in der vergangenen Woche wieder einmal einen Neuzugang begrüßen dürfen...

    Weiterlesen

Neueste Artikel

  • Asymmetrische Kryptographie

    Ich habe mich mit der Idee schon länger getragen: Nochmal einen Rundumschlag zu asymmetrischer Kryptographie zu machen. Dabei werde ich mich auf Demonstrationen der einzelnen Konzepte und Operationen mit Beispielcode konzentrieren und zu jedem der vorgestellten Konzepte mehr oder weniger ausführlich bezüglich der Einsatzszenarien und Vor- und Nachteile Stellung beziehen

    Weiterlesen
  • Windows? Nur noch gegen Bezahlung!

    Ich habe mich nun völlig von Windows - der armseligen Ausrede für ein Computerbetriebssystem aus Redmond - abgenabelt

    Weiterlesen
  • Vergleich Analoger und Digitaler Identitäten

    Eine Präsentation zum besseren Verständnis der Konzepte hinter digitalen Identitäten

    Aktualisierung vom 16. März 2025

    Aktualisierung der Präsentation mit einem Beispiel aus einem Film der 1980er Jahre und Betonung des Fakts, dass das Subjekt überhaupt nicht bemerken muss, dass eine Identität erstellt wird...

    Aktualisierung vom 17. August 2025

    Ein weiteres Beispiel wurde hinzugefügt.

    Aktualisierung vom 30. März 2026

    Aktualisierung der Präsentation: Erläuterung der Möglichkeit, mehr als ein Zertifikat für dasselbe Schlüsselpaar auszustellen und Exkurs zu Transport Layer Security als Beispiel der Forderung des Vorweisens bestimmter Arten digitaler Identitäten.
    Weiterlesen

Manche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.

Wer daran teilhaben und eventuell sogar davon profitieren möchte, muss damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.

Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...

PS: Meine öffentlichen Codeberg-Repositories findet man hier.