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

16.2.1. Premessa: Tabelle spaziali e non spaziali

QGIS ti permette di caricare layer spaziali e non spaziali. Attualmente include tabelle supportate da GDAL e testo delimitato, nonché i provider PostgreSQL, MS SQL Server, SpatiaLite e Oracle. Tutti i layer caricati sono elencati nel pannello Layer. L’abilitazione spaziale o meno di un layer determina la possibilità di 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ù.

16.2.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 ► Sorgente 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. 16.67 Tabella degli attributi per il layer regions

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

Tabella 16.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

deselectActiveLayer

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

editTable

Organizzare le colonne

Mostrare/nascondere i campi della tabella degli attributi

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 GDAL integrata nella versione di QGIS in uso, 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).

La tabella degli attributi supporta lo scorrimento Shift+Mouse Wheel nella tabella degli attributi per passare a un’azione di scorrimento orizzontale anziché verticale.

16.2.2.1. Visualizzazione Tabella e Visualizzazione Modulo

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

  • L’opzione openTable Passa alla vista della tabella, visualizza i valori di più elementi in modo tabellare, ogni riga rappresenta un elemento e ogni colonna un campo. Facendo clic con il tasto destro del mouse sull’intestazione della colonna è possibile configure the table display, mentre facendo clic con il tasto destro del mouse su una cella è possibile interaction with the feature.

  • formView Passa alla vista modulo mostra feature identifiers 1 in un primo pannello e visualizza solo gli attributi dell’identificatore cliccato nel secondo. Nella parte superiore del primo pannello è presente un menu a tendina in cui l“«identificatore» può essere specificato utilizzando un attributo (Anteprima colonna) o un Espressione. Il menu a tendina include anche le ultime 10 espressioni da riutilizzare. La vista modulo utilizza la configurazione dei campi di livello (vedere Proprietà Modulo Attributi).

    Puoi scorrere gli identificatori degli elementi con le frecce nella parte inferiore del primo pannello. Gli attributi degli elementi si aggiornano man mano nel secondo pannello. È anche possibile identificare o spostarsi su un elemento attivo nell’area di disegno della mappa premendo uno dei pulsanti in basso:

    • highlightFeature Evidenzia sulla mappa l’attuale elemento se visibile nell’area di disegno della mappa.

    • panTo Sposta automaticamente all’attuale elemento

    • zoomTo Zoom automaticamente all’attuale elemento

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. 16.68 Tabella degli attributi in vista tabella (in alto) e vista modulo (in basso)

16.2.2.2. Configurare le colonne

Fai clic con il pulsante destro del mouse sull’intestazione di una colonna nella vista tabella per accedere agli strumenti che consentono di controllarla:

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

  • Imposta Tutte le larghezze di Colonna… allo stesso valore

  • Autodimensiona per ridimensionare al meglio la colonna.

  • Autodimensiona Tutte le Colonne

Le dimensioni di una colonna possono essere modificate anche trascinando il confine a destra dell’intestazione. La nuova dimensione della colonna viene mantenuta per il layer e ripristinata alla successiva apertura della tabella degli attributi.

Nascondere e organizzare colonne e attivare azioni

Facendo clic con il pulsante destro del mouse sull’intestazione di una colonna, puoi scegliere di Nascondi Colonna dalla tabella degli attributi (in modalità «vista tabella»). Per controlli più avanzati, premi il pulsante editTable Organizza Colonne… dalla barra degli strumenti della finestra di dialogo o scegliere Organizza Colonne… nel menu contestuale dell’intestazione di colonna. Nella nuova finestra di dialogo puoi:

  • seleziona/deseleziona le colonne che vuoi mostrare o nascondere: una colonna nascosta scomparirà da ogni istanza della finestra di dialogo della tabella degli attributi finché non verrà ripristinata attivamente.

  • trascina e rilascia 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

  • aggiungi una nuova colonna virtuale Azioni che visualizza in ogni riga una casella a discesa o un elenco di pulsanti di azioni abilitate. Vedie Proprietà Azioni per maggiori informazioni sulle azioni.

Ordinare le colonne

