QGIS: stilizzazione di punti con più simboli in relazione padre/figlio e layer virtuali

Introduzione

Questo breve post è un’applicazione dell’utilissimo post scritto da Salvatore Fiandaca (che mi sta ospitando nel suo blog, grazie!). Il post che segue potrebbe essere una versione essenziale del blogpost sopracitato che approfondisce i diversi temi trattati. Il problema da risolvere è il medesimo, stilizzare una serie di elementi puntuali che rappresentano i cartelli stradali, ogni elemento puntuale simboleggie l’elemento verticale cui possono essere associate una o più paline segnaletiche come in figura:

Il layer degli elementi verticali è quindi legato al layeer con sole informazioni alfa-numeriche delle paline segnaletiche, tramite una relazione 1:M ovvero uno a molti: ad un elemento verticale possono essere associati numerosi segnali. Il problema, analogo a quello affrontato nel post di Salvatore Fiandaca, è stato risolto con l’utilizzo dei layer virtuali; per stilizzare secondo la regola richiesta infatti, è necessario avere tanti punti quante sono le paline segnaletiche che verranno rappresentate sulla mappe in funzione del segnale che simboleggiano.

In QGIS

Si hanno dunque due layer caricati sul nostro progetto, il primo layer contiene le geometrie dei punti che simboleggiano l’elemento verticale, segnaletica verticale:

Il secondo layer è una tabella, segnali:

È possibile vedere che la relazione 1:M che lega i due layer associa la palina segnaletica (caratterizzata da un id) all’elemento verticale (idsegnale). Oltre ad avere questi layer abbiamo anche un file .qml con uno stile associato per ogni categoria di segnale.

Per fare sì che ad ogni palina segnaletica sia rappresentata sulla mappa, ognuno di questi elementi dovrà avere una sua geometria (essere un punto) nella posizione dell’elemento verticale (segnaletica_vertical). Per raggiungere questo obbiettivo, come spiegato nel post citato in precedenza, si utilizza un layer di appoggio, in particolare un layer virtuale. Il layer virtuale è una vista, per chi conosce il linguaggio SQL e gli RDBMS: una vista non esiste come set archiviato di valori di dati in un file o in un database. I valori che compongono la tabella risultante da una vista provengono da tabelle (in questo caso i layer segnaletica_verticale e segnali) a cui fa riferimento la query in linguaggio SQL che definisce il layer virtuale stesso (ovvero la vista), questi valori inoltre sono prodotti dinamicamente e dunque variano al variare delle tabelle (dei layer) cui ci siriferisce nella query. Per creare un layer virtuale si importano i vettori interessati dalla relazione padre figlio nel tab di creazione del layer:

A questo punto non resta che scrivere la query SQL che definisce la vista e quindi il layer virtuale. la query utilizzata è più semplice rispetto a quella dell’articolo citato (non comprendendo la parte riguardo l’etichetta) ma la struttura non cambia.

select figlio.macrocat as d_macrocategoria, padre.geometry as geom
from segnaletica_verticale padre, segnali figlio
where padre.id = figlio.idsegnale

Si ottiene una tabella con attributi geometrici che per ogni record (riga) specifica la categoria del segnale. I campi della tabella attributi del layer virtuale sono definiti nel `select`, mentre il valore che questi campi assumono vengono presi sia dal layer padre che dal layer figlio facendo un join tra le due tabelle con la clausola `where`. La visualizzazione nella mappa non cambia con la stilizzazione proposta da QGIS di default, ma in questo momento sul punto visualizzato possoono invece essere “sovrapposti” più punti che simboleggiano diverse paline segnaletiche. Resta solamente da stilizzare il layer virtuale. Accedendo alle proprietà del ayer virtuale possiamo caricare lo stile (file .qml):

Infine, se si seguono le indicazioni del post, si passa da una simbologia “Categorizzata” a una simbologia “Spostamento Punto” inserendo i parametri che risultano più idonei e in particolare, ripercorrendo i passaggi del tutorial di Salvatore Fiandaca ma in maniera semplificata, dal momento che abbiamo caricato uno stile categorizzato esistente, è possibile settare i parametri come da screen che segue:

  • si stabilisca il tipo di tematizzazione in 1;
  • in 2 si stabilisca il simbolo del punto centrale;
  • in 3 si stabilisca la tolleranza della distanza tra punti: si inserisca 0 in maniera che lo spostamento dal punto centrale avvenga senza tenere conto di eventuali punti vicini;
  • si stabilisca il metodo di posizionamento che conviene al caso d’uso (4), in questo caso “Anelli concentrici”;
  • se lo si desidera rendere trasparenti gli anelli concentrici (5) e regolare la la distanza dei punti dal punto centrale (6).

Risultato

Il risultato che si ottiene è questo:

NOTE FINALI: Allego i dati utilizzati e con i quali si può riprodurre la tematizzazione descritta, per approfondimenti e per indicazioni ancora più puntuali potrebbe essere utile guardare il tutorial video presente nel blog originale video


RIFERIMENTI

RINGRAZIAMENTI

  • Salvatore Fiandaca

AUTORE BLOG POST


3 pensieri su “QGIS: stilizzazione di punti con più simboli in relazione padre/figlio e layer virtuali

  1. Da normativa i segnali su uno stesso palo possono essere al massimo due, quindi si potrebbe semplificare il tutto. Diversamente, se è un lavoro affidato da una Amministrazione, bisognerebbe segnalare l’anomalia. Ad ogni buon conto, succede spesso di trovare più di due segnali per palo, quindi ben venga questo post. Bravi

    Piace a 1 persona

    1. Ho Trovato molto interessante questo post, ho fatto un GIS di tutti i cartelli stradali presenti in un comune, in tantissime occasioni ho trovato più di due cartelli sullo stesso palo, spesso addirittura quattro (che mi pare fosse il massimo numero di cartelli su un palo).

      Piace a 1 persona

Lascia un commento

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.