QGIS RELAZIONI

Le ‘Relazioni’ in QGIS permettono di sviluppare dei casi molto interessanti attraverso il meccanismo classico delle ‘chiavi’. Le relazioni sono molto usate in QGIS, sia tra shapefile che tra semplici tabelle o shapefile e semplici tabelle o vettori PostGIS; vengono usate anche negli Atlas (Atlanti) nel compositore di stampe. Di seguito parleremo delle relazioni tra tabelle già esistenti.

Le ‘Relazioni’ vengono utilizzate ogniqualvolta nasce la necessità di dover mettere in relazione due tabelle, una con ‘n’ record e un’altra con ‘m’ record (con ‘n’ < ‘m’) cioè il classico esempio della relazione uno a molti, relazione ‘padre’ – ‘figlio’.

Per capire meglio di cosa si tratta facciamo un semplice esempio: lo shapefile regioni italiane è caratterizzato da una tabella degli attributi con #20 record (#20 feature) che rappresentano le venti regioni italiane e lo shapefile province italiane caratterizzato da #110 province (#110 feature) cioè la tabella degli attributi ha #110 righe. Lo shapefile regioni ha un campo univoco denominato ‘cod_reg’ (codice regione), tale campo lo ritroviamo anche nello shapefile province italiane, ma questa volta non è un campo univoco ma un semplice campo numerico che si ripete tante volte quante sono le province ricadenti all’interno di una regione; per esempio in Sicilia (cod_reg = 19) nella tabella delle province il campo ‘cod_reg = 19’ è ripetuto ben 9 volte, cioè il numero delle province siciliane.

Immagine 30
Tabella degli attributi regioni italiane
Immagine 31
Tabella degli attributi province italiane (filtrate per la Sicilia)

Questi due shapefile sono in relazione tra loro, una relazione tra ‘padre’ (regioni italiane) e ‘figlio’ (province italiane), relazione che tecnicamente è definita ‘uno a molti’ (una regione ha molte province; un record della tabella ‘padre’ ha molti record nella tabella ‘figlio’).

Per poter esplicare la relazione è necessario, come detto sopra, che la tabella padre sia caratterizzata da un campo con valori univoci (cod_reg, detta chiave primaria) e che la tabella figlia abbia un campo con valori ripetuti (cod_reg, detta chiave esterna) uguali alla tabella padre quindi un campo non univoco. Questi due campi sono fondamentali per definire la relazione in QGIS, entrambi vengono chiamati campi di riferimento, ma uno è relativo alla tabella padre (campo univoco) e l’altro alla tabella figlio (campo non univoco).

In QGIS le relazioni vengono definite a livello di progetto, quindi per definire una relazione tra tabelle occorre andare sul menù Progetto => Proprietà progetto… => relazioni

Immagine 32
screenshot proprietà progetto – Relazioni

cliccando sul bottone ‘Aggiungi relazione’ si aprirà la finestra:

Immagine 33
screenshot aggiungi relazione
  • Nome: inserire un nome che ricordi la relazione;
  • Layer di riferimento (figlio): selezionare lo shapefile delle province;
  • campo di riferimento: selezionare il campo ‘cod_reg’ (la chiave esterna);
  • Layer di riferimento (padre): selezionare lo shapefile regioni;
  • campo di riferimento: selezionare il campo ‘cod_reg’ (la chiave primaria);
  • OK.

A questo punto la relazione è definita e può essere visualizzata aprendo la tabella degli attributi dello shapefile regioni:

Immagine 34
screenshot tabella regione con relazione.

Osservazioni finali:

In generale le tabelle lato figlio sono delle semplici tabelle senza contenuto spaziale, delle classiche tabelle in formato CSV, in quanto il loro uso è limitato al solo arricchimento di dati, di conseguenza NON possono essere utilizzate per tematizzazioni o selezioni di feature lato padre. Un uso molto interessante è legato alla costruzione di atlanti.

Video dimostrativo.

Annunci