La tabella può essere ordinata in base a qualsiasi colonna, facendo clic sull’intestazione della colonna. Una piccola freccia indica l’ordine di ordinamento (se rivolta verso il basso significa valori decrescenti dalla riga superiore in giù, se rivolta verso l’alto significa valori ascendenti dalla riga superiore in giù). Si può anche scegliere di ordinare le righe con l’opzione Ordina… del menu contestuale dell’intestazione di colonna e scrivere un’espressione. Ad esempio, per ordinare le righe utilizzando più colonne, si può 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'.

16.2.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. 16.69 Formattazione Condizionale di una tabella degli attributi

16.2.3. Interagire con gli elementi nella tabella degli attributi

16.2.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):

  • expressionSelect Seleziona con Espressione….

  • formSelect Seleziona Elementi per Valore….

  • deselectActiveLayer Deseleziona Elementi da Tutti i layer

  • selectAll Seleziona Tutti gli Elementi

  • invertSelection Inverti Selezione Elementi.

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

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

  • openTable Apri Tabella Attributi

  • openTableSelected Mostra Elementi Selezionati - come usare Apri Tabella Attributi (caratteristiche selezionate) dal menu Layer o dalla Barra degli strumenti relativi agli attributi o premendo Maiusc+F6.

  • openTableVisible Mostra elementi visibili sulla mappa - come usare Apri Tabella Attributi (Elementi Visibili) dal menu Layer o dalla Barra Strumenti degli Attributi o premendo Ctrl+F6.

  • openTableEdited Visualizza gli elementi modificati e nuovi - come usare Apri Tabella Attributi (Elementi Modificati e Nuovi) dal menu Layer o dalla Barra degli strumenti degli attributi.

  • Filtro campo - consente all’utente di filtrare in base al valore di un campo: scegli una colonna da un elenco, digitare o selezionare un valore e premere Invio per filtrare. Quindi, solo gli elementi che corrispondono all’espressione num_field = value o string_field ilike '%value%' vengono mostrati nella tabella degli attributi. Puoi selezionare checkbox Case sensitive per essere meno permissivi con le stringhe.

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

  • Espressioni Filtro Salvate ►: una scorciatoia per saved expressions usate frequentemente per filtrare la tabella degli attributi.

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.

16.2.3.3. Memorizzazione espressioni filtro

Le espressioni utilizzate per il filtraggio della tabella degli attributi possono essere salvate per ulteriori richiami. Quando si usano le voci Filtro campo o Filtro avanzato (espressione), l’espressione usata viene visualizzata in un widget di testo nella parte inferiore della finestra di dialogo della tabella attributi. Premere l’opzione handleStoreFilterExpressionUnchecked Save expression with text as name accanto alla casella per salvare l’espressione nel progetto. Premendo il menu a discesa accanto al pulsante è possibile salvare l’espressione con un nome personalizzato (Save expression as…). Una volta visualizzata un’espressione salvata, viene attivato il pulsante handleStoreFilterExpressionChecked e il relativo menu a discesa consente di Modificare l’espressione e l’eventuale nome, oppure Cancellare l’espressione salvata.

Le espressioni di filtro salvate sono salvate nel progetto e disponibili attraverso il menu Espressioni Filtro Salvate della tabella degli attributi. Sono diverse dalle user expressions, condivise da tutti i progetti del profilo utente attivo.

16.2.3.4. 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. 16.70 Filtro tramite modulo della tabella degli attributi

Quando si selezionano/filtrano le geometrie dalla tabella degli attributi, c’è un pulsante Seleziona/Filtra elementi usando un modulo che permette di definire e rifinire i filtri. Il suo utilizzo attiva l’opzione 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.

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

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

Fig. 16.71 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 elementi 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.

16.2.4.1. Salvare le geometrie selezionate come nuovo layer

Gli elementi selezionati possono essere salvati in qualsiasi formato vettoriale supportato da OGR e anche trasformati in un altro sistema di riferimento di coordinate (SR). Nel menu contestuale del layer, dal pannello Layer, fai clic su Esporta ► Salva Elementi Eelezionati Come… per definire il nome del dataset in uscita, il suo formato e il SR (vedi sezione Creare nuovi layer da layer esistente). Noterai che la casella di checkbox Salva solo gli Elementi Selezionati è selezionata. È anche possibile specificare le opzioni di creazione di GDAL all’interno della finestra di dialogo.

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

