14.3. 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.3.1. Premessa: Tabelle spaziali e non spaziali

QGIS ti consente di caricare layers 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.3.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 Layer, scegli openTable Apri tabella attributi. E” anche possibile cliccare con il tasto destro del mouse sul layer e scegliere openTable Apri tabella attributi dal menu a discesa, oppure cliccare sul pulsante openTable 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 Impostazioni -> Opzioni -> Sorgenti dei dati, 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.

../../../_images/vectorAttributeTable.png

Fig. 14.68 Tabella degli attributi per il layer regions

I pulsanti nella parte superiore della finestra della tabella degli attributi forniscono le seguenti funzionalità:

Tabella 14.1 Strumenti Disponibili

Icona

Etichetta

Azione

Scorciatoie da tastiera

toggleEditing

Attivare/disattivare modalità modifica

Attivare modalità modifica

Ctrl+E

multiEdit

Attivare modalità modifica multipla

Aggiornare più campi di molte geometrie

saveEdits

Salva modifiche

Salva le modifiche in corso

refresh

Ricarica la tabella

newTableRow

Aggiungi elemento

Aggiungi un nuovo oggetto senza geometria

deleteSelectedFeatures

Elimina elementi selezionati

Rimuovi gli elementi elementi selezionati dal layer

editCut

Taglia gli elementi selezionati nel blocco appunti

Ctrl+X

copySelected

Copia gli elementi selezionati nel blocco appunti

Ctrl+C

editPaste

Incolla elementi dagli appunti

Inserisci nuovi elementi da quelli copiati

Ctrl+V

expressionSelect

Seleziona elementi usando una Espressione

selectAll

Seleziona Tutto

Seleziona tutte gli elementi del layer

Ctrl+A

invertSelection

Inverti la selezione

Inverti la selezione corrente del layer

Ctrl+R

deselectAll

Deseleziona tutto

Deseleziona tutti gli elementi del layer corrente

Ctrl+Shift+A

filterMap

Filtra/Seleziona elementi usando un modulo

Ctrl+F

selectedToTop

Sposta la selezione in cima

Sposta le righe selezionate in cima alla tabella

panToSelected

Spostare mappa alle righe selezionate

Ctrl+P

zoomToSelected

Zoom mappa alle righe selezionate

Ctrl+J

newAttribute

Nuovo campo

Aggiungi un nuovo campo ai dati originari

Ctrl+W

deleteAttribute

Elimina campo

Rimuovi un campo dall’origine dati

calculateField

Apri calcolatore campi

Aggiornare il campo per molti elementi in una riga

Ctrl+I

conditionalFormatting

Formattazione condizionale

Abilitare formattazione tabella

dock

Aggancia Tabella degli Attributi

Permette di agganciare/sganciare la tabella degli attributi

actionRun

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 calculateField Calcolatore di campi (vedi Modifica dei valori nella tabella degli attributi).

14.3.2.1. Visualizzazione Tabella e Visualizzazione Modulo

QGIS fornisce due modi di visualizzazione per manipolare facilmente i dati nella tabella degli attributi:

  • La openTable Vista tabella, visualizza i valori di più geometrie in modalità tabellare, ogni riga rappresenta una geometria e ogni colonna un campo.

  • The formView Form view shows feature identifiers in a first panel and displays only the attributes of the clicked identifier in the second one. There is a pull-down menu at the top of the first panel where the «identifier» can be specified using an attribute (Column preview) or an Expression. The pull-down also includes the last 10 expressions for re-use. Form view uses the layer fields configuration (see Proprietà Modulo Attributi). You can browse through the feature identifiers with the arrows on the bottom of the first panel. Once you markered the feature in yellow in the list it is selected in yellow on the canvas. Use the zoomToSelected on top of the attribute table to zoom to the feature. Clicking on an entry in the list (without using the rectangles) makes a feature flash in red color once so you can see where it is situated.

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 Impostazioni ‣ Opzioni ‣ Sorgente dei dati. Può essere “Ricorda ultima vista”, “Vista tabella” o “Vista modulo”.

../../../_images/attribute_table_views.png

Fig. 14.69 Attribute table in table view (top) vs form view (bottom)

14.3.2.2. Configurare le colonne

Fai click 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.

14.3.2.2.1. Nascondere e organizzare colonne e attivare azioni

Facendo click 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.

14.3.2.2.2. Cambiare la larghezza delle colonne

La larghezza delle colonne può essere impostata tramite un click destro sull’intestazione della colonna e selezionare:

  • Imposta larghezza… per immettere il valore desiderato. Per impostazione predefinita, il valore corrente viene visualizzato nel widget

  • DimensioneAuto 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.

14.3.2.2.3. Ordinare le colonne

La tabella può essere ordinata su qualsiasi colonna, facendo click 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 ivalori 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 sort 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.3.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 conditionalFormatting 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 radioButtonOnCampo o radioButtonOffRiga 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.

../../../_images/attribute_table_conditional_formating.png

Fig. 14.70 Formattazione Condizionale di una tabella degli attributi

