# Percorsi Escursionistici

{% hint style="warning" %}
**Attenzione**: L'app **WeMap** è attualmente in versione **beta** e il sito è ancora in fase di costruzione. Durante questo periodo, alcune funzionalità potrebbero subire modifiche. Ci scusiamo per eventuali inconvenienti e apprezziamo il vostro **supporto** mentre lavoriamo per migliorare l'esperienza per tutti gli utenti. Vi invitiamo a segnalare eventuali problemi o a fornire feedback per aiutarci a perfezionare il servizio. Grazie per la collaborazione!
{% endhint %}

## Recupero dei dati

Utilizziamo <mark style="color:orange;">**Overpass API**</mark>, un servizio API che consente di **interrogare** e **recuperare dati** dettagliati da <mark style="color:purple;">**OpenStreetMap**</mark>.

Attraverso una **query** precisa, otteniamo informazioni specifiche sui **sentieri escursionistici ufficiali**, come le coordinate geografiche dei punti di inizio e fine delle linee che compongono il grafo dei sentieri.

***

## Selezione dei sentieri ufficiali

Riuscire a **selezionare** in modo **automatico** e accurato solo i **sentieri ufficiali** è un punto cruciale per le funzionalità di <mark style="color:green;">**WeMap**</mark>.

Tramite il nostro [**sistema di recupero dei dati**](#recupero-dei-dati) siamo in grado di **delineare** con precisione i **sentieri ufficiali** e identificare quelli segnati e **approvati dalle autorità locali** o dalle **associazioni escursionistiche**. Questo ci consente di garantire che le richieste di manutenzione possano essere effettuate solo su tratti di sentiero di <mark style="color:orange;">**dominio comunale**</mark> e <mark style="color:orange;">**ufficialmente riconosciuti**</mark>, evitando di permettere manutenzioni su sentieri o strade private.

***

## Delimitazione dei confini comunali

Il nostro [**sistema di recupero dei dati**](#recupero-dei-dati) è studiato anche per **delineare** in modo preciso i <mark style="color:orange;">**confini comunali**</mark>. Questo è particolarmente importante per i **comuni** che hanno deciso di **adottare WeMap**, poiché evita che vengano effettuate **richieste di manutenzione** su tratti di sentiero gestiti da comuni limitrofi.

***

## Visualizzazione dei sentieri sulla mappa

Il grafo dei sentieri viene visualizzato in modo chiaro e intuitivo sulla mappa interattiva dell'app <mark style="color:green;">**WeMap**</mark>. Le **Polilinee** tracciano in modo preciso il percorso dei sentieri sulla mappa.

Inoltre, attraverso l'interfaccia utente della mappa, gli utenti possono accedere a informazioni aggiuntive sui sentieri, come la lunghezza totale, la difficoltà del percorso e i punti di interesse lungo il tragitto. Questo rende l'esplorazione dei sentieri escursionistici un'esperienza più informativa e coinvolgente per gli utenti di WeMap.

La visualizzazione dei sentieri sulla mappa è progettata per essere intuitiva e facile da comprendere, fornendo agli utenti tutte le informazioni di cui hanno bisogno per godersi al meglio le loro avventure all'aria aperta.

***

## Aggiornamenti automatici e modalità offline

Una volta al giorno, quando l'app <mark style="color:green;">**WeMap**</mark> è **connessa a internet**, avviene una <mark style="color:orange;">**sincronizzazione automatica con OpenStreetMap per aggiornare il grafo dei sentieri**</mark>. Se durante questa sincronizzazione vengono **aggiunti** o **modificati sentieri** su **OpenStreetMap** che <mark style="color:purple;">**soddisfano i criteri**</mark> della nostra **query**, l'applicazione integra automaticamente queste nuove informazioni.

Questo approccio permette di mantenere l'uso <mark style="color:orange;">**offline efficace**</mark> e di mantenere l'app **aggiornata** e **super interconnessa** con le modifiche apportate su **OSM**. Questa funzionalità assicura che gli utenti possano usufruire sempre di informazioni aggiornate sui sentieri escursionistici, offrendo un'esperienza di esplorazione più **completa** e **aggiornata**.

***

## Precisione del tocco

{% hint style="warning" %}
Abbiamo sviluppato un <mark style="color:orange;">**algoritmo per migliorare la precisione del tocco**</mark> degli utenti sulla polilinea del sentiero. Questo algoritmo sfruttava una serie di <mark style="color:orange;">**marker invisibili**</mark> posizionati lungo il percorso del sentiero per individuare con precisione le coordinate esatte del punto toccato dall'utente. Grazie a questo sistema, gli utenti potevano segnalare con precisione le necessità di manutenzione specifiche lungo il sentiero. <mark style="color:yellow;">Tuttavia, abbiamo poi cessato di utilizzare questo approccio in quanto peggiorava le prestazioni anziché migliorarle.</mark>
{% endhint %}

L'approccio attuale coinvolge l'utilizzo di un <mark style="color:purple;">**LayerHitNotifier**</mark>, il quale notificherà ogni volta che viene effettuato un **tocco sul layer**. Questo notifier sarà collegato a un <mark style="color:purple;">**ValueNotifier**</mark> che, quando attivato, restituirà un <mark style="color:purple;">**LayerHitResult**</mark> contenente le **informazioni sui punti toccati** e sulle relative **coordinate geografiche**.

Per gestire gli eventi di tocco in modo appropriato, abbiamo implementato la <mark style="color:yellow;">**rilevazione dei gesti mediante widget reattivi**</mark> come GestureDetector o MouseRegion. In questo modo, possiamo filtrare gli eventi in base al tipo di gesto eseguito dall'utente, consentendo una gestione ottimizzata dei tocchi sulla mappa, e <mark style="color:orange;">**permettendo agli utenti di fare richieste di manutenzione solo su percorsi escursionisti comunali verificati**</mark>.

Queste modifiche, integrate nell'attuale versione dell'app, contribuiscono a migliorare ulteriormente l'esperienza degli utenti, garantendo il <mark style="color:yellow;">**massimo delle performance**</mark> e del <mark style="color:yellow;">**risparmio energetico**</mark>.