16.2.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 Fig. 16.72). 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:

  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. 16.72 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 $length nel gruppo Geometria` per aggiungere la lunghezza della geometria nella casella di espressione del Calcolatore Campi (si inizierà a vedere un’anteprima del risultato, fino a 60 caratteri, sotto la casella di espressione che si aggiorna in tempo reale mentre l’espressione viene composta).

  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.

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

16.2.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. 16.73 La barra di calcolo campo rapido

16.2.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. 16.74 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 undo 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.

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

16.2.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. 16.75 Regione dell’Alaska con areoporti

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 Progetto->Proprietà…. Apri la scheda Relazioni e fai clic su symbologyAdd Aggiungi relazione.

  • Nome 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 chiamato fk_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 symbologyAdd 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 imposta la forza della relazione tra il livello genitore e il livello figlio. Il tipo predefinito Associazione significa che il livello genitore è semplicemente collegato a quello figlio, mentre il tipo Composizione consente di duplicare anche gli elementi figli quando si duplicano quelli genitori e quando si cancella un elemento vengono cancellati anche i figli, con conseguente cascata su tutti i livelli (significa che vengono cancellati anche i figli dei figli di…).

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

Fig. 16.76 Aggiungi una relazione tra i layer regions e airports

Dalla scheda Relazioni, puoi anche premere il pulsante symbologyAdd 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.

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

Fig. 16.77 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 a salvare tutte le modifiche nel livello figlio (airport).

  • Il pulsante capturePoint consente di digitalizzare la geometria dell’aeroporto nella area di disegno della mappa e assegna il nuovo elemento alla regione corrente per impostazione predefinita. L’icona cambia a seconda del tipo di geometria.

  • Il pulsante newTableRow aggiunge un nuovo record alla tabella degli attributi del layer airport e assegna il nuovo elemento alla regione corrente per impostazione predefinita. La geometria può essere disegnata successivamente con lo strumento di digitalizzazione Aggiungi parte.

  • Il pulsante duplicateFeature consente di copiare e incollare una o più elementi figli all’interno del livello figlio. Queste possono essere successivamente assegnate a un altro elemento genitore o modificarne gli attributi.

  • Il pulsante deleteSelectedFeatures cancella definitivamente l’aeroporto o gli aeroporti selezionati.

  • Il simbolo link apre una nuova finestra di dialogo in cui puoi selezionare un aeroporto esistente che verrà assegnato alla regione corrente. Questo può essere utile se si è creato per sbaglio un aeroporto nella regione sbagliata.

  • Il simbolo unlink scollega l’aeroporto(i) selezionato(i) dalla regione corrente, lasciandolo effettivamente non assegnato (la chiave straniera è impostata a NULL).

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

  • I due pulsanti formView e openTable a destra permettono di scegliere tra la table view and form view <attribute_table_view>` delle relative funzioni figlio.

Se utilizzi il Drag and Drop Designer per l’elemento regioni, puoi selezionare gli strumenti disponibili. Puoi anche decidere se aprire un nuovo modulo quando viene aggiunta un nuovo elemento, usando l’opzione Forza occultamento del modulo quando si aggiunge un elemento. Tieni presente che questa opzione implica che gli attributi non nulli devono assumere un valore predefinito valido per funzionare correttamente.

../../../_images/relations11.png

Fig. 16.78 Drag and Drop Designer per configurare gli strumenti di relazione regions-airports

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 Aggiungi Parte 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. 16.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

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 symbologyAdd se hai scelto l’opzione Consenti l'aggiunta di nuovi elementi nel menu Proprietà ► Modulo attributi 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. 16.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.

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

Fig. 16.80 Selezionare elementi genitori con i valori dei figli

16.2.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. 16.81 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 giusta cardinalità nel Proprietà… ► Modulo Attributi per i layer airports e airlines. Per il primo si deve scegliere l’opzione airlines (id) e per il secondo l’opzione airports (id).

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

Fig. 16.82 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. 16.83 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à.

16.2.6.3. Introduzione alle relazioni polimorfiche