14.3.3. Interagire con gli elementi nella tabella degli attributi

14.3.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 click 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):

  • expressionSelect Seleziona con Espressione….

  • formSelect Seleziona Elementi per Valore….

  • deselectAll Deseleziona tutto

  • selectAll Seleziona Tutti gli elementi

  • invertSelection Inverti Selezione Elementi.

È anche possibile selezionare gli elementi utilizzando Filtrare e selezionare elementi usando moduli.

14.3.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.3.3.3. Filtrare e selezionare elementi usando moduli

Facendo clic su filterMap 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.

../../../_images/tableFilteredForm.png

Fig. 14.71 Filtro tramite modulo della tabella degli attributi

Quando si selezionano/filtrano le geometrie dalla tabella degli attributi, c’è un pulsante Filtra elementi 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 all’interno («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.3.4. Usare le azioni sugli oggetti

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;

  • Zoomare all’elemento senza doverlo selezionare in anticipo;

  • Spostarsi sulla geometria senza doverla selezionare in anticipo;

  • Flash feature, per evidenziarla sulla mappa;

  • Apri modulo: attiva la tabella degli attributi nella vista modulo con un focus sulla geometria cliccata.

../../../_images/copyCellContent.png

Fig. 14.72 Copiare il contenuto di una cella

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 copySelected Copia le righe selezionate negli appunti o premi Ctrl+C.

Nel menu Impostazioni ‣ Opzioni… ‣ Sorgenti Dati, puoi definire il formato da incollare con le opzioni in Copia geometrie come:

  • Testo 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à vettore ‣ Azioni. Vedi Proprietà Azioni per ulteriori informazioni sulle azioni.

14.3.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 Esporta ‣ Salva con nome… 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 checkbox Salva solo le geometrie selezionate. È anche possibile specificare le opzioni di creazione OGR all’interno della finestra di dialogo.

14.3.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.3.5.1. Usare il Calcolatore di campo

Il pulsante calculateField 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 figure_field_calculator). Se il layer non è in modalità di modifica, viene visualizzato un avviso e l’utilizzo del calcolatore provoca il cambiamento di stato del layer in modalità di modifica prima del calcolo.

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:

  1. applica il calcolo su tutto il layer o solo sulle geometrie selezionate

  2. crea un nuovo campo per il calcolo o aggiorna un campo esistente.

../../../_images/fieldcalculator.png

Fig. 14.73 Calcolatore Campo

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:

  1. Carica lo shapefile railroads.shp in QGIS e premi openTable Apri tabella attributi.

  2. Fai clic su toggleEditing Attiva modifiche e apri la finestra di dialogo calculateField Calcolatore di campi.

  3. Seleziona la casella di controllo Crea un nuovo campo per salvare i calcoli in un nuovo campo.

  4. Imposta Nome campo in uscita a length_km.

  5. Seleziona Numero decinale (real) come Tipo campo in uscita

  6. Imposta la Lunghezza campo in uscita a 10 e la Precisione a 3

  7. Fai doppio clic su $lenght nel gruppo Geometria per aggiungere la lunghezza della geometria nella casella di espressione del calcolatore di campo.

  8. Completa l’espressione digitando / 1000 nella casella Espressione del Calcolatore campo e fai click su OK.

  9. Puoi ora trovare un nuovo campo length_km nella tabella degli attributi.

14.3.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.

  • A field can be set virtual only at its creation. Virtual fields are marked with a purple background in the fields tab of the layer properties dialog to distinguish them from regular physical or joined fields. Their expression can be edited later by pressing the expression button in the Comment column. An expression editor window will be opened to adjust the expression of the virtual field.

14.3.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.

  1. Seleziona il campo presente da aggiornare nell’elenco a discesa.

  2. Compila la casella di testo con un’espressione che direttamente scrivi o crei utilizzando il pulsante espressione expression.

  3. Fai clic sul pulsante Aggiorna tutto, Aggiorna selezione o Aggiornamento filtrato in base alle tue esigenze.

../../../_images/fieldcalculatorbar.png

Fig. 14.74 La barra di calcolo campo rapido

14.3.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 multiEdit Attiva modalità modifica multipla nella barra degli strumenti all’interno della finestra di dialogo della tabella degli attributi,

  • o selezionando il menu Modifica ‣ multiEdit Modifica gli attributi delle geometrie selezionate

Nota

A differenza dello strumento dalla tabella degli attributi, premendo l’opzione Modifica ‣ Modifica gli attributi delle geometrie selezionate 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:

  1. Seleziona le geometrie che vuoi modificare.

  2. Dalla barra degli strumenti della tabella degli attributi, fai click sul pulsante multiEdit. In questo modo, la finestra di dialogo viene visualizzata nella sua maschera. La selezione delle geometrie potrebbe essere effettuata anche in questo punto.

  3. 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:

    • multiEditMixedValues 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.

    • multiEditSameValues tutte le geometrie selezionate hanno lo stesso valore per questo campo e il valore visualizzato nel modulo verrà mantenuto.

    • multiEditChangedValues 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.

    ../../../_images/attribute_multiedit.png

    Fig. 14.75 Modifiche di campi per più geometrie

  4. Apporta le modifiche ai campi desiderati.

  5. 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.3.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.3.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.

