Salta al contenuto principale
Working from scratch, following simplicity

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:

I dati GPS dell'ultimo mese

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:

I dati esportati in XLS o PDF dal programma

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 GPXGPX, o GPS Exchange Format, è un XML progettato come formato di dati GPS comune per applicazioni software. Può essere utilizzato per descrivere i waypoint, le tracce e le rotte. Il formato è aperto e può essere utilizzato senza dover pagare canoni. I suoi tag memorizzano posizione, altitudine e ora e possono in questo modo essere utilizzati per scambiare dati tra dispositivi GPS e pacchetti software. Tali programmi per computer consentono agli utenti, ad esempio, di visualizzare le proprie tracce, proiettare le proprie tracce su immagini satellitari o altre mappe, annotare mappe e taggare fotografie con la geolocalizzazione nei metadati Exif. per esempio è un pezzo di codice come questo:

<?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>
[...]
Tre script in Python per trasformare i file GPX in HTML e PDF

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: gpxpygpxpy -- GPX file parser - Questa è una semplice libreria Python per l'analisi e la manipolazione di file GPX. GPX è un formato basato su XML per le tracce GPS. Fonte: https://pypi.org/project/gpxpy/, foliumFolium semplifica la visualizzazione dei dati che sono stati manipolati in Python su una mappa interattiva. Consente sia l'associazione di dati a una mappa per le visualizzazioni coropletiche, sia il passaggio a visualizzazioni vettoriali/raster/HTML con l'inserimento anche di indicatori sulla mappa. Fonte: http://python-visualization.github.io/folium/ and pytzpytz porta il database Olson tz in Python. Questa libreria consente calcoli accurati e multipiattaforma del fuso orario utilizzando Python 2.4 o versioni successive. Fonte: https://pypi.org/project/pytz/. Nel seguente video illustro come funziona il tutto:

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:

  1. 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;
  2. 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;
  3. 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:

Un file HTML di esempio

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; }
Sponsored Links
Pubblicità

Nicola Rainiero

Ingegnere civile specializzato in geotecnica con l'ambizione di facilitare la propria attività lavorativa usando e creando software libero per un sapere condiviso e collettivo. Mi occupo anche di energie rinnovabili ed in particolare di geotermia a bassa entalpia. Sono da sempre appassionato di web design e modellazione 3D.