QGIS, RELAZIONI, MODULI, WIDGET E REPORT

Le relazioni in QGIS consentono di sviluppare dei casi d’uso applicativi molto interessanti; una delle ragioni di questo articolo è quella di contribuire alla diffusione della conoscenza del tema.

Il caso d’uso: la pubblica illuminazione (PI) e la loro manutenzione

Immaginate di essere i gestori della PI della vostra città e di volere utilizzare QGIS (insieme ad altri strumenti) per farlo. Avete quindi un layer con tutti i punti luce (e i relativi attributi) e la necessità di associare a questo il dataset delle manutenzioni che vengono realizzate nei vari elementi della PI (per esempio tener traccia della sostituzione delle lampade) ed infine stampare un report (atlante).

A seguire vedremo come gestire la cosa con QGIS Lyon, le relazioni e con il comodo supporto delle maschere di input personalizzabili.

Chiavi e relazione

Per mettere in relazione il dataset delle manutenzioni con quello dei punti luce, potrete usare il meccanismo classico delle chiavi.

Il layer dei punti luce sarà caratterizzato da un campo con un codice identificativo numerico univoco per ogni punto luce – la chiave primaria – denominato nell’esempio di questo post “id_pi”.

Il database delle manutenzioni – che è una semplice tabella senza alcun attributo spaziale (preferibilmente una tabella .dbf) – è composto dai campi “id_m”, “data_m”, “ditta”, “lampada”, “potenza”, “note”; aggiungeremo un campo che contenga il codice identificativo del punto luce a cui la manutenzione è riferita. Questo campo farà da chiave esterna e si chiamerà “ce_id_pi”.

Il nostro modello prevede, per semplicità, che ad ogni punto luce (una sola lampada) sia possibile associare una o più manutenzioni; una classica relazione 1:N  (uno a molti) impostata sulle due chiavi numeriche di cui sopra.

Layer

Il layer dei punti luce ha la struttura sottostante, in cui sono stati introdotti dei campi per raccogliere i dati.

shp_punti_luce
definizione dello shapefile punti luce

Quello delle manutenzioni conterrà un codice identificativo numerico univoco per ogni elemento, un campo in cui inserire la data dell’intervento di manutenzione, il nome della ditta incaricata, il tipo di lampada sostituita e la potenza, un campo per le note.

tab_manutenzione
definizione tabella manutenzione.dbf

Definire la relazione

La relazione tra i due dataset si definisce a livello di “Proprietà di progetto”. Aperto il tab Relazioni si farà click su “Aggiungi relazione” e si imposteranno i seguenti parametri (vedi articolo QGIS RELAZIONI):

  • Nome, per dare un nome alla relazione;
  • Layer di riferimento (figlio), per il nome del layer che contiene la chiave esterna;
  • Campo di riferimento, per il nome della chiave esterna;
  • Layer di riferimento (Padre), per il nome del layer che contiene la chiave primaria;
  • Campo di riferimento, per il nome della chiave primaria;
  • Id, che viene usato internamente da QGIS, deve essere univoco e fa da indice della tabella di relazione tra chiave primaria e chiave esterna (può essere lascio vuoto).
def_relaz
definizione relazione

A relazione definita, questa apparirà nella finestra di dialogo:

def_relaz_2

Moduli

Una volta definita la relazione, se ne avrà evidenza anche nel modulo di inserimento/modifica degli attributi del dataset del layer punti luce. La visualizzazione a moduli in QGIS è molto utile per alcuni task di verifica ed inserimento dei dati, ed è molto personalizzabile.

relaz_2

