QGIS 3.18 Zürich – Polymorphic Relation

INTRODUZIONE

Documenti come testo, immagini, video o qualsiasi tipo di file possono attualmente essere collegati a un widget di risorse esterne nei progetti QGIS. Spesso è necessario allegare più documenti a una feature e QGIS ci aiuta tramite le relazioni 1: N che gestiscono questo tipo di requisito.

Nei casi semplici basta creare una tabella documenti, ma nella maggior parte dei casi occorrono tante tabelle quante sono i documenti da allegare con il rischio di avere molte tabelle. Le relazioni Polimorfiche (o dinamiche) offrono la possibilità di mantenere tutti i documenti in un’unica tabella documenti.

Le relazioni polimorfiche funzionano utilizzando una tabella di ricerca con una colonna aggiuntiva che specifica a quale tabella deve fare riferimento la chiave esterna.

Nelle relazioni non polimorfiche, le chiavi esterne fanno riferimento a un ID primario in una tabella specifica. D’altra parte, una chiave esterna in una tabella di ricerca polimorfica può fare riferimento a molte tabelle

Le relazioni dinamiche sono in realtà un gruppo di relazioni standard. Tuttavia, il legame tra i layer padre e il layer figlio (documento) si ottiene tramite un’espressione.

Schema logico Relazione Polimorfica

ESEMPIO

Importo in un progetto QGIS:

  • Reg01012021_WGS84 : layer poligonale dei limiti amministrativi regionali ISTAT;
  • ProvCM01012021_WGS84 : layer poligonale dei limiti amministrativi provinciali ISTAT;
  • sicilia_doc : file CSV con i miei documenti;

Il file CSV (lo costruisco io):

dove (numero minimo di campi):

  • fid : è il campo che contiene i fid che corrispondono alle feature_id nei relativi layer;
  • nome : un campo descrittivo, serve a noi per capire il contenuto delle feature;
  • layer : contiene i nomi dei layer (genitori) caricati in QGIS;
  • documenti : contiene i link o percorsi dei documenti.

Crea relazione di progetto:

descrizione maschera:

  1. id : identificativo relazione, scrivere un nome che ci ricordi la relazione;
  2. Layer figlio : selezionare dall’elenco il layer che ha funzione di figlio, nel nostro caso il file CSV;
  3. Campo del layer : è il nome del campo, nel layer CSV, che contiene i nomi del layer genitori (padre);
  4. Espressione del campo del layer : usare @layer_name se nel Campo del Layer ci sono i nomi esatti dei layer genitori (vedi lista Layer Padre (8)), altrimenti tramite espressione occorre ricostruire tali nomi;
  5. Tipo di relazione : lasciare sempre Associazione, nella stragrande maggioranza dei casi va bene;
  6. Campo 1, Riferimento (padre) : il campo di riferimento utilizzato nei layer genitori (padre);
  7. Campo 1, Riferimento (figlio) : il campo del layer figlio (per noi il file CSV) che contiene i valori del campo fid dei layer genitori (padre);
  8. Layer Padre : mettere una spunta sui layer da utilizzare come padre.

Layer genitori o padre:

In azione: due layer e unica relazione dinamica

Con il layer padre : Reg01012021_WGS84

Con il layer padre : ProvCM01012021_WGS84

Le relazioni polimorfiche sono visibili nel calcolatore di campi:

Le relazioni polimorfiche possono essere utilizzate negli atlas:

È stato introdotto un nuovo widget:


NOTE FINALI:

Tramite le relazioni Polimorfiche abbiamo utilizzato unica tabella documenti e creato unica relazione polimorfica: QGIS in realtà crea in automatico due relazioni standard in quanto ci sono due layer padre, ma il lavoro sporco lo fa QGIS!

Le relazioni dinamiche sono state appena introdotte (feb-2021) nella versione QGIS 3.18 e ancora non documentate. Ho dovuto studiare le varie QEP e PR per poter capire un po’ il funzionamento, ma è stato molto utile l’aiuto ricevuto in un mio tweet. Sicuramente c’è tanto altro da scoprire, vi terrò aggiornati!!!.


RIFERIMENTI

PROGETTO E DATI DI ESEMPIO

RINGRAZIAMENTI

Rispondi

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

Logo di 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...

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