15 pensieri su “QGIS RELAZIONI

  1. volevo chiederti cortesemente, se è possibile creare una relazione con più di 2 tabelle in cascata (esempio banale: regione, provincia, comune, zone….)

    Mi piace

  2. Salve, installata la versione 3.0 ho notato che il form della “relazione” nella tabella attributi in visualizzazione modulo viene mostrato “collassato”: è visibile soltanto il nome della relazione. Hai riscontrato questo comportamento anche tu?
    Grazie e ancora complimenti

    Piace a 1 persona

  3. Ciao, ho creato una tabella padre con le informazioni spaziali e due tabelle figlio collegate senza info spaziali. Posso fare una query sulla tabella figlio e far accendere le geometrie? ho visto il plugin python che avete creato ma non riesco a sfruttarlo, sembra che sia solo per selezione manuale.. Scusa se non mi sono spiegata bene..

    Mi piace

  4. Ciao,
    per quale versione di QGIS è stato svilupatto il plugin “selectbyrelationship” di cui si discute sopra?
    quali sono le sue funzioni principali??
    Grazie! grandissimo Totò!

    Cristiano

    Piace a 1 persona

  5. Grazie Totò,
    davvero gentile e celere. Ho istallato e sperimentato un pò. Plugin buono e funzionale! Tuttavia non riesco a capire se è possibile (e come fare) per selezionare elementi presenti in tabelle relazionate partendo dal “lato padre” ossia selezionare automaticamente tutti “i figli”, a partire dalla selezione di una riga presente nella tabella “padre”. Grazie !
    Cr

    Piace a 1 persona

    1. Buongiorno,
      entrambe le versioni (per QGIS 2.x e 3.x) il plugin è ancora in fase sperimentale.
      Nella versione 2.x, diversamanete dell 3.x, non è possibile configurare il plugin che è impostato – di default – nella selezione figlio e seleziona il padre (oppure al contrario, non ricordo – perdonami)

      Nella versione 3 trovi maggiorni spiegazioni qui https://github.com/pyarchinit/selectbyrelationship_repo

      che versioni di QGIS stai usando?

      Mi piace

  6. Salve, sto utilizzando la versione 2.18.22, sulla quale ho installato il plugin sperimentale “select by relationship”. Stando alle mie prove effettuate, mettendo in relazione due shape puntuali (o anche uno puntulale ed uno lineare) che hanno una chiave (campo/colonna) in comune, attualmente il plugin permette una selezione automatica dell’elemento “padre” partendo dalla selezione di un elemento “figlio”, ma non il viceversa, ossia non permette di selezionare automaticamente tutti i “figli” cliccando sull’elemento “padre”. I video da te consigliati (pre-V3) sembrano confermare quanto ho constatato.
    Mi chiedevo se fosse possibile farlo tramite lo stesso plugin o tramite altri modi. Ritengo che in molti casi possa essere utile farlo.
    Ho sperimentato per un breve periodo la versione Qgis 3.2, ma ho per il momento preferito fare un passo indietro, ritenendolo per me un passo troppo azzardato…

    grazie per l’interesse e per le dritte!
    cr

    Piace a 1 persona

    1. Ciao,
      le tue osservazioni sono corrette.
      Il plugin è ancora in fase sperimentale e l’opzione attivata di default è quella che permette di selezionare il padre partendo da figlio.
      Il plugin permette anche il contrario ma l’opzione non è attiva in quanto occorre creare una finestra delle opzioni.
      Se ti interessa fammelo sapere che ti spiego come attivare le altre opzioni.

      Mi piace

  7. te ne sarei grato, credo che possa interessare a molti. Sperando che non sia troppo complesso per te spiegarlo o per per recepirlo. Tuttavia, come ben sai, nella versione 2.18, il plugin (per ora) non prevede alcuna drop-down list, ma semplicemente una attivazione/disattivazione della funzione.
    a presto!
    cr

    Piace a 1 persona

    1. La procedure è semplice:
      1. apri con un editor di testo (es: Notepad++) il file ‘select_by_relationship_plugin.py’;
      2. le opzioni si trovano dalla riga 200 alla 203, dovrebbero essere commentate, cioè con un #;
      3. cancella il cancelletto nelle righe che ti interessano: es: nella 200,201 e 202;
      4. salva il file e riavvia QGIS.

      PS: il file si trova nella cartella c:\Users\nomeutente\.qgis2\python\plugin\SelectByRelationShip

      Mi piace

  8. totòp !!
    ho provato, ci sono riuscito! grazie mille! Spesso mi comunica alcuni errori di phyton e l’originale selezione da “figlio a padre” non funziona con continuità. Credo siano effetti giustificabili nella fase di sperimentazione. Per adesso però, per quello che mi interessava, l’obiettivo è raggiunto! Grazie ancora e a presto!
    cr

    Piace a 1 persona

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 )

Google+ photo

Stai commentando usando il tuo account Google+. 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 )

Connessione a %s...