La tabella della manutenzioni sarà visibile in un widget del modulo del punto luce, e sopra questa saranno visibili sei pulsanti:

  1. la matita, per attivare la modifica della tabella delle manutenzioni;
  2. il “+” per aggiungere un nuovo record alla tabella, che di default verrà associato all’elemento attivo del layer “punti_luce”;
  3. il ‘floppy‘, per salvare le modifiche;
  4. il tasto “x” per cancellare il record selezionato della tabella “manutenzioni”;
  5. il tasto “catenella” che aprirà una nuova finestra di dialogo con il quale associare qualsiasi manutenzione presente alla strada corrente;
  6. il tasto “rompi catenella” che rimuoverà l’associazione tra la manutenzione selezionata e la strada corrente;
  7. ed infine, a destra, ci sono due pulsanti per passare dalla vista “tabella” a quella modulo.

Anche per il dataset delle manutenzioni è possibile attivare il modulo di inserimento/modifica degli attributi, in modo che dia conto visivamente della relazione con il layer della PI.

A partire dalle proprietà del layer manutenzioni, bisognerà modificare il widget del campo che fa da chiave esterna.

manut_2
screenshot proprietà layer manutenzioni

E scegliere come tipo di widget “Riferimento della relazione”, utilizzando i parametri visibili nella figura sottostante (in condizioni normali i parametri sono presenti già di default, bisogna solo attivare ‘mostra modulo incorporato’):

attiva_modulo
screenshot proprietà widget manutenzioni

Una volta scelto questo speciale widget, sarà possibile leggere la relazione tra i due layer anche nel modulo delle manutenzioni:

manut_3

Report delle manutenzioni con un atlante

La cosa diventa parecchio interessante nel momento in cui si vuole generare un report della manutenzione, soprattutto dopo mesi o anni di lavoro.

La prima cosa da definire è il ‘vettore di copertura’ perchè da questo dipende il numero di pagine dell’atlante. Nel nostro caso (molto semplificato) è spontaneo definire come ‘vettore di copertura’ il layer punti luce.

CANVAS
screenshot con #4 punti luce

segue creazione dell’atlante:

atlas
screenshot atlante

nel compositore di stampe è possibile inserire la tabella degli attributi sia del vettore di copertura (layer punti luce) sia la tabella manutenzione messa in relazione (per maggiori dettagli su come creare un atlante vedasi articolo ‘QGIS: COME CREARE UN ATLAS‘).

Note finali (riferimenti, file esempio e video demo)

Questo articolo è una copia riadattata e ampliata di questo di Andrea Borruso. Il suo articolo è del 2014 e realizzato con QGIS 2.2, ma la sostanza è la stessa. Il post di Andrea mi è sembrato una grande perla e ho creduto utile clonarlo e aggiungere la parte dei report.

Da qui potrete scaricare un file di progetto d’esempio basato su QGIS 2.12.1 e come formato dati :shapefile puntuale, tabella manutenzione dbf. Qui un piccolo video dimostrativo.

 


Nota finale: il caso d’uso descritto è molto semplificato e non tiene conto di tutte i requisiti di un’applicazione complessa come la gestione di una PI comunale. Questo esempio è stato sviluppato utilizzando un semplice shapefile puntuale e una tabella (.dbf), entrambi i layer sono i meno indicati per la gestione di tale problematica.


Annunci

5 pensieri su “QGIS, RELAZIONI, MODULI, WIDGET E REPORT

  1. Ciao Totò, il tuo blog è sempre una miniera di informazioni e consigli su QGis e dintorni! Grazie mille per la tua eccellente capacità e volontà di condivisione.
    Questo post mi è stato molto utile però volendo impostare un progetto sfruttando al meglio relazioni e widget ma utilizzando Spatialite sono un po’ in difficoltà. Sicuramente anche perchè con Spatialite sto facendo i primi passi ora. Che tu sappia ci sono mica risorse web anche in inglese che mi possano aiutare? Io non ne ho trovate…
    grazie ancora
    luca

    Liked by 1 persona

  2. Per farla breve, il punto cui non riesco a trovare risposta, e che non è trattato nel cookbook, è come modificare le tabelle di attributi che sono in relazione con un layer direttamente da qgis sfruttando le relazioni, le maschere di inserimento. Ovviamente utilizzando oggetti di un db spatialite

    Mi piace

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...