../../../_images/relations1.png

Fig. 14.76 Regione dell’Alaska con areoporti

14.3.6.1.1. 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).

14.3.6.1.2. 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.

14.3.6.1.3. Definizione relazioni 1-N (Relation Manager)

La prima cosa che faremo è far sapere a QGIS le relazioni tra i layer. Ciò è fatto in Progetto ‣ Proprietà del progetto…. Apri la scheda: guilabel:Relazioni e fai click su Aggiungi Relazione.

  • Name is going to be used as a title. It should be a human readable string, describing, what the relation is used for. We will just call say airport_relation in this case.

  • Referenced Layer (Parent) also considered as parent layer, is the one with the primary key, pointed to, so here it is the regions layer. You can define the primary key of the referenced layer, so it is ID. For this layer you can define multiple referenced fields by using the signPlus button.

  • Referencing Layer (Child) also considered as child layer, is the one with the foreign key field on it. In our case, this is the airports layer. For this layer you need to add a referencing field which points to the other layer, so this is fk_region. When using multiple field relations you can add another referencing field by using the signPlus button.

  • 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.

../../../_images/relations2.png

Fig. 14.77 Gestore delle relazioni

14.3.6.1.4. 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.

../../../_images/relations3.png

Fig. 14.78 Finestra di dialogo identificazione relazione regioni con aeroporti

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 toggleEditing 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 saveEdits serve per salvare tutte le modifiche.

  • Il pulsante newTableRow aggiungerà un nuovo record alla tabella degli attributi del layer degli aeroporti. E assegnerà il nuovo aeroporto alla regione corrente per impostazione predefinita.

  • Il pulsante duplicateFeature ti permette di copiare una o più geometrie figlie.

  • Il pulsante deleteSelectedFeatures eliminerà definitivamente l’aeroporto selezionato.

  • Il simbolo link 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 unlink scollegherà gli aeroporti selezionati dalla regione corrente, lasciandoli non assegnati (la chiave esterna viene impostata su NULL).

  • Con il pulsante zoomToSelected puoi ingrandire la mappa sulla geometria figlia selezionata.

  • I due pulsanti formView e openTable 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:

  1. Scegli openTable Apri tabella attributi per il layer.

  2. Seleziona il record che è stato aggiunto in precedenza all’interno del modulo per la geometria del layer selezionato.

  3. Utilizza lo strumento di digitalizzazione addPart 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 formView 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.

../../../_images/relations4.png

Fig. 14.79 Finestra di dialogo identificazione aeroporti in relazione con regioni

Il widget Relation Reference ha anche un’opzione per incorporare il modulo del layer genitore all’interno di quello figlio. È disponibile nel menu Properties ‣ Attributes Form del layer airport: seleziona il campo 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.

../../../_images/relations5.png

Moreover if you toggle the editing mode of the airport layer, the fk_region field has also an autocompleter function: while typing you will see all the values of the id field of the region layer. Here it is possible to digitize a polygon for the region layer using the signPlus button if you chose the option Allow adding new features in the Properties ‣ Attributes Form menu of the airport layer.

The child layer can also be used in the Seleziona Elementi per Valore… tool in order to select features of the parent layer based on attributes of their children.

In Fig. 14.81, all the regions where the mean altitude of the airports is greater than 500 meters above sea level are selected.

You will find that many different aggregation functions are available in the form.

../../../_images/relation_select_by_value.png

Fig. 14.81 Select parent features with child values

14.3.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 Database ‣ DB Manager…. per PostGIS o strumenti esterni come 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 Database ‣ DB Manager…. In GeoPackage non ci sono schemi, quindi il prefisso localizzazione non è necessario.

Chiavi esterne vincolanti nella tabella airports_airlines non possono essere creati usando Table ‣ Create Table…. o Table ‣ Edit Table…. pertanto devono essere creati usando Database ‣ SQL Window….. GeoPackage non supporta le istruzioni ADD CONSTRAINT quindi la tabella airports_airlines dovrebbe essere creata in due fasi:

  1. Imposta la tabella solo con il campo id usando Table ‣ Create Table…..

  2. Usando Database ‣ Finestra SQL…., 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 Progetto ‣ Proprietà ‣ Relazioni. 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.

../../../_images/relations6.png

Fig. 14.82 Relazioni e automatismi

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 Project Proprietà ‣ Sorgente dei dati ‣ 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 Layer Properties ‣ Attributes Form per i layer airports e airlines. Per il primo dovremmo scegliere l’opzione airlines (id) e per il secondo l’opzione airports (id).

../../../_images/relations7.png

Fig. 14.83 Impostare il rapporto di cardinalità

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.

../../../_images/relations8.png

Fig. 14.84 Relazioni N-M tra aeroporti e linee aeree

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 (Layer Properties ‣ Attributes Form ‣ Available widgets ‣ Fields) 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à.