14.4. Lavorare con la tabella degli attributi
La tabella degli attributi visualizza informazioni sugli oggetti di un layer selezionato. Ogni riga nella tabella rappresenta un oggetto (con geometria o meno) e ogni colonna contiene una particolare informazione sull’oggetto. Gli oggetti nella tabella possono essere cercati, selezionati, spostati o anche modificati.
14.4.1. Premessa: Tabelle spaziali e non spaziali
QGIS ti consente di caricare layer spaziali e non spaziali. Attualmente sono incluse tabelle supportate da OGR e a testo delimitato, nonché sorgenti PostgreSQL, MSSQL, SpatiaLite, DB2 e Oracle. Tutti i layer caricati sono elencati nel pannello Layer. Se un layer è abilitato spazialmente o meno determina se è possibile interagire con esso sulla mappa.
Le tabelle non spaziali possono essere visualizzate e modificate utilizzando la vista tabella degli attributi. Inoltre, possono essere utilizzate per ricerche sul campo. Ad esempio, puoi utilizzare le colonne di una tabella non spaziale per definire i valori degli attributi, o un intervallo di valori che possono essere aggiunti a uno specifico layer vettoriale durante la digitalizzazione. Dai un’occhiata più da vicino al widget di modifica nella sezione Proprietà Modulo Attributi per saperne di più.
14.4.2. Introduzione all’interfaccia della tabella degli attributi
Per aprire la tabella degli attributi di un layer vettoriale, attiva il layer cliccandoci sopra in Pannello dei Layer. Poi, dal menu principale , scegli . E” anche possibile cliccare con il tasto destro del mouse sul layer e scegliere dal menu a discesa, oppure cliccare sul pulsante Apri tabella attributi nella barra degli strumenti Attributi. Se preferisci le scorciatoie, F6 aprirà la tabella degli attributi. Shift+F6 aprirà la tabella degli attributi filtrata per le geometrie selezionate e Ctrl+F6 aprirà la tabella degli attributi filtrata per le geometrie visibili.
Si aprirà una nuova finestra che mostra gli attributi delle geometrie del layer (figure_attributes_table). In base all’impostazione in , la tabella degli attributi si aprirà in una finestra agganciata o in una finestra normale. Il numero totale di geometrie nel layer e il numero di geometrie attualmente selezionate/filtrate sono mostrati nel titolo della tabella degli attributi anche se il layer è spazialmente limitato.
I pulsanti nella parte superiore della finestra della tabella degli attributi forniscono le seguenti funzionalità:
Icona |
Etichetta |
Azione |
Scorciatoie da tastiera |
---|---|---|---|
Attivare/disattivare modalità modifica |
Attivare modalità modifica |
Ctrl+E |
|
Attivare modalità modifica multipla |
Aggiornare più campi di molte geometrie |
||
Salva modifiche |
Salva le modifiche in corso |
||
Ricarica la tabella |
|||
Aggiungi elemento |
Aggiungi un nuovo oggetto senza geometria |
||
Elimina elementi selezionati |
Rimuovi gli elementi elementi selezionati dal layer |
||
Taglia gli elementi selezionati nel blocco appunti |
Ctrl+X |
||
Copia gli elementi selezionati nel blocco appunti |
Ctrl+C |
||
Incolla elementi dagli appunti |
Inserisci nuovi elementi da quelli copiati |
Ctrl+V |
|
Seleziona elementi usando una Espressione |
|||
Seleziona Tutto |
Seleziona tutte gli elementi del layer |
Ctrl+A |
|
Inverti la selezione |
Inverti la selezione corrente del layer |
Ctrl+R |
|
Deseleziona tutto |
Deseleziona tutti gli elementi del layer corrente |
Ctrl+Shift+A |
|
Filtra/Seleziona elementi usando un modulo |
Ctrl+F |
||
Sposta la selezione in cima |
Sposta le righe selezionate in cima alla tabella |
||
Spostare mappa alle righe selezionate |
Ctrl+P |
||
Zoom mappa alle righe selezionate |
Ctrl+J |
||
Nuovo campo |
Aggiungi un nuovo campo ai dati originari |
Ctrl+W |
|
Elimina campo |
Rimuovi un campo dall’origine dati |
||
Apri calcolatore campi |
Aggiornare il campo per molti elementi in una riga |
Ctrl+I |
|
Formattazione condizionale |
Abilitare formattazione tabella |
||
Aggancia Tabella degli Attributi |
Permette di agganciare/sganciare la tabella degli attributi |
||
Azioni |
Elenca le azioni relative al layer |
Nota
A seconda del formato dei dati e della libreria OGR creata con la versione di QGIS, alcuni strumenti potrebbero non essere disponibili.
Sotto questi pulsanti c’è la barra di Calcolo Rapido Campo (abilitata solo in modalità modifica), che ti consente di applicare rapidamente filtri e calcoli a tutti o parte degli elementi nel vettore. Per i calcoli usa le stesse expressions del Calcolatore di campi (vedi Modifica dei valori nella tabella degli attributi).
14.4.2.1. Visualizzazione Tabella e Visualizzazione Modulo
QGIS fornisce due modi di visualizzazione per manipolare facilmente i dati nella tabella degli attributi:
La Vista tabella, visualizza i valori di più geometrie in modalità tabellare, ogni riga rappresenta una geometria e ogni colonna un campo.
La Vista modulo mostra feature identifiers in un primo pannello e mostra solo gli attributi dell’elemento cliccato nel secondo. C’è un menu a tendina in cima al primo pannello dove l“«identificazioni» può essere specificata usando un attributo (Anteprima colonna) o una Espressione. Il pull-down include anche le ultime 10 espressioni per il riutilizzo. La vista modulo usa la configurazione dei campi del layer (vedi Proprietà Modulo Attributi). Puoi sfogliare gli identificazione degli elementi con le frecce sul fondo del primo pannello. Una volta che hai evidenziato l’elemento in giallo nella lista, esso è selezionata in giallo sulla mappa. Usa lo in cima alla tabella degli attributi per zoomare sull’elemento. Cliccando su una voce della lista (senza usare i quadratini) l’elemento lampeggia in rosso una volta in modo da poter vedere dove si trova.
Puoi passare da una modalità all’altra cliccando sull’apposita icona in basso a destra della finestra di dialogo.
Puoi anche specificare la modalità di Vista predefinita all’apertura della tabella degli attributi nel menu . Può essere “Ricorda ultima vista”, “Vista tabella” o “Vista modulo”.
14.4.2.2. Configurare le colonne
Fai clic con il pulsante destro del mouse in un’intestazione di colonna quando sei in visualizzazione tabella per accedere agli strumenti che ti consentono di definire ciò che può essere visualizzato e come nella tabella degli attributi.
Nascondere e organizzare colonne e attivare azioni
Facendo clic con il pulsante destro del mouse in un’intestazione di colonna, puoi scegliere di nasconderla dalla tabella degli attributi. Per modificare contemporaneamente il comportamento di più colonne, mostrare una colonna o cambiare l’ordine delle colonne, scegli Organizza colonne …. Nella nuova finestra di dialogo puoi:
selezionare/deselezionare le colonne da visualizzare o nascondere
trascinare e rilasciare gli oggetti per riordinare le colonne nella tabella degli attributi. Si noti che questa modifica riguarda la visualizzazione della tabella e non modifica l’ordine dei campi nell’origine dati del layer
abilitare una nuova colonna virtuale Azioni che visualizza in ciascuna riga una casella a discesa o un elenco di pulsanti di azioni per ciascuna riga, per ulteriori informazioni sulle azioni, vedi Proprietà Azioni.
Cambiare la larghezza delle colonne
La larghezza delle colonne può essere impostata tramite un clic destro sull’intestazione della colonna e selezionare:
Imposta larghezza… per immettere il valore desiderato. Per impostazione predefinita, il valore corrente viene visualizzato nel widget
Autodimensiona per ridimensionare al meglio la colonna.
Può essere modificata anche trascinando il limite a destra della colonna con il mouse tenendo premuto il tasto sinistro. La nuova dimensione della colonna viene mantenuta per il layer e viene ripristinata all’apertura successiva della tabella degli attributi.
Ordinare le colonne
La tabella può essere ordinata su qualsiasi colonna, facendo clic sull’intestazione della colonna. Una piccola freccia indica l’ordine di ordinamento (verso il basso significa far scendere i valori dalla riga superiore in basso, verso l’alto significa far salire i valori dalla riga superiore in basso). Puoi anche ordinare le righe con l’opzione di ordinamento del menu contestuale dell’intestazione di colonna e scrivere un’espressione, ad esempio per ordinare la riga con più colonne puoi scrivere concat(col0, col1)
.
Nella visualizzazione modulo, l’identificatore degli elementi può essere ordinato utilizzando l’opzione Ordina tramite anteprima espressione.
Suggerimento
Ordinamento in base a colonne di diversa tipologia
Il tentativo di ordinare una tabella degli attributi in base a colonne di stringhe e a tipi numerici può portare a risultati inaspettati a causa dell’espressione concat("USE", "ID")
che restituisce i valori delle stringhe (cioè, 'Borough105' < 'Borough6'
). Puoi aggirare questo problema usando ad esempio ("USE", lpad("ID", 3, 0))
che restituisce 'Borough105' > 'Borough006'
.
14.4.2.3. Formattazione delle celle della tabella utilizzando condizioni
Le impostazioni di formattazione condizionale possono essere utilizzate per evidenziare le geometrie della tabella degli attributi che in particolare vuoi mettere a fuoco, utilizzando condizioni specifiche per le geometrie:
geometria (ad esempio, identificazione delle geometrie multi-parti, piccole aree o in una estensione limitata della mappa …);
o valore del campo (ad esempio, confrontando i valori con una soglia, identificando le celle vuote …)
Puoi abilitare il pannello di formattazione condizionale cliccando su in alto a destra nella finestra attributi in visualizzazione tabella (non disponibile in visualizzazione modulo).
Il nuovo pannello consente all’utente di aggiungere nuove regole per modificare la visualizzazione del Campo o Riga intera. L’aggiunta di una nuova regola apre un modulo per definire:
il nome della regola;
una condizione che utilizza una qualsiasi delle funzioni del expression builder
la formattazione: può essere scelta da un elenco di formati predefiniti o creata in base a proprietà come:
colori di sfondo e testo;
uso dell’icona;
grassetto, corsivo, sottolineato o testo barrato;
carattere.
14.4.3. Interagire con gli elementi nella tabella degli attributi
14.4.3.1. Selezionare elementi
Nella vista tabella, ogni riga nella tabella degli attributi visualizza gli attributi di una specifica geometria nel layer. Selezionando una sola riga si seleziona una geometria e allo stesso modo, selezionando una geometria nella mappa (in caso di geometria del layer attivato), viene selezionata la corrispondente riga nella tabella degli attributi. Se viene modificato un insieme di geometrie selezionate nella mappa (o nella tabella degli attributi), la selezione viene aggiornata anche nella tabella degli attributi (o nella visualizzazione della mappa).
Le righe possono essere selezionate facendo clic sul numero di riga sul lato sinistro della riga. È possibile contrassegnare più righe tenendo premuto il tasto Ctrl. Una selezione continua può essere effettuata tenendo premuto il tasto Shift e facendo click su più intestazioni di riga sul lato sinistro delle righe. Sono selezionate tutte le righe tra la posizione corrente del cursore e la riga cliccata. Spostando la posizione del cursore nella tabella degli attributi, facendo clic su una cella nella tabella, non cambia la selezione di riga. Cambiare la selezione nella finestra principale non sposta la posizione del cursore nella tabella degli attributi
Nella impostazione visualizzazione della tabella degli attributi, le geometrie vengono identificate per default nel pannello di sinistra per il valore del loro campo visualizzato (vedere Proprietà Suggerimenti). Questo identificatore può essere sostituito utilizzando l’elenco a discesa nella parte superiore del pannello, selezionando un campo esistente o utilizzando un’espressione personalizzata. Puoi inoltre scegliere di ordinare l’elenco delle geometrie dal menu a discesa.
Fai clic su un valore nel pannello di sinistra per visualizzare gli attributi della geometria nella destra. Per selezionare una geometria, devi fare click all’interno del simbolo quadrato a sinistra dell’identificatore. Per impostazione predefinita, il simbolo diventa giallo. Come nella visualizzazione tabella, puoi eseguire la selezione di più geometrie utilizzando le combinazioni di tasti precedentemente esposte.
Oltre a selezionare le geometrie con il mouse, è possibile eseguire la selezione automatica in base all’attributo della geometria utilizzando gli strumenti disponibili nella barra degli strumenti della tabella degli attributi, ad esempio (vedi la sezione Selezione automatica e la successiva per ulteriori informazioni e casi d’uso):
È anche possibile selezionare gli elementi utilizzando Filtrare e selezionare elementi usando moduli.
14.4.3.2. Filtrare elementi
Una volta che hai selezionato le geometrie nella tabella degli attributi, potresti voler visualizzare solo questi record nella tabella. Questo può essere fatto facilmente utilizzando la voce Mostra gli elementi selezionati dall’elenco a discesa in basso a sinistra della finestra di dialogo della tabella degli attributi. Questa lista offre i seguenti filtri:
Mostra tutti gli elementi
Mostra Elementi Selezionati
Mostra Elementi visibili nella mappa
Mostra Elementi Modificati e Nuovi
Filtro campo: consente all’utente di eseguire il filtro in base al valore di un campo: scegliere una colonna da un elenco, digitare un valore e premere Enter per filtrare. Quindi, nella tabella degli attributi vengono visualizzati solo gli elementi corrispondenti.
Filtro avanzato (Espressione) - Apre la finestra di dialogo del costruttore di espressioni. Al suo interno, puoi creare complex expressions per selezionare righe nella tabella. Ad esempio, puoi filtrare elementi della tabella utilizzando più di un campo. Quando viene applicato, l’espressione del filtro apparirà in fondo al modulo.
E” anche possibile filter features using forms.
Nota
Filtrare records fuori dalla tabella degli attributi non consente di eliminare gli elementi dal layer; essi sono semplicemente momentaneamente nascosti dalla tabella e si possono selezionare sulla mappa ovvero si può rimuovere il filtro. Per filtri che nascondono gli elementi dal layer, utilizzare il Query Builder.
Suggerimento
Aggiornare il filtraggio della sorgente dati con Mostra gli elementi visibili nella mappa
Quando per motivi di prestazione, gli elementi visualizzati nella tabella degli attributi sono limitati nella visualizzazione mappa alla sua apertura (vedi Data Source Options per come fare), selezionando Mostra gli elementi visibili nella mappa su una nuova estensione di visibilità della mappa si aggiorna la precedente restrizione spaziale.
14.4.3.3. Filtrare e selezionare elementi usando moduli
Facendo clic su Seleziona/filtra usando un modulo o premendo Ctrl+F la finestra di dialogo della tabella degli attributi passerà alla visualizzazione modulo e tutti i widget verranno sostituiti con le sue opzioni di ricerca.
Da questo punto in poi, questa funzionalità dello strumento è simile a quella descritta in Seleziona Elementi per Valore, dove si trovano le descrizioni di tutti gli operatori e le modalità di selezione.
Quando si selezionano/filtrano le geometrie dalla tabella degli attributi, c’è un pulsante Seleziona/Filtra elementi usando un modulo (Ctrl+F) ` che permette di definire e rifinire i filtri. Il suo utilizzo attiva l’opzione :guilabel:`Filtro avanzato (Espressione) e visualizza la corrispondente espressione del filtro in un widget di testo modificabile nella parte inferiore del modulo.
Se ci sono elementi già selezionati, puoi reimpostare il filtro usando l’elenco a discesa accanto al pulsante in basso a destra Filtra elementi. Le opzioni sono:
Filtra Entro («AND»)
Estendi Filtro («OR»)
Per cancellare il filtro seleziona l’opzione Seleziona tutto dal menu a discesa in basso a sinistra, oppure cancella l’espressione e fai clic su Applica oppure premi Invio.
14.4.4. Usare le azioni sugli elementi
Gli utenti hanno diverse possibilità di manipolare elementi con il menu contestuale come:
Seleziona Tutto (Ctrl+A) selezionare tutti gli elementi;
Copiare il contenuto di una cella negli appunti con Copia Contenuto Cella;
Zoom alla Geometria senza doverlo selezionare in anticipo;
Sposta alla Geometria senza doverla selezionare in anticipo;
Lampeggia Geometria, per evidenziarla sulla mappa;
Apri Modulo…: attiva la tabella degli attributi nella vista modulo con un focus sulla geometria cliccata.
Se vuoi utilizzare i dati degli attributi in programmi esterni (ad esempio Excel, LibreOffice, QGIS o un’applicazione Web personalizzata), seleziona una o più righe e utilizza il pulsante Copia le righe selezionate negli appunti o premi Ctrl+C.
Nel menu Copia elementi come:
, puoi definire il formato da incollare con le opzioni inTesto normale, nessuna geometria,
Testo normale, geometria WKT,
GeoJSON
Puoi anche visualizzare un elenco di azioni in questo menu contestuale. Questa opzione è attivata nella scheda Proprietà Azioni per ulteriori informazioni sulle azioni.
. Vedi14.4.4.1. Salvare le geometrie selezionate come nuovo layer
Le geometrie selezionate possono essere salvate in qualsiasi formato vettoriale supportato da OGR e anche trasformate in un altro sistema di riferimento di coordinate (SR). Nel menu contestuale del layer, dal Panello Layer, fai clic su per definire il nome del file di output, il formato e il SR (vedi la sezione Creare nuovi layer da layer esistente). Per salvare la selezione, assicurati che sia selezionata l’opzione . È anche possibile specificare le opzioni di creazione OGR all’interno della finestra di dialogo.
14.4.5. Modifica dei valori nella tabella degli attributi
La modifica dei valori degli attributi può essere eseguita:
digitando il nuovo valore direttamente nella cella, se la tabella degli attributi è in visualizzazione tabella o modulo. Le modifiche vengono quindi effettuate per cella, elemento per elemento;
utilizzando il field calculator: aggiorna in una riga un campo che può già esistere o essere creato ma per geometrie multiple Può essere utilizzato per creare campi virtuali.
utilizzando la modalità calculation bar: come sopra, ma solo per il campo esistente;
o utilizzando la modalità multi edit: aggiorna in una riga più campi per più geometrie
14.4.5.1. Usare il Calcolatore di campo
Il pulsante Apri calcolatore di campi nella tabella degli attributi ti consente di eseguire calcoli sulla base dei valori di attributi esistenti o di funzioni definite, per esempio, per calcolare la lunghezza o l’area di elementi geometrici. I risultati possono essere usati per aggiornare un campo esistente, o scritti in un nuovo campo (che può essere un campo virtual).
Il calcolatore di campi è disponibile su qualsiasi layer che supporta la modifica. Quando fai clic sull’icona del calcolatore di campi si apre la finestra di dialogo (vedi Fig. 14.73). Se il layer non è in modalità di modifica, viene mostrato un avvertimento e l’uso del calcolatore di campi causerà la messa in modalità di modifica del layer prima che il calcolo venga effettuato.
La finestra di dialogo Expression Builder offre un’interfaccia completa per definire un’espressione e applicarla a un campo esistente o appena creato. Per utilizzare la finestra di dialogo del calcolatore di campo, devi scegliere se vuoi:
applica il calcolo su tutto il layer o solo sulle geometrie selezionate
crea un nuovo campo per il calcolo o aggiorna un campo esistente.
Se scegli di aggiungere un nuovo campo, devi immettere un nome campo, un tipo di campo (intero, reale, data o stringa) e, se necessario, la lunghezza totale del campo e la precisione del campo. Ad esempio, se scegli una lunghezza del campo di 10 e una precisione del campo di 3, significa che hai 6 cifre prima del punto, poi il punto e altre 3 cifre per la precisione.
Un breve esempio illustra come funziona il calcolatore di campo quando si utilizza la scheda Espressione. Vogliamo calcolare la lunghezza in km del layer railroads
dal dataset di esempio di QGIS:
Carica lo shapefile
railroads.shp
in QGIS e premi Apri tabella attributi.Fai clic su Attiva modifiche e apri la finestra di dialogo Calcolatore di campi.
Seleziona la casella di controllo Crea un nuovo campo per salvare i calcoli in un nuovo campo.
Imposta Nome campo in uscita a
length_km
.Seleziona
Numero decinale (real)
come Tipo campo in uscitaImposta la Lunghezza campo in uscita a
10
e la Precisione a3
Fai doppio clic su
$lenght
nel gruppo Geometria per aggiungere la lunghezza della geometria nella casella di espressione del calcolatore di campo.Completa l’espressione digitando
/ 1000
nella casella Espressione del Calcolatore campo e fai click su OK.Puoi ora trovare un nuovo campo length_km nella tabella degli attributi.
14.4.5.2. Creare un Campo Virtuale
Un campo virtuale è un campo basato su un’espressione calcolata on the fly, il che significa che il suo valore viene aggiornato automaticamente non appena il parametro sottostante cambia. L’espressione viene impostata una sola volta; non è più necessario ricalcolare il campo ogni volta che i valori sottostanti cambiano. Ad esempio, puoi utilizzare un campo virtuale se vuoi che un’area venga valutata quando si digitalizzano poligoni ovvero calcolare automaticamente una durata tra date che possono cambiare (ad esempio, utilizzando la funzione now ()
).
Nota
Uso dei Campi Virtuali
I campi virtuali non sono permanenti negli attributi del layer, nel senso che sono solo salvati e disponibili nei file di progetto dove sono stati creati.
Un campo può essere impostato virtuale solo al momento della sua creazione. I campi virtuali sono evidenziati con uno sfondo viola nella scheda campi della finestra di dialogo delle proprietà del layer per distinguerli dai normali campi fisici o uniti. La loro espressione può essere modificata in seguito premendo il pulsante di espressione nella colonna Commento. Una finestra di editor di espressioni verrà aperta per modificare l’espressione del campo virtuale.
14.4.5.3. La barra di calcolo campo rapido
Mentre il calcolatore di campo è sempre disponibile, la barra di calcolo campo rapido in cima alla tabella di attributo è visibile solo se il layer è in modalità di modifica. Grazie al motore calcolatore tramite espressione, offre un accesso più rapido per modificare un campo già esistente.
14.4.5.4. Modifica multipla di campi
A differenza degli strumenti precedenti, la modalità modifica multipla consente di modificare più attributi di diversi elementi simultaneamente. Quando il layer viene impostato in modifica, sono disponibili strumenti di modifica multipla:
utilizzando il pulsante Attiva modalità modifica multipla nella barra degli strumenti all’interno della finestra di dialogo della tabella degli attributi,
Nota
A differenza dello strumento dalla tabella degli attributi, premendo l’opzione
viene fornita una finestra di dialogo per definire le modifiche degli attributi. Di conseguenza, è necessario selezionare le geometrie prima dell’esecuzione.Per modificare più campi di una riga:
Seleziona le geometrie che vuoi modificare.
Dalla barra degli strumenti della tabella degli attributi, fai click sul pulsante . In questo modo, la finestra di dialogo viene visualizzata nella sua maschera. La selezione delle geometrie potrebbe essere effettuata anche in questo punto.
Al lato destro della tabella degli attributi vengono visualizzati i campi (e i valori) delle geometrie selezionate. Nuovi widget appaiono accanto a ciascun campo che consentono di visualizzare lo stato di modifica multipla corrente:
il campo contiene valori diversi per le geometrie selezionate. Viene visualizzato vuoto e ogni geometria conserverà il suo valore originale. Puoi ripristinare il valore del campo dall’elenco a discesa del widget.
tutte le geometrie selezionate hanno lo stesso valore per questo campo e il valore visualizzato nel modulo verrà mantenuto.
il campo è stato modificato e il valore inserito verrà applicato a tutte le geometrie selezionate. Viene visualizzato un messaggio nella parte superiore della finestra di dialogo, invitandoti a applicare o annullare la modifica.
Facendo clic su uno di questi widget puoi o impostare il valore corrente per il campo o ripristinare il valore originale, il che significa che puoi ripristinare le modifiche campo per campo.
Apporta le modifiche ai campi desiderati.
Fai clic su Applica modifiche nel messaggio testuale superiore o a qualsiasi geometria del pannello di sinistra.
Le modifiche verranno applicate a tutte le geometrie selezionate. Se non è selezionata alcuna geometria, l’intera tabella viene aggiornata con le tue modifiche. Le modifiche vengono eseguite come un singolo comando di modifica. Quindi, premendo Annulla vengono ripristinate contemporaneamente le modifiche degli attributi per tutte le geometrie selezionate.
Nota
La modalità di modifica multipla è disponibile solo per i moduli generati automaticamente o personalizzati drag and drop (vedi Personalizzare un modulo per i tuoi dati); non è supportato da moduli personalizzati UI.
14.4.6. Creare una relazione uno a molti o molti a molti
Le relazioni sono una tecnica utilizzata spesso nelle banche dati. Il concetto è che le geometrie (righe) di layer diversi (tabelle) possono appartenersi a vicenda.
14.4.6.1. Introduzione alle relazioni 1-N
Come esempio hai un layer con tutte le regioni dell’Alaska (poligono) con alcuni attributi sul suo nome e il tipo regione e un ID univoco (che funge da chiave primaria).
Poi hai caricato un altro layer di punti o una tabella con informazioni sugli aeroporti che si trovano nelle regioni e desideri anche tenere traccia di questi. Se vuoi aggiungerli al layer regioni, devi creare rapporti uno a molti utilizzando chiavi esterne, in quanto in molte regioni esistono più aeroporti.
Layer in relazione 1-N
QGIS non fa differenza tra una tabella e un layer vettoriale. Fondamentalmente, un layer vettoriale è una tabella con una geometria. Quindi puoi aggiungere la tua tabella come un layer vettoriale. Per mostrare la relazione 1-n, puoi caricare lo shapefile airports
e lo shapefile airports
che contiene un campo chiave esterna (fk_region
) al layer regions. Ciò significa che ogni aeroporto appartiene esattamente ad una regione, mentre ogni regione può avere un certo numero di aeroporti (una tipica relazione uno a molti).
Chiavi esterne nelle relazioni 1-N
Oltre agli attributi già esistenti nella tabella degli attributi degli aeroporti, avrai bisogno di un altro campo fk_region
che funge da chiave esterna (se hai un database, probabilmente vorrai definire un vincolo su di esso).
Questo campo fk_region conterrà sempre un id di una regione. Può essere visto come un puntatore alla regione a cui appartiene. E si può progettare un modulo di modifica personalizzato per l’editing e QGIS si fa carico della sua definizione. Funziona con diverse fonti dati (quindi puoi anche usarlo con shapefile e csv) e tutto quello che devi fare è definire in QGIS le relazioni tra le tue tabelle.
Definire relazioni 1-N
La prima cosa da fare è far definire in QGIS le relazioni tra i livelli. Questo lo puoi fare con Relazioni e fai clic su Aggiungi relazione.
. Apri la schedaNome sarà il titolo. Dovrebbe essere un testo comprensibile, che indica a cosa serve la relazione. In questo caso nominala semplicemente airport_relation.
Layer di riferimento (genitore) considerato anche come layer genitore, è quello con la chiave primaria, quindi qui è il layer
regions
. Devi definire la chiave primaria del layer di riferimento, ch in questo caso èID
.Il layer referente, considerato come layer figlio è quello con il campo chiave che punta sul layer padre. In questo caso il layer
airports
e dovrai aggiungere un campo di referimento chiamatofk_region
.Nota
A volte, è necessario più di un singolo campo per identificare in modo univoco gli elementi in un livello. La creazione di una relazione con un tale layer richiede una chiave composta, cioè più di una singola coppia di campi corrispondenti. Usa il pulsante Aggiungi una nuova coppia di campi come parte di una chiave esterna composta per aggiungere tutte le coppie necessarie.
id sarà utilizzato per scopi interni e deve essere univoco. Ti potrebbe essere necessario per creare custom forms. Se lo lasci vuoto, verrà generato automaticamente per te, ma puoi assegnare un nome per avere una più chiara modalità di gestione.
Forza della relazione definisce la forza della relazione tra il layer genitore e il layer figlio. Il tipo di default Association significa che il layer genitore è semplicemente collegato a quello del figlio mentre il tipo Composition permette di duplicare anche le caratteristiche del figlio quando si duplicano quelle del genitore.
Dalla scheda Relazioni, puoi anche premere il pulsante Scopri Relazioni per recuperare le relazioni disponibili dai provider dei layer caricati. Questo è possibile per i layer memorizzati in provider di dati come PostgreSQL o SpatiaLite.
Moduli per relazioni 1-N
Ora che QGIS sa la relazione, sarà usato per migliorare il modulo che genera. Poiché non abbiamo modificato il modulo predefinito (autogenerato) aggiungerà semplicemente un nuovo widget nel nostro modulo. Quindi, selezioniamo la regione del layer nella legenda e utilizziamo lo strumento di identificazione. A seconda delle impostazioni, il modulo si potrebbe aprire direttamente o dovrai scegliere di aprirlo nella finestra di dialogo di identificazione in azioni.
Come puoi vedere, gli aeroporti assegnati a questa particolare regione vengono tutti mostrati in una tabella. E ci sono anche alcuni pulsanti disponibili. Guardiamoli brevemente
Il pulsante serve per attivare la modalità di modifica. Tieni presente che imposta la modalità di modifica per il layer airports, anche se siamo nel modulo di un elemento del layer regions. Ma la tabella rappresenta le geometrie del layer airports.
Il pulsante aggiungerà un nuovo record alla tabella degli attributi del layer degli aeroporti. E assegnerà il nuovo aeroporto alla regione corrente per impostazione predefinita.
Il è lo stesso di ma ti permette di digitalizzare prima la geometria dell’aeroporto nella mappa. Nota che l’icona cambia a seconda del tipo di geometria.
Il pulsante ti permette di copiare una o più geometrie figlie.
Il pulsante eliminerà definitivamente l’aeroporto selezionato.
Il simbolo aprirà una nuova finestra di dialogo in cui è possibile selezionare qualsiasi aeroporto esistente che verrà assegnato alla regione corrente. Questo può essere utile se si è creato accidentalmente l’aeroporto sulla regione sbagliata.
Il simbolo scollegherà gli aeroporti selezionati dalla regione corrente, lasciandoli non assegnati (la chiave esterna viene impostata su NULL).
Con il pulsante puoi ingrandire la mappa sulla geometria figlia selezionata.
I due pulsanti e a destra ti consentono di passare dalla visualizzazione tabellare alla visualizzazione modulo, dove poi puoi visualizzare tutti gli aeroporti nel loro rispettivo modulo.
Nell’esempio precedente il layer ha delle geometrie (quindi non è solo una tabella alfanumerica) quindi i passi precedenti creeranno una voce nella tabella degli attributi del layer che non ha alcuna caratteristica geometrica corrispondente. Per aggiungere la geometria:
Seleziona il record che è stato aggiunto in precedenza all’interno del modulo per la geometria del layer selezionato.
Utilizza lo strumento di digitalizzazione Add Part per collegare una geometria al record della tabella degli attributi selezionata.
Se lavori sulla tabella dell’aeroporto, il widget Relation Reference viene automaticamente impostato per il campo fk_region
(quello usato per creare la relazione), vedi Relation Reference widget.
Nel modulo aeroporto vedrai il pulsante sul lato destro del campo fk_region
: se clicchi sul pulsante si aprirà il modulo del layer regione. Questo widget ti permette di aprire facilmente e rapidamente i moduli delle geometrie padri collegate.
Il widget Relation Reference ha anche un’opzione per incorporare il modulo del layer genitore all’interno di quello figlio. È disponibile nel menu fk_region
e attiva l’opzione Show embedded form
.
Se ora guardi alla finestra di dialogo delle geometrie, vedrai che il modulo della regione è incorporato all’interno del modulo aeroportuale e avrà anche una combinazione di opzioni di scelta, che ti consentono di assegnare l’attuale aeroporto ad un’altra regione.
Inoltre se attivi la modalità di modifica del layer airport, il campo fk_region
ha anche una funzione di autocompletamento: mentre scrivi vedrai tutti i valori del campo id
del layer region. Qui è possibile digitalizzare un poligono per il layer region usando il pulsante se hai scelto l’opzione Consenti l'aggiunta di nuovi elementi
nel menu del layer airport.
Il layer figlio può anche essere usato nello strumento Seleziona Elementi per Valore per selezionare gli elementi del layer padre in base agli attributi dei loro figli.
In Fig. 14.80, vengono selezionate tutte le regioni nelle quali l’altitudine media degli aeroporti è superiore a 500 metri sul livello del mare.
Scoprirai che nel modulo sono disponibili molte funzioni di aggregazione diverse.
14.4.6.2. Introduzione alle relazioni molti-a-molti (N-M)
Le relazioni N-M sono relazioni molti a molti rapporti tra due tabelle. Ad esempio, i layer airports
e airlines
: un aeroporto serve compagnie aeree e una compagnia aerea opera in diversi aeroporti.
Questo codice SQL crea le tre tabelle necessarie per una relazione N-M in uno schema PostgreSQL/PostGIS denominato locations. Puoi eseguire il codice utilizzando pgAdmin. La tabella aeroporti memorizza il layer airports
e la tabella compagnie aeree memorizza il layer airlines
. In entrambe le tabelle per chiarezza vengono usati pochi campi. La parte utile è la tabella airports_airlines`
. Ne abbiamo bisogno per elencare tutte le compagnie aeree per tutti gli aeroporti (o viceversa). Questo tipo di tabella è conosciuta come tabella pivot. Le relazioni in questa tabella costringono a far sì che un aeroporto possa essere associato ad una compagnia aerea solo se entrambi esistono già nei loro layer.
CREATE SCHEMA locations;
CREATE TABLE locations.airports
(
id serial NOT NULL,
geom geometry(Point, 4326) NOT NULL,
airport_name text NOT NULL,
CONSTRAINT airports_pkey PRIMARY KEY (id)
);
CREATE INDEX airports_geom_idx ON locations.airports USING gist (geom);
CREATE TABLE locations.airlines
(
id serial NOT NULL,
geom geometry(Point, 4326) NOT NULL,
airline_name text NOT NULL,
CONSTRAINT airlines_pkey PRIMARY KEY (id)
);
CREATE INDEX airlines_geom_idx ON locations.airlines USING gist (geom);
CREATE TABLE locations.airports_airlines
(
id serial NOT NULL,
airport_fk integer NOT NULL,
airline_fk integer NOT NULL,
CONSTRAINT airports_airlines_pkey PRIMARY KEY (id),
CONSTRAINT airports_airlines_airport_fk_fkey FOREIGN KEY (airport_fk)
REFERENCES locations.airports (id)
ON DELETE CASCADE
ON UPDATE CASCADE
DEFERRABLE INITIALLY DEFERRED,
CONSTRAINT airports_airlines_airline_fk_fkey FOREIGN KEY (airline_fk)
REFERENCES locations.airlines (id)
ON DELETE CASCADE
ON UPDATE CASCADE
DEFERRABLE INITIALLY DEFERRED
);
Al posto di PostgreSQL puoi anche utilizzare GeoPackage. In questo caso, le tre tabelle possono essere create manualmente utilizzando il menu
. In GeoPackage non ci sono schemi, quindi il prefisso localizzazione non è necessario.Chiavi esterne vincolanti nella tabella airports_airlines
non possono essere creati usando o pertanto devono essere creati usando . GeoPackage non supporta le istruzioni ADD CONSTRAINT quindi la tabella airports_airlines
dovrebbe essere creata in due fasi:
Imposta la tabella solo con il campo
id
usando .Usando
, digita ed esegui questo codice SQL:ALTER TABLE airports_airlines ADD COLUMN airport_fk INTEGER REFERENCES airports (id) ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE INITIALLY DEFERRED; ALTER TABLE airports_airlines ADD COLUMN airline_fk INTEGER REFERENCES airlines (id) ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE INITIALLY DEFERRED;
Poi, in QGIS, dovresti impostare due relazioni one-to-many relations come sopra spiegato:
una relazione tra la tabella
airlines
e la tabella pivot;e una seconda tra la tabella
airports
e la tabella pivot.
Un modo più semplice per farlo (solo per PostgreSQL) è quello di utilizzare il comando Scopri relazioni in . QGIS leggerà automaticamente tutte le relazioni nel tuo database e devi solo selezionare le due che ti servono. Ricordati di caricare prima le tre tabelle del progetto QGIS.
Se vuoi rimuovere un airport
o una airline
, QGIS non rimuoverà i record associati nella tabella airports_airlines
. Questo compito sarà fatto dal database se specifichiamo i corretti vincoli nella creazione della tabella pivot come nell’esempio corrente.
Nota
Combinare la relazione N-M con il gruppo di transazioni automatiche
Dovresti abilitare la modalità Crea automaticamente la transizione dei gruppi quando possibile in
se stai lavorando in tale contesto. QGIS dovrebbe essere in grado di aggiungere o aggiornare le righe in tutte le tabelle (compagnie aeree, aeroporti e tabelle pivot).Infine dobbiamo selezionare la cardinalità di destra in airports
e airlines
. Per il primo dovremmo scegliere l’opzione airlines (id) e per il secondo l’opzione airports (id).
Ora puoi associare un aeroporto con una compagnia aerea (o una compagnia aerea con un aeroporto) usando Add child feature o Link existing child feature nei sottomoduli. Un record verrà automaticamente inserito nella tabella airports_airlines
.
Nota
Utilizzo cardinalità Relazione molti ad uno
A volte non è opportuno nascondere la tabella pivot in una relazione N-M. Principalmente perché ci sono attributi nella relazione che possono avere valori solo quando si stabilisce una relazione. Se le tabelle sono layer (hanno un campo geometrico) potrebbe essere interessante attivare l’opzione On map identification opzione ( ) per i campi chiave esterna nella tabella pivot.
Nota
Chiave primaria tabella pivot
Evita di utilizzare più campi nella chiave primaria in una tabella pivot. QGIS accetta una singola chiave primaria, quindi un vincolo come constraint airports_airlines_airlines_pkey primary key (airport_fk, airline_fk)
non funzionerà.