Classificazione automatica di tracciati

Dino

Tool per la classificazione automatica di tracciati GPX

di Claudio Tortorelli

Arezzo

Pubblicato il 07/03/2020 - Ultima revisione il 08/12/2020 - Revisione n. 20

Torna a www.claudiotortorelli.it -- Revisione precedente



Abstract

Tool per la classificazione dei GPX realizzato per il CAI di Arezzo e il Soccorso Alpino

Indice

Lavoro sul campo
Un nuovo progetto
Verso il web
Dino
Finalmente online
Esempi di mappe
Bibliografia


a Donato 'Dino' Ginepri, tracciatore di sentieri e amico


Lavoro sul campo

[indice]

La sezione di Arezzo del Club Alpino Italiano è storicamente impegnata nella manutenzione e la valorizzazione del patrimonio di sentieri presenti in provincia. I volontari e i soci aretini percorrono, puliscono e tracciano oltre 1600km di sentieri[1], mantenendo in efficienza vie secolari, altrimenti destinate a sparire rapidamente sia dal territorio che dalla memoria.

Un nuovo progetto

[indice]

Dal 2017 è stato avviato nuovo un progetto interno di digitalizzazione dei sentieri. Le squadre di manutenzione hanno cominciato a portare un GPS Garmin per acquisire il tracciato GPX del sentiero, a volte contestualmente all'attività di segnatura. Parallelamente è stata implementata una procedura interna di condivisione e backup delle tracce acquisite e un semplice database per annotare i dettagli delle attività.

Verso il web

[indice]

Dopo quasi due anni i volontari hanno acquisito oltre 170 tracce GPX di alta qualità, corrispondenti ad altrettanti sentieri aggiornati. Il gruppo sentieristica ha quindi proposto di realizzare un nuovo sito, parallelo ma collegato a caiarezzo.it, che da una parte renda merito per l'attività svolta (passata e futura) e dall'altra sia uno strumento fruibile e affidabile per chi pianifica un'escursione sulle nostre montagne.

Si è scelto di cominciare da un sito "base", contenente le pagine dei sentieri generate modo massivo dalle informazioni già raccolte nel database temporaneo. Si prospetta poi un paziente lavoro di revisione, integrazione e cura manuale dei contenuti pubblicati. Ma è possibile estrapolare altre informazioni in modo automatico dai dati già acquisiti (ad esempio attribuire ad un sentiero le vallate che attraversa)?

Per rispondere a questa esigenza ho messo a punto il tool Dino.

Dino

[indice]

In concreto si tratta di catalogare i tracciati GPX secondo la vallata e/o il gruppo montuoso di appartenenza. Generalizzando, la questione consiste nel classificare dei punti verificandone l'inclusione in alcune aree (ogni GPX può essere considerato una sequenza di punti topografici). A complicare leggermente le cose c'è il fatto che un sentiero può essere a cavallo di più aree di competenza (si pensi al sentiero 50, che attraversa sul crinale tutta la provincia).

Il cuore del problema può essere quindi ricondotto ad uno degli algoritmi classici dell'informatica: il Ray Cast, che consente di determinare l'inclusione o meno di un punto in un poligono a prescindere dalla forma (concava o convessa)[2].

Nel mio caso ho integrato il Ray Cast già sviluppato in C# da un altro programmatore. La risposta alla domanda "il sentiero appartiene all'area?" è quindi ottenuta contando il numero di punti del GPX che cadono all'interno dell'area e verificando che tale numero sia superiore ad una certa percentuale.

Obiettivo primario è quello di ottenere le informazioni in un formato compatibile con il plugin WordPress di creazione automatica delle pagine web dei sentieri (un normale file CSV, [3]).

Ho quindi recuperato alcune utility sparse che avevo precedentemente sviluppato per gestire il database interno (sotto forma di foglio Excel) e le ho integrate in un unico tool, che ho chiamato Dino. Non ho previsto alcuna interfaccia grafica, ma ho sviluppato una più rapida e flessibile interfaccia da riga di comando, che si attende in input il path di un file di testo completo di alcune opzioni.

Dopo aver letto le opzioni Dino procede col seguente flusso operativo eseguendo

  1. il caricamento (parsing) dei GPX contenuti nella cartella di input;
  2. il caricamento delle aree rappresentate dai file KML (poste in un'altra cartella di input);
  3. la decimazione (se richiesta) dei GPX in base al rapporto impostato, salvando in un'apposita sottocartella i risultati;
  4. la classificazione comparando i tracciati e le aree e salvando il risultato finale in formato CSV;
  5. la generazione, se richiesta, delle mappe web consultabili online (dopo averle trasferite sul server).

Il tutto viene documentato nella console.

Per le aree entro le quali classificare i sentieri ho considerato la soluzione più semplice: disegnarle su Google Earth ed esportarle nel formato standard KML [4]. Le aree sono state disegnate in base al mio "buon senso", solo per dimostrare che il metodo era applicabile. Sarebbe sicuramente meglio ottenere delle aree "ufficiali" di vallate e gruppi montuosi (cosa che potrà essere in seguito eseguita dal gruppo CAI o dal Soccorso Alpino).

Vallate

Gruppi montuosi

E' da notare come sia possibile utilizzare Dino anche con aree geografiche rappresentanti unità amministrative, aree forestali o geologiche, o qualunque altra tipologia coerente venga in mente.

Il file CSV che ho ottenuto è stato infine combinato con quello che già disponevamo, estratto dal database ad uso interno e dato in pasto al plugin WordPress che ha generato automaticamente le 174 pagine dei sentieri tracciati, classificati anche per vallata e per gruppo montuoso, rendendo di fatto più intuitiva la sua ricerca e collocazione all'utente finale. Tutte le informazioni incluse in ogni pagina saranno adesso sottoposte al vaglio e alla revisione del gruppo CAI.

Ho voluto completare l'output del software facendo creare opzionalmente anche delle mappe consultabili dal web: ad ogni area corrisponde una mappa dinamica con sopra rappresentati i sentieri che sono vi sono stati abbinati (di seguito gli esempi ottenuti).

Finalmente online

[indice]

Il risultato del lavoro descritto è open source e si trova scaricabile sulla piattaforma GitHub a questo url:

https://github.com/claudio-tortorelli/Dino

dove sono presenti anche altre informazioni per l'utilizzo.

Nella versione attuale (1.1.1) Dino implementa le seguenti funzioni:

Esempi di mappe

[indice]

Esempio con gpx di test: casentino


Bibliografia

[1] Presentazione del gruppo sentieri CAI Arezzo, https://www.caiarezzo.it/attivita-sede/sentieristica
[2] Algorithms in C, Robert Sedgewick, Princeton University, Addison-Wesley. Chapter 24
[3] Comma Separated Values, https://it.wikipedia.org/wiki/Comma-separated_values
[4] formato KML, https://it.wikipedia.org/wiki/Keyhole_Markup_Language


[indice]