In questo esempio vedremo un possibile stile per le curve di livello
(isoipse). La tabella attributi associata al layer ha un campo
contenente la quota di ciascuna linea. Per prima cosa, partendo dalle
quote, calcoleremo un nuovo campo in cui le linee sono classificate in
base all'equidistanza verticale. Sulla base di questo nuovo campo
costruiremo una simbologia differenziata. Poi aggiungeremo etichette
con i valori di quota alle curve più importanti ed infine stabiliremo
condizioni di visualizzazione in base alla scale per le classi di
equidistanza meno importanti.
Il layer isoipse appena importato, con la simbologia asseganta
automaticamente dal programma, appare così:
Se apriamo la tabella degli attributi associala al layer (tasto destro
del mouse sul nome del layer > "Apri tabella attributi") vediamo che
la colonna 'CV_LIV_Q' contiene la quota di ogni curva. Però avremmo
bisogno di un campo in cui le curve siano classificate in base
all'equidistanza verticale (es: 10, 50, 100 ...). Possiamo crearlo
usando il "calcolatore di campi" (icona-pallottoliere).
Nella finestra del "Calcolatore di campi" scegliamo "Crea un nuovo
campo" poi spuntiamo l'opzione "Crea campo virtuale". Come dice il
programma
"un campo virtuale viene ricalcolato ogni volta che viene usato. La sua
definizione viene salvata nel file di progetto. Non viene salvato del
database del file e quindi i suoi valori non sono disponibili in altri
programmi". Questo significa che il campo virtuale non viene salvato
insieme al dato, quindi se aprissimo il layer con un altro programma
non ritroveremmo il campo appena creato (in altri progetti di QGIS
invece possiamo ritrovare il campo virtuale se salviamo un file di
stile .qml associato al layer). Ha però alcuni vantaggi: può essere
creato anche per layer non modificabili (ad esempio uno shapefile
compresso in .zip), può essere cambiato/corretto/migliorato
modificandone l'espressione, viene automaticamente aggiornato se si
cambia il valore di un campo usato nell'espressione (nell'esempio
seguente se correggiamo una quota da 20 a 200 la sua classe di
equidistanza cambia automaticamente da 10 a 100).
Per creare le classi di equidistanza ci serve un nuovo campo che avrà
nome 'EQUIDIST', di tipo 'Numero intero (integer)' (conterrà i valori
1, 10, 50, 100, 500, 1000) e lunghezza 10 (basterebbe anche meno ma
lasciamo il valore preimpostato).
Nella sezione "Espressione" andiamo a scrivere la regola che darà i
valori di classe di equidistanza in base alla quota delle curve. A
questo punto ci serve una regola che dica:
QUANDO la quota è multipla di 1000 ALLORA IL RISULTATO è 1000
ALTRIMENTI QUANDO la quota è multipla di 500 ALLORA IL RISULTATO è 500
ALTRIMENTI QUANDO la quota è multipla di 100 ALLORA IL RISULTATO è 100
ALTRIMENTI QUANDO la quota è multipla di 10 ALLORA IL RISULTATO è 10
ALTRIMENTI IL RISULTATO è 1
Per fare questo è utile la funzione CASE (la troviamo nella colonna
centrale nel gruppo "Condizioni": facendo doppio click su di essa viene
trascritta nell'area di sinistra, mentre a destra possiamo leggere la
spiegazione dell'espressione).
CASE WHEN
condizione1 è vera THEN
risultato1 WHEN
condizione2 è vera THEN
risultato2 WHEN
condizione3 è vera THEN
risultato3 WHEN
condizione... è vera THEN
risultato... ELSE
risultato_alternativo END
I vari risultati di CASE saranno appunto le classi di equidistanza
(dalla maggiore alla minore: 1000, 500, 100, 10, 1). Un po' più
complessa è la costruzione delle condizioni. Per prima cosa inseriamo
nell'espressione il campèo contenente i valori di quota: per far questo
cerchiamo il campèo 'CV_LIV_Q' nel gruppo "Campi e valori" e facciamo
doppio click su di esso (possiamo anche scriverlo direttamente
nell'espressione ricordando di metterlo tra virgolette).
Ora, per determinare se un valore di 'CV_LIV_Q' è multiplo di una
classe di equidistanza usiamo l'operatore % che restituisce il resto
della divisione: se il resto di una divisione è 0 significa che il
dividendo è multiplo del divisore.
Quindi se 'CV_LIV_Q' % 1000 = 0 allora è multiplo di 1000.
Tradotto in CASE: WHEN
("CV_LIV_Q" % 1000 = 0) THEN 1000
Scriviamo una riga simile per ogni classe di equidistanza è come
risultato alternativo finale indichiamo 1 (ELSE 1),
ovvero i valori che non appartengono a nessuna classe indicata saranno
assegnati alla classe 1.
Alla fine dobbiamo ottenere la seguente espressione: CASE WHEN (
"CV_LIV_Q" % 1000 = 0) THEN 1000 WHEN (
"CV_LIV_Q" % 500 = 0) THEN 500 WHEN (
"CV_LIV_Q" % 100 = 0) THEN 100 WHEN (
"CV_LIV_Q" % 50 = 0) THEN 50 WHEN (
"CV_LIV_Q" % 10 = 0) THEN 10 ELSE 1 END
Se l'espressione è corretta comparirà in basso alla vore "Anteprima" il
primo valore calcolato
A questo punto possiamo dare l'OK e nella tabella degli attributi
comparirà il campo 'EQUIDIST' con i nuovi valori calcolati:
Come già detto i nuovi valori non sono salvati fisicamente nel database
del layer; viene invece salvata l'espressione nel progetto di QGIS ed
eventualmente nel file di stile .qml del layer. Quindi se vogliamo
modificare i valori nel campo virtuale possiamo/dobbiamo modificare
l'espressione che li genera. Per farlo apriamo la finestra "Proprietà
vettore" del layer (tasto destro del mouse sul nome del layer >
"Proprietà") e andiamo alla scheda "Campi Sorgente: vediamo che il
campo 'EQUIDIST', nella colonna "Commento" contiene parte
dell'espressione che avevamo inserito.
Cliccando sull'icona dell'espressione (quella simile ad un 3 al
contrario) si apre la finestra che ci permette di modificare
l'espressione. Ad esempio possiamo aggiungere una condizione per
definire la classe di equidistanza 50.
Una volta che il campo 'EQUIDIST' è completo con tutti i valori che ci
servono possiamo utilizzarlo per differenziare la simbologia delle
curve di levello.
Sempre nella finestra "Proprietà vettore", passiamo alla scheda
"Simbologia", impostiamo lo stile per categoria ("Categorized"),
scegliamo il campo 'EQUIDIST' come colonna in base a cui determinare le
categorie e clicchiamo su "Classifica": vengono così creatidiversi
simboli lineari, uno per ogni classe di equidistanza più un simbolo per
eventuali valori nulli.
Visto che dobbiamo differenziare le linee per spessore e non per colore
selezioniamo tutti i simboli, clicchiamo con il tasto destro del mouse
e selezioniamo cambia colore: scegliamo ad esempio un marrone (R=100,
G=50, B=0).
>>
Ora differenziamo gli spessori: selezioniamo i simboli delle curve
direttrici (quelle con equidistanza 100 e 500) e cambiamo larghezza
impostando un valore maggiore,
>>
poi selezioniamo gli altri e diminuiamo lo spessore.
Eventualmente togliamo la spunta al simbolo del valore di equidistanza
1 in modo da non visualizzare le curve a meno di 10 m.
Ed ecco il risultato in mappa:
Affinché le curve di livello siano utili dobbiamo visualizzarne la
quota; non su tutte, altrimenti la mappa diventa troppo affollata di
numeri, ma almeno sulle curve principali con equidistanza 100 m.
Apriamo quindi la solita finestra "Proprietà vettore" del layer (tasto
destro del
mouse sul nome del layer > "Proprietà") e andiamo alla scheda
"Etichette". Impostiamo la modalità di etichettarura sulla voce
"Etichettatura tramite regole" e clicchiamo in basso sul bottone +
("Aggiungi regola").
Nella finestra che compare ("Modifica regola") andiamo a specificare le
condizioni ed i parametri dell'etichettatura.
Inseriamo un nome/descrizione della regola che ci aiuta a distinguerla
quando usiamo più regole,
poi alla voce filtro clicchiamo sull'icona dell'espressione per
scrivere la condizione della regola.
Nella finestra "Costruttore stringhe espressione" scriviamo
"EQUIDIST" >= 100
Dando OK la condizione viene riportata alla voce "Filtro";
in questo modo la regola di etichettatura verrà applicata solo alle
curve di livello con attributo 'EQUIDIST' maggiore o uguale a 100.
(Volendo è possibile specificare un intervallo di scala nel quale
visualizzare le etichette)
Nella sezione "Etichette" (che dev'essere spuntata) andiamo ad indicare
il campo contenente i valori da usare per l'etichettatura; in questo
caso sono le quote contenute nel campo 'CV_LIV_Q'.
A questo punto possiamo dare "OK", poi "Apply" (nella finestra
"Proprietà vettore") per vedere come appaiono le etichette:
Ok, le quote ci sono ma per evitare equivoci sarebbe meglio
posizionarle sovrapposte alle linee cui si riferiscono e con lo stesso
colore. Torniamo quindi alla finestra "Proprietà vettore", scheda
"Etichette" e clicchiamo in basso sul bottone con foglio e matita
("Modifica regola").
Si riapre la finestra della regala dove possiamo cambiare le
caratteristiche delle etichette.
Nella sezione "Etichette" selezioniamo la voce "Testo" e andiamo a
cambiare il colore impostando lo stesso delle curve.
Passiamo poi alla voce "Posizionamento": spuntiamo l'opzione "Sulla
linea" e togliamo "Sopra la linea". In questo modo le etichette
andranno a sovrapporsi alle rispettive linee.
Se però sovrapponiamo le etichette alle curve con lo stesso colore
rischiamo di renderle illeggibili. Meglio dare un leggero bordo bianco
alle scritte per staccarle un po' dalle linee. Andiamo perciò sulla
voce "Buffer", attiviamo l'opzione "Disegna buffer del testo", possiamo
lasciare invariati dimensione (1,000) e colore (bianco) ma
eventualmente diminuiamo l'opacità per avere un bordo leggermente
trasparente.
Questo è il risultato in cui le quote si fondono meglio con le
rispettive curve rimanendo comunque leggibili:
Ci rimane ancora una cosa da sistemare: se allarghiamo l'area
inquadrata (ovvero diminuiamo la scala) le curve di livello diventano
troppo ravvicinate e fanno confusione. Possiamo però impostare
intervalli di scala di visualizzazione diversi per ogni classe di
equidistanza in modo che diminuendo la scala vengano tolte gradualmente
le curve meno importanti (ovvero con equidistanza verticale inferiore).
Per fare questo apriamo ancora la finestra "Proprietà vettore" del
layer (tasto destro del
mouse sul nome del layer > "Proprietà"), scheda "Simbologia" e
cambiamo la modalità da "Categorized" a "Rule-based" (Tramite regole).
Rimangono le stesse classi di simbologia basate sull'equidistana
verticale ma in basso compare un icona di "Modifica regola attuale" che
ci permette non solo di cambire il simbolo ma anche di impostare un
intervallo di scala per la classe selezionata.
Cambiamo ad esempio l'intervallo di scala per la classe 10
e per la classe 50
(togliamo ancora la spunta alla classe 1)
Ed ecco i risultati a diverse scale di visualizzazione:
Salvataggio stile in file .qml
Nel caso si voglia utilizzare questo stesso layer con lo stesso stile
(simbologia, etichette, etc.) in un altro progetto di QGIS non è
necessario rifare tutta la procedura. Possiamo creare un file di
stile che salva tutti i parametri appena impostati (anche il campo
virtuale).
Per farlo apriamo la finestra "Proprietà vettore" del layer (tasto
destro del mouse sul nome del layer > "Proprietà"),
scheda "Simbologia" e in basso a sinistra clicchiamo su "Stile" >
"Salva stile" > "QGIS Layer Style File..."
Viene così creato un file di testo con estensione .qml simile a questo:
dove sono specificati i vari parametri dello stile.
Se viene salvato nella stessa cartella dello shapefile e con lo stesso
nome esse viene letto automaticamente quando si aggiunge il layer in
QGIS, altrimenti può essere caricato dalla finestra "Proprietà
vettore", scheda "Simbologia", cliccando su "Stile" > "Carica stile".