Le relazioni polimorfiche sono un caso speciale di relazioni 1-N, in cui un singolo layer di riferimento (documento) contiene gli elementi di più layer referenziati. Ciò differisce dalle relazioni normali, che richiedono un layer di riferimento diverso per ogni layer referenziato. Un singolo layer di riferimento (documento) si ottiene aggiungendo una colonna aggiuntiva ``campo_layer”” nel layer di riferimento (documento) che memorizza le informazioni per identificare il layer di riferimento. Nella sua forma più semplice, il layer di riferimento (documento) inserirà semplicemente il nome del layer di riferimento in questo campo.

Per essere più precisi, una relazione polimorfa è un insieme di relazioni normali che hanno lo stesso layer di riferimento, ma con il layer di riferimento definito dinamicamente. L’impostazione polimorfica del layer viene risolta utilizzando un’espressione che deve corrispondere ad alcune proprietà del layer di riferimento, come il nome della tabella, l’id del layer, il nome del layer.

Immaginiamo di andare al parco e di voler fotografare le diverse specie di piante'' e ``animali'' che vediamo lì. Ogni pianta o animale ha più immagini associate, quindi se usassimo le normali relazioni 1:N per memorizzare le immagini, avremmo bisogno di due tabelle separate, ``immagini_animali e immagini_piante. Questo potrebbe non essere un problema per due tabelle, ma immaginiamo di voler fare immagini separate per funghi, uccelli, ecc.

Le relazioni polimorfiche risolvono questo problema, poiché tutte gli elementi di riferimento sono memorizzati nella stessa tabella documents. Per ogni elemento, il layer di riferimento è memorizzato nel campo referenced_layer e l’id dell’elemento di riferimento nel campo referenced_fk.

Definizione relazioni polimorfiche

Per prima cosa, si deve far conoscere a QGIS le relazioni polimorfiche tra i layer. Questo si fa in Progetto ► Proprietà…. Apri la scheda Relazioni e fai clic sulla piccola freccia rivolta verso il basso accanto al pulsante Aggiungi relazione, in modo da poter selezionare l’opzione Aggiungi relazione polimorfica dal menu a tendina appena apparso.

../../../_images/relations9.png

Fig. 16.84 Aggiungere una relazione polimorfa che utilizza il layer documents come riferimento e i layer animals e plants come riferimento.

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

  • Il Layer di riferimento (figlio), considerato anche come layer figlio, è quello che contiene il campo chiave esterna. Nel nostro caso, si tratta del layer documents. Per questo layer è necessario aggiungere un campo di riferimento che punti all’altro layer, quindi questo è referenced_fk.

    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 symbologyAdd Aggiungi una nuova coppia di campi come parte di una chiave esterna composta per aggiungere tutte le coppie necessarie.

  • Il Campo layer è il campo della tabella di riferimento che memorizza il risultato dell’espressione del layer valutato, che è la tabella di riferimento a cui appartiene questo elemento. Nel nostro esempio, si tratta del campo referenced_layer.

  • L”Espressione Layer valuta un identificatore univoco del layer. Può essere il nome del layer @layer_name, l’id del layer @layer_id, il nome della tabella del layer decode_uri(@layer, 'table') o qualsiasi cosa che possa identificare univocamente un layer.

  • Forza Associazione significa che il layer genitore e il layer figlio sono legati da una relazione di forza. Il tipo predefinito Associazione significa che il layer genitore è semplicemente collegato a quello figlio, mentre il tipo Composizione consente di duplicare anche gli elementi figli quando si duplicano quelli genitori e quando si cancella un elemento vengono cancellati anche i figli, con conseguente cascata su tutti i layer (significa che vengono cancellati anche i figli dei figli di…).

  • I Layer di riferimento, considerati anche come layer padre, sono quelli con la chiave primaria puntata, quindi in questo caso sono i layer plants e animals. Devi definire la chiave primaria dei layer referenziati dall’elenco a discesa, quindi è fid. Si noti che la definizione di una chiave primaria valida richiede che tutti i layer di riferimento abbiano un campo con quel nome. Se non esiste tale campo, non è possibile salvare una relazione polimorfa.

Una volta aggiunta, la relazione polimorfa può essere modificata tramite la voce di menu Modifica relazione polimorfa.

../../../_images/relations10.png

Fig. 16.85 Anteprima della relazione polimorfa appena creata e delle sue relazioni figlie per animali e piante.

L’esempio precedente utilizza il seguente schema di database:

CREATE SCHEMA park;

CREATE TABLE park.animals
(
   fid serial NOT NULL,
   geom geometry(Point, 4326) NOT NULL,
   animal_species text NOT NULL,
   CONSTRAINT animals_pkey PRIMARY KEY (fid)
);

CREATE INDEX animals_geom_idx ON park.animals USING gist (geom);

CREATE TABLE park.plants
(
   fid serial NOT NULL,
   geom geometry(Point, 4326) NOT NULL,
   plant_species text NOT NULL,
   CONSTRAINT plants_pkey PRIMARY KEY (fid)
);

CREATE INDEX plants_geom_idx ON park.plants USING gist (geom);

CREATE TABLE park.documents
(
   fid serial NOT NULL,
   referenced_layer text NOT NULL,
   referenced_fk integer NOT NULL,
   image_filename text NOT NULL,
   CONSTRAINT documents_pkey PRIMARY KEY (fid)
);

16.2.7. Memorizzazione e acquisizione di una risorsa esterna

Un campo può puntare a una risorsa memorizzata su un sistema di archiviazione esterno. I moduli degli attributi possono essere configurati in modo da agire come client di un sistema di archiviazione esterno, per memorizzare e recuperare tali risorse, su richiesta degli utenti, direttamente dai moduli.

16.2.7.1. Configurazione di una memoria esterna

Per configurare un archivio esterno, occorre prima configurarlo dal vettore attribute form properties e selezionare il widget Attachment.

../../../_images/external_storage_configuration.png

Fig. 16.86 Gestire un archivio esterno WebDAV per un determinato campo

Dal widget Attachment, devi prima selezionare il Tipo di memorizzazione:

  • Seleziona file esistente: L’URL di destinazione esiste già. Quando si seleziona una risorsa, non viene eseguita alcuna operazione di memorizzazione, ma l’attributo viene semplicemente aggiornato con l’URL.

  • Copia semplice: Memorizza una copia della risorsa su un disco di destinazione (che può essere un file system locale o condiviso in rete) e l’attributo viene aggiornato con il percorso della copia.

  • WebDAV Storage: La risorsa viene inviata a un server HTTP che supporta il protocollo WebDAV e l’attributo viene aggiornato con il suo URL. Nextcloud, Pydio o altri software di file hosting supportano questo protocollo.

Quindi, devi impostare il parametro Store URL, che fornisce l’URL da utilizzare quando una nuova risorsa deve essere memorizzata. È possibile impostare un’espressione usando il parametro data defined override widget, per avere valori specifici in base agli attributi degli elementi.

La variabile @selected_file_path potrebbe essere usata in questa espressione e rappresentare il percorso assoluto del file selezionato dall’utente (usando il selettore di file o con trascina e rilascia).

Nota

Utilizzando l’archivio esterno WebDAV, se l’URL termina con «/», viene considerato come una cartella e il nome del file selezionato viene aggiunto per ottenere l’URL finale.

Se il sistema di archiviazione esterno ne ha bisogno, è possibile configurare una authentication.

16.2.7.2. Utilizzare una memoria esterna

Una volta configurato, puoi selezionare un file locale utilizzando il pulsante quando si modifica l’attributo di un elemento. A seconda del tipo di storage type configurato, il file verrà memorizzato sul sistema di archiviazione esterno (tranne se è stato selezionato Select existing file) e il campo verrà aggiornato con il nuovo URL della risorsa.

../../../_images/external_storage_store.png

Fig. 16.87 Memorizzazione di un file in un archivio esterno WebDAV

Nota

L’utente può ottenere lo stesso risultato anche trascinando e rilasciando un file sull’intero attachment widget.

Utilizzare il pulsante taskCancel Cancel per interrompere il processo di memorizzazione. È possibile configurare un visualizzatore utilizzando la voce Visualizzatore integrato di documenti, in modo che la risorsa venga recuperata automaticamente dal sistema di archiviazione esterno e visualizzata direttamente sotto l’URL. L’icona di avviso di cui sopra indica che la risorsa non può essere recuperata dal sistema di archiviazione esterno. In questo caso, ulteriori dettagli potrebbero apparire nel Pannello Messaggi di Log.