QGIS creare un atlas inconsueto

Il compositore di stampe di QGIS ha molte funzionalità avanzate, la mia preferita è la stampa in serie, conosciuta meglio come atlante o atlas: questo strumento permette di generare, in modo automatico, una serie di pagine a partire da un vettore di copertura (qui mio vecchio blog post).

Esistono decine di tutorial su questo argomento e anche su pigrecoinfinito trovate molti blog post sugli atlanti; in questo articolo documenterò un caso molto particolare e quindi poco noto, ma di grande utilità.

Lo spunto nasce da un messaggio su Telegram di un caro amico Andrea (aka wikiAndy) del 17 aprile 2020:

il tweet è questo:

guardando il video del tweet, noto che è un atlas dove le geometrie (l’europa) sono sempre le stesse e varia solo la tematizzazione: in pratica, come dicono quelli bravi, è un atlas per campi e non per righe (feature).

L’atlante di QGIS si basa sulla definizione del layer di copertura e crea tante pagine quante sono le feature del layer. QGIS permette di utilizzare, come Coverage layer, anche semplici tabelle senza geometria come il caso in esame.

Per generare un atlante che simuli quello del tweet ho scelto di utilizzare i dati relativi all’Italia (shapefile ISTAT province) e i dati del PCM-DPC in particolare il file dpc-covid19-ita-province.csv.

Analizzando il video del tweet notiamo due cose:

  1. le geometrie non variano, sono sempre le stesse;
  2. varia, nel tempo, la tematizzazione delle varie geometrie.

questi due osservazioni suggeriscono:

  1. non posso usare come layer di copertura un vettore, ma una semplice tabella che contenga dei valori legati al tempo, cioè le pagine dell’atlas sono legate al tempo, una per ogni giorno;
  2. occorre legare, il vettore province italiane, che contiene il dato totale_casi, al layer di copertura, in modo che ogni pagina (una al giorno) rappresenti le province italiane tematizzate secondo il parametro scelto;

le tabelle da generare sono due: la prima che contenga i dati per tematizzare e una seconda da usare come layer di copertura:

prima tabella
seconda tabella, layer di copertura

Osservazione importante 1, ogni riga del layer di copertura corrisponde ai campi della prima tabella:

Osservazione importante 2, la prima tabella va messa in JOIN con il vettore province ISTAT in modo da poter tematizzare utilizzando i campi (con intestazione le date);

Osservazione importante 3, utilizzare un trucco per far variare, per ogni pagina dell’atlas (variabile @atlas_pagename), il campo che contiene i dati da rappresentare:

espressione usata in questo caso specifico:

eval(@atlas_pagename)
compositore e pagine atlas

funzione eval : http://hfcqgis.opendatasicilia.it/it/latest/gr_funzioni/generale/eval.html?


NOTE FINALI: per ottenere le due tabelle utilizzate per generare l’atlas occorrono conoscenze di SQL, regex; di strumenti come data.word, Notepad++ ecc…. La prima tabella è una tabella PIVOT a partire dal file CSV della Protezione Civile.


Riferimenti

Ringraziamenti

Download

download

Repository con dati e progetto : https://github.com/pigreco/qgis_atlas_for_fields

Video tutorial


Se il blog post vi è piaciuto cliccate su ‘Mi piace’, grazie!!!
if you liked the blog post click on ‘Like’, thank you !!!

SE IL POST VI È STATO UTILE CONTRIBUITE A MANTENERLO AGGIORNATO PAYPAL


14 pensieri su “QGIS creare un atlas inconsueto

  1. Buongiorno, complimenti per i tuoi tutorial che ci hanno introdotto nel mondo degli Atlanti e nell’approfondimento delle potenzialità di QGIS come l’uso delle Espressioni. Vorrei chiederti se puoi descriverci l’utilizzo dei files da te inseriti nel download ed inoltre se puoi indicarci un tutorial su come creare una tabella Pivot partendo dal .csv della protezione Civile. Grazie

    Piace a 1 persona

  2. Complimenti per il tutorial e grazie mille per gli spunti di riflessione. Avrei solo due domande sull’esportazione. – – – Bisogna esportare un. Jpg per ogni giorno? Vi è un modo automatico che lo permette?
    – con quale programma è stata realizzata la gif?
    Grazie mille in anticipo e complimenti ancora

    Piace a 1 persona

  3. Buongiorno e grazie per il bel tutorial.
    Purtroppo, anche seguendo le indicazioni riportate, non riesco a ottenere lo stesso risultato. In particolare sembrerebbe che, dopo aver inserito l’espressione eval(@atlas_pagename) nel campo che contiene i dati da rappresentare, QGIS non riesca a leggere e/o interpretare bene i valori delle colonne, considerandoli tutti valori nulli (viene infatti rappresentata solo la classe con tali valori).
    Sa dirmi dove sbaglio??
    Grazie mille

    "Mi piace"

  4. Ciao,
    questo metodo ha una criticità che non ho volutamente descritto.
    L’ideale sarebbe avere delle classi sempre uguali e quindi quando tematizzi QGIS li vede e li rappresenta. Per classi variabili devi necessariamente trovare un compromesso, delle calssi che vadano bene per tutte le pagine.

    spero di essermi spiegato.

    saluti

    "Mi piace"

  5. Buongiorno, complimenti per la tua chiarezza nell’esporre gli argomenti. Volevo chiederti se è possibile attivare o disattivare una freccia in funzione del valore del layer figlio in una relazione tra due layer. Ti preciso che sono riuscito a inserire la tabella attributi ma ora non riesco ad attivare o disattivare una freccia in funzione del valore del layer figlio. Mi potresti essere di aiuto? Grazie per la tua gentilezza

    Piace a 1 persona

Lascia un commento

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