Tre script in Python per trasformare i file GPX in HTML e PDF
Al giorno d'oggi, molte applicazioni possono esportare file GPX da un dispositivo dotato di GPS, come telefoni, smartwatch o adattatori di sicurezza. Quante volte vorresti analizzare e riutilizzare quei dati? Di seguito presento e descrivo tre semplici script in Python per renderli più masticabili come un documento HTML o PDF.
Quando ho acquistato un'auto nuova due anni fa, ho comprato anche un gadget GPS per stare più tranquillo e sperare di ottenere uno sconto sulla mia assicurazione auto. Ciò non è avvenuto perché non era assimilabile ad una scatola nera certificata. Ad ogni modo, è possibile contrallare tutti gli spostamenti da un'app Web con molte funzionalità. Come mostra lo screenshot qui sotto:
Si possono esportare i dati in un determinato intervallo di tempo, scegliendo quattro formati di file: XLS, KML, GPX e PDF. XLS e PDF producono una tabella come questa:
Come si può vedere, è solo un elenco di coordinate ordinate per tempo, complicato da leggere e capire. Mentre il GPX e KML sono due linguaggi di markup, non facili da capire! Il GPX
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?> <gpx xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns3="http://www.garmin.com/xmlschemas/TrackPointExtension/v1" xmlns:ns2="http://www.garmin.com/xmlschemas/GpxExtensions/v3" xmlns:ns1="http://www.cluetrust.com/XML/GPXDATA/1/0" creator="Zepp App" version="6.5.2-play"> <trk> <trkseg> <trkpt lat="45.08548" lon="11.909348"> <time>2022-01-23T10:08:59Z</time> <extensions> <ns3:TrackPointExtension> <ns3:speed>0.0</ns3:speed> </ns3:TrackPointExtension> </extensions> </trkpt> [...]
Avevo quindi bisogno di trovare un modo per rendere questi dati più comodi e facili da capire e visualizzare. In Python come al solito ho trovato una soluzione al mio problema con le seguenti librerie: gpxpy
Ho usato uno script esistente e ne ho scritto altri due in Python per effettuare una semplice analisi e visualizzazione partendo da dei file GPX. In particolare:
- gpx_file_viewer.py - da un file GPX genera un file HTML con la traccia su una mappa ed il riepilogo del percorso. Funziona anche con file GPX etichettati con percorsi (routes) e non tracce (tracks). Ma in tal caso, la data e l'ora coincidono con quella di esecuzione dello script;
- gpx_split.py (Copyright (C) 2015 Harvey Chapman <[email protected]>) - divide un file GPX in più file, se trova delle interruzioni temporali maggiori di 10 minuti e archivia il tutto in una cartella con lo stesso nome del file GPX;
- gpx_folder_viewer.py - assegnando la cartella creata con il file del punto 2, crea un file HTML con tutte le tracce mappate e il riepilogo. Non considera traccie che hanno distanza minore di 500 metri. Questo file HMTL può essere stampato in formato A4.
Utilizzo
gpx_file_viewer.py filename.gpx --> output DATE_filename_HOUR.html gpx_split.py filename.gpx --> output filename/ (a folder with all the tracks) gpx_folder_viewer.py folder --> output folder.html
Il file HTML generato è simile a questo:
Download
Si può scaricare lo zip direttamente dal mio account su GitHub: rainnic/python-scripts/gpx_splitted2html/
Realizzazione del video
Da poco, ogni volta che pubblico dei video sul mio canale YouTube, ne descrivo anche il dietro le quinte per dare utili consigli e ricordarmi anche come ci sono riuscito. In questo caso:
- Blender (https://www.blender.org/) come video editor, sì lo so che è un software 3D, ma fa anche i video e volevo testarlo.
- Inkscape (https://inkscape.org/) per la copertina e i crediti finali.
- ffmpeg (https://ffmpeg.org/) per registrare il video del computer, ho usato questo comando:
ffmpeg -video_size 1920x1080 -framerate 30 -f x11grab \ -i :0.0+0,0 -f alsa -ac 2 -i default output.mp4 -i "logo.png" \ -filter_complex "pad=height=ih+10:color=black,overlay=(main_w-overlay_w):main_h-overlay_h"
- Uno script bash per creare i capitoli, il titolo animato e la voce femminile che si sente durante il video:
# To wait the press of the ALT GR key # Usage: waitKey waitKey() { xinput test-xi2 --root 3 | gawk '/RawKeyRelease/ {getline; getline; print $2; fflush()}' | while read -r key; do if [ $key -eq 108 ]; then break 20; else echo "key is $key"; fi; done;} # To pronounce a text # Usage: say "Text to read" say() { local IFS=+;/usr/bin/mplayer -ao alsa -really-quiet -noconsolecontrols "http://translate.google.com/translate_tts?ie=UTF-8&client=tw-ob&q=$*&tl=en-UK"; } # To print a text over the screen with a fade in and out effect # Usage: onScreen "Text to print" onScreen() { echo "$1" | aosd_cat -n "Arial Black 100" -R "#00f" -B None -S black -t 2 -f 2000 -u 6000 -o 2000 -p 3 -l 3 -s 192 -r 255; } # To print a blue text over a black screen # Usage: fullScreen "Text" fullScreen() { timeout 10 sm -f "#00f" -b "#000" -a 0 $1; } # To show an image on the screen # Usage: image filename.jpg & image() { timeout 14 eog -f $1; }