alsperGIS
DATI
SOFTWARE

SOFTWARE >> QGIS 3

Visualizzare dati da posizionamento satellitare in QGIS 3


(esempio realizzato con QGIS 2.99)



Traccia .gpx


I più comuni dispositivi di posizionamento satellitare (da sistemi GPS, GLONASS e il più recente GALILEO) possono salvare i dati (waypoint e tracce) in formato .gpx, un formato che personalmente non mi piace poiché usa molti caratteri (e quindi spazio) per tenere poche informazioni ma può essere letto da molti programmi.
I dati di posizionamento più comuni sono:
waypoints: punti singoli che rappresentano posizioni di particolare interesse; ciascun punto è registrato su comando dell'utente;
tracce: sequenze di punti (posizioni) registrati automaticamente dal dispositivo e che definiscono il percorso effettuato.

Questo è un esempio di file .gpx per waypoints:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>

<gpx xmlns="http://www.topografix.com/GPX/1/1" xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3" xmlns:wptx1="http://www.garmin.com/xmlschemas/WaypointExtension/v1" xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1" creator="GPSMAP 64s" version="1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www8.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackStatsExtension/v1 http://www8.garmin.com/xmlschemas/TrackStatsExtension.xsd http://www.garmin.com/xmlschemas/WaypointExtension/v1 http://www8.garmin.com/xmlschemas/WaypointExtensionv1.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd">

  <metadata>
    <link href="http://www.garmin.com">
       <text>Garmin International</text>
    </link>
    <time>2017-04-14T05:27:38Z</time>
  </metadata>

  <wpt lat="45.899187" lon="9.406288">
    <ele>1177.025635</ele>
    <time>2017-04-14T05:27:38Z</time>
    <name>254</name>
    <sym>Flag, Blue</sym>
  </wpt>

  <wpt lat="45.899452" lon="9.406834">
    <ele>1178.491821</ele>
    <time>2017-04-14T05:30:52Z</time>
    <name>255</name>
    <sym>Flag, Blue</sym>
  </wpt>

  ...

</gpx>
all'inizio ci sono alcune informazioni generiche sul file ( indirizzi di riferimento e <metadata>) poi segue l'elenco dei punti (<wpt>). In questo caso per ogni punto sono indicate le coordinate (lat, lon), la quota (<ele>), l'ora di registrazione (<time>), il nome (<name>) ed il tipo di simbolo (<sym>).

Questo invece è un esempio di file .gpx per una traccia:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>

<gpx xmlns="http://www.topografix.com/GPX/1/1" xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3" xmlns:gpxtrkx="http://www.garmin.com/xmlschemas/TrackStatsExtension/v1" xmlns:wptx1="http://www.garmin.com/xmlschemas/WaypointExtension/v1" xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1" creator="GPSMAP 64s" version="1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www8.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackStatsExtension/v1 http://www8.garmin.com/xmlschemas/TrackStatsExtension.xsd http://www.garmin.com/xmlschemas/WaypointExtension/v1 http://www8.garmin.com/xmlschemas/WaypointExtensionv1.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd">

  <metadata>
    <link href="http://www.garmin.com">
      <text>Garmin International</text>
    </link>
    <time>2017-04-14T10:44:49Z</time>
  </metadata>

  <trk>
    <name>2017-04-14 12:44:45</name>
    <extensions>
      <gpxx:TrackExtension>
        <gpxx:DisplayColor>Cyan</gpxx:DisplayColor>
      </gpxx:TrackExtension>
      <gpxtrkx:TrackStatsExtension>
        <gpxtrkx:Distance>8571</gpxtrkx:Distance>
        <gpxtrkx:TotalElapsedTime>19221</gpxtrkx:TotalElapsedTime>
        <gpxtrkx:MovingTime>12256</gpxtrkx:MovingTime>
        <gpxtrkx:StoppedTime>6968</gpxtrkx:StoppedTime>
        <gpxtrkx:MovingSpeed>1</gpxtrkx:MovingSpeed>
        <gpxtrkx:MaxSpeed>3</gpxtrkx:MaxSpeed>
        <gpxtrkx:MaxElevation>2180</gpxtrkx:MaxElevation>
        <gpxtrkx:MinElevation>1109</gpxtrkx:MinElevation>
        <gpxtrkx:Ascent>1312</gpxtrkx:Ascent>
        <gpxtrkx:Descent>308</gpxtrkx:Descent>
        <gpxtrkx:AvgAscentRate>0</gpxtrkx:AvgAscentRate>
        <gpxtrkx:MaxAscentRate>1</gpxtrkx:MaxAscentRate>
        <gpxtrkx:AvgDescentRate>0</gpxtrkx:AvgDescentRate>
        <gpxtrkx:MaxDescentRate>-0</gpxtrkx:MaxDescentRate>
      </gpxtrkx:TrackStatsExtension>
    </extensions>

    <trkseg>

      <trkpt lat="45.8991386555" lon="9.4062377047">
        <ele>1176.23</ele>
        <time>2017-04-14T05:24:28Z</time>
      </trkpt>

      <trkpt lat="45.8991378173" lon="9.4062375370">
        <ele>1176.23</ele>
        <time>2017-04-14T05:24:29Z</time>
      </trkpt>

      <trkpt lat="45.8991369791" lon="9.4062374532">
        <ele>1176.23</ele>
        <time>2017-04-14T05:24:30Z</time>
      </trkpt>

      ...

    </trkseg>
  </trk>
</gpx>
l'inizio, con informazioni generiche sul file (indirizzi di riferimento e <metadata>), è simile al file di waypoints (poiché sono stati creati dallo stesso dispositivo). Poi il tag <trk> segna l'inizio della traccia con subito alcune informazioni globali (distanza, dislivello, etc.); seguono i segmenti di traccia (<trkseg>) ciascuno composto da una sequenza di track-point (<trkpt>). Ogni punto di traccia oltre alle coordinate possiede informazioni su quota e orario di registrazione.

Importare waypoints e tracce in formato .gpx in QGIS è facilissimo, basta trascinare (drag and drop) il file nella vista/mappa o usare il "Pannello Browser" (tasto destro del mouse sul nome del file > "Aggiungi i(il) layer selezionati alla mappa).


In entrambi i casi il programma ci chiede che tipo di dati importare. Nel caso di waypoints abbiamo un'unica ovvia scelta mentre una traccia può essere importate come elemento lineare ("tracks") o come serie di punti ("track_points").

Possiamo anche selezionarli entrambi in modo da aggiungere sia i punti di traccia che la linea di traccia.

Se ingrandiamo possiamo vedere che i punti corrispondono ai nodi della linea (come è ovvio che sia)


Ora è legittimo farsi una domanda: a cosa ci servono i punti se abbiamo già la linea? semplice: ai punti sono associate informazioni (in questo caso sono solo quota e orario ma portebbero essere di più)
che con la sola linea andrebbero perse.
Tali informazioni sono visibili nella tabella attributi associata al layer di punti (click con tasto destro del mouse sul nome del layer > "Apri tebella attributi"):


Possono anche essere consultate punto per punto attivando lo strumento "Informazioni elementi" e cliccando sul punto desiderato:



Oppure in base ad un parametro che ci interessa possiamo trovare il punto (o i punti) relativi.
Ad esempio se vogliamo conoscere la posizione raggiunta alle ore 8:38:20 possiamo cercare nella tabella attributi i punti più vicini, li selezioniamo e clicchiamo sullo strumento "Zoom mappa alle righe selezionate".

 In questo modo la vista-mappa di QGIS viene centrata ed ingrandita in corrispondenza dei dui punti (evidenziati in giallo) trai i quali si trova la posizione raggiunta all'ora 8:38:20.

Ciò risulta utile, ad esempio, quando si vuole geo-locare una fotografia di cui si conosce data-ora di scatto (ovviamente in tal caso è necessaria la sincronizzazione degli orologi della fotocamera dispositivo di posizionamento satellitare).






Testo delimitato


Nell'esempio soprastante le informazioni aggiuntive relative ai punti della traccia erano un po' scarse (solo quota e orario). Per poter valutare (approssimativamente) la qualità di un rilevamento di posizioni satellitare sarebbe meglio avere per ogni punto anche le indicazioni sul numero di satelliti connessi e sull'errore stimato. I dispositivi di posizionamento satellitare economici (< 500 euro) in genere visualizzano questo tipo di informazioni ma non le salvano nei file .gpx. Per mia fortuna possiedo una fotocamera compatta con rilevatore GPS di qualità scarsa ma che può salvare la traccia come file di testo contenente anche informazioni quali numero di satelliti e HDOP.
HDOP (Horizontal Dilution Of Precision) indica la degradazione dell'accuratezza del rilevamento a causa della posizione non ottimale dei satelliti in genere dovuta a scarsa visibilità del cielo (>> maggiori informazioni). In pratica è un numero che moltiplicato per la precisione standard del dispositivo indica il possibile errore di posizionamento. Va detto che l'HDOP non è un'indicazione certa dell'accuratezza della posizione poiché esistono altre cause di errore che non sono stimabili (ad es. errori da segnali riflessi), ma è un secondo indizio (il primo è il numero di satelliti) sull'attendibilità del rilevamento.

In questo esempio i dati sono salvati in un file di testo .csv (comma separated values) in cui i valori sono separati da punto e virgola:
ID;TIME;LAT;LON;FIX;N_SAT;HDOP;ALTITUDE;HGEO
1;052033.474;45.8992083333;9.406095;1;08;1.0;1161.87;48.01
2;052149.000;45.8990483333;9.40611333333;1;08;1.0;1189.42;48.01
3;052253.000;45.8991733333;9.406225;1;08;1.0;1181.74;48.01
4;052354.000;45.8991666667;9.40617166667;1;08;1.0;1186.87;48.01
5;052458.000;45.8991916667;9.40617166667;1;07;1.0;1177.49;48.01
...

Per aggiungere in QGIS questo tipo di dati apriamo i gestore della sorgente dati

e selezioniamo la voce "Testo delimitato".
In alto indichiamo il percorso del file, inseriamo il nome da dare al layer e specifichiamo la giusta codifica.
Nell'area "Formato file" selezioniamo "Delimitatori personalizzati" e spuntiamo "Punto e virgola" (in fondo alla finestra compare un'anteprima dei dati in tabella che ci mostra se la delimitazione è corretta).
Nell'area "Opzioni record" dobbiamo indicare se all'inizio del file ci sono righe di testo che non si interessano e se la prima riga dei dati utili contiene i nomi dei campi.
Poi ci sono eventuali opzioni per l'interpretazione dei dati; ad esempio se i numeri hanno come separatore decimale la virgola (all'italiana) invece del punto (all'inglese) va spuntata l'apposita opzione.
Nell'area "Definizione geometria" bisogna precisare le coordinate che definiscono i punti; se ci sono campi con nomi X e Y oppure LAT e LON essi vengono riconosciuti automaticamente, altrimenti vanno indicati.

Cliccando su "Aggiungi" compare una finestra che ci chiede il sistema di riferimento delle coordinate: in questo caso "WGS 84" che è il sistema più comune per i dati da posizionamento satellitare.


I punti appena aggiunti compaio tutti con lo stesso colore...

... Meglio differenziarli:
apriamo la finestra "Proprietà vettore" (doppio click sul nome del layer) e selezioniamo la voce "Simbologia"; impostiamo la modalità su "Categorized" (per categorie), alla voce "Colonna" indichiamo il campo contenente il numero di satelliti e clicchiamo su "Classifica" (in basso).
Compaiono le varie categorie, diverse per colore, dipendenti dal numero di satelliti.

Cliccando su OK o Apply (Applica) possiamo vedere il risultato sulla mappa.

Il numero di satelliti è un primo indizio sull'affidabilità del rilevamento: i punti acquisiti con un maggior numero di satelliti dovrebbero essere i più "sicuri", mentre al diminuire del numero aumenta la probabilità di errore. Per il calcolo della posizione il dispositivo di rilevamento ha bisogno di almeno 4 satelliti. In questo caso ci sono (pochi) punti che segnano 3 satelliti ma è meglio non considerarli. Nella figura soprastante vediamo chi i punti più fuori traccia sono quelli di 4 satelliti seguiti dai punti con 5 satelliti; anche rari punti con 6 satelliti sono in posizione errata mentre quelli con 7 (purtroppo pochi) cadono tutti sulla traccia corretta.

Ora vediamo il dato HDOP. Come detto sopra se moltiplichiamo la precisione standard del dispositivo (in questo caso ipotizziamo 5 m) per l'HDOP otteniamo il possibile errore (in metri) dovuto alla disposizione dei satelliti. Quindi usiamo l'attributo HDOP per a dare ai simboli una dimensione pari al raggio di errore.
Torniamo alla finestra "Proprietà vettore" > "Simbologia" e alla voce "Simbolo" clicchiamo su "Cambia"


Consideriamo solo il parametro "Dimensione": clicchiamo sul tasto alla sua destra per far comparire il relativo menù e  scegliamo "Modifica..."


Compare la finestra per costruire l'espressione che determinerà la dimensione dei punti.
Nella colonna centrale espandiamo la voce "Campi e valori" e facciamo doppio click su HDOP (in questo modo il campo HDOP viene aggiunto all'espressione). Poi, dopo "HDOP", scriviamo *10 (* è il segno che indica la moltiplicazione). Come già detto ho ipotizzato una precisione standard pari a 5 m, quindi moltiplicando HDOP*5 otterrei il raggio di errore; però nell'indicare la dimensione del punto devo dare il diametro quindi devo raddoppiare.


Dopo la formula bisogna specificare che i valori per la dimensione non sono più millimetri a schermo ma sono metri reali, quindi cambiamo il parametro "Unità" da "Millimetri" a "Unità mappa". ATTENZIONE: questo funzione solo avendo la mappa di QGIS in un sistema metrico come UTM dove l'unità di misura è il metro.


Eventualmente diminuiamo l'opacità in modo che se un simbolo ne copre altri si possano comunque intravedere quelli sottostanti.


Ecco il risultato dove il raggio dei punti è indicativo dell'errore stimato:

Vediamo che i punti molto fuori traccia sono ad una distanza superiore al raggio di errore (che è stimato sulla base della disposizione non ottimale dei satelliti) quindi ci sono cause aggiuntive (non stimabili) di inaccuratezza; in questo caso sono probabili segnali riflessi che causano errori nel calcolo della posizione.


Un controllo di opacità/trasparenza è presente anche in "Proprietà vettore - Simbologia", nella sezione "Visualizzazione del layer"

in questo caso però la trasparenza vale per il layer ma non ha effetto tra i simboli dello stesso (in pratica i simboli al di sotto di un altro non vengono visualizzati).
Per capire la cosa è meglio un esempio:

trasparenza impostata per simbolo
(da finestra "Selettore simbolo"):

trasparenza impostata per layer
(da finestra "Proprietà vettore):

Tuttavia, sempre nella sezione "Visualizzazione del layer", c'è l'ultima opzione che ci permette di impostare un ordine di visualizzazione basato su un attributo.

Se ad esempio impostiamo N_SAT crescente...

...otteniamo che i simboli dei punti con più satelliti vengono disegnati al di sopra di quelli con meno satelliti:









Febbraio 2018
Alessandro Perego