Outdated version of the documentation. Find the latest one here.

Layer virtuali

Un tipo speciale di vettore ti consente di definire un layer come il risultato di un’interrogazione avanzata, utilizzando il linguaggio SQL su tutti i vettori che QGIS è in grado di aprire. Questi layer sono chiamati layer virtuali: non caricano dati propri e possono essere visti come una visualizzazione di altri layer.

Creare un layer virtuale

Apri la finestra di creazione di layer virtuale cliccando su Aggiungi layer virtuale in menù Layer o dalla barra degli strumenti corrispondente.

La finestra di dialogo ti consente di specificare un’interrogazione SQL. Questa interrogazione può utilizzare il nome (o id) dei vettori esistenti, così come i nomi dei campi di layer.

Ad esempio, se disponi di un vettore denominato regions, puoi creare un nuovo layer virtuale con una query SQL come SELECT * FROM regions WHERE id < 100. L’interrogazione SQL verrà eseguito, qualunque sia la struttura di base del vettore regions e anche se questo struttura di base non supporta direttamente le query SQL.

Puoi creare unioni e interrogazioni complesse usando direttamente i nomi dei layer che devono essere uniti.

Linquaggi supportati

Il motore di base utilizza SQLite e SpatiaLite per operare.

Significa che puoi usare tutte le SQL comprensibili alla tua installazione locale di SQLite.

Puoi usare funzioni di SQLite e anche funzioni spaziali da SpatiaLite in un’interrgogazione di layer virtuale. Per esempio, la creazione di un layer di punti da uno di un solo attributo può essere fatto con una interrogazione tipo: SELECT id, MakePoint(x, y, 4326) as geometry FROM coordinates

Puoi usare Funzioni del Calcolatore QGIS in un interrogazione per layer virtuale.

Per riferirti alla colonna del dato spaziale, usa il nome geometry.

Contrariamente a una semplice interrogazione SQL, tutti i campi di una interrogazione per layer virtuale devono essere nominati. Non dimenticarti di utilizzare la parola chiave as per dare un nome alle colonne se sono il risultato di una chiamata o di una funzione di calcolo.

Questioni

Con parametri predefiniti, il motore del layer virtuale proverà a rilevare il tipo delle diverse colonne dell’interrogazione, incluso il tipo di colonna geometria se presente.

Questo viene fatto analizando l’interrogazione se possibile o recuperando la prima riga dell’interrogazione (LIMIT 1) in ultima istanza. Il recupero della prima riga del risultato per creare lo strato può essere indesiderabile per motivi di prestazioni.

La finestra per creare un layer virtuale ti permette di specificare diversi parametri.

  • colonna univoca: questa opzione ti permette di specificare quale campo dell’interrogazione rappresenta i valori interi univoci che QGIS può utilizzare come identificatore di riga. Per default, viene utilizzato un valore intero autoincrementale. Specificando una colonna identificatore univoco potrai velocizzare la selezione di righe.

  • nessuna geometria: questa opzione forza il layer virtuale a ignorare qualsiasi campo geometria. Il layer risultante sarà solamente un layer tabella.

  • colonna geometrie*: qusta opzione ti permette di identificare la colonna spaziale del layer.

  • Tipo: qusta opzione ti permette di specificare il tipo spaziale del layer virtuale.

  • CR: quest’opzione ti permette di specificare il sistema di riferimento delle coordinate del layer virtuale.

Commenti

The virtual layer engine tries to determine the type of each column of the query. If it fails, the first row of the query is fetched to determine column types.

Puoi specificare direttamente nell’interrogazione il tipo di una particolare colonna usando qualche commento speciale.

La sintassi è la seguente: /*:type*/. Devi metterlo subito dopo il nome della colonna. type può essere int per interi, real per numeri a virgola mobile o text.

Per esempio: SELECT id+1 as nid /*:int*/ FROM table

Puoi anche impostare il tipo e il sistema di riferimento delle coordinate della colonna geometria con commenti speciali con la seguente sintassi /*:gtype:srid*/` dove gtype è il tipo spaziale (point, linestring, polygon, multipoint, multilinestring o multipolygon) e srid un intero rappresentante il codice EPSG del sistema di riferimento delle coordinate.

Uso degli indici

Nel costruire un layer virtuale, puoi usare gli indici nei seguenti modi:

  • Se usi un comando = su una colonna chiave del layer, i dati forniti si baseranno su un particolare id (FilterFid)

  • per gli altri comandi (>, <=, !=, etc.) o su una colonna senza chiave, puoi usare una richiesta costruita da un’espressione per richiedere i dati al vettore di partenza. Ciò significa che puoi usare gli indici, se esistono, sul database di partenza.

Esiste una sintassi specifica per gestire predicati spaziali e attivare l’uso di un indice spaziale: per ogni layer virtuale esiste una colonna nascosta denominata _search_frame_. Questa colonna può essere paragonato ad un rettangolo di selezione. Esempio: select * from vtab where _search_frame_=BuildMbr(-2.10,49.38,-1.3,49.99,4326)

Comandi spaziali binari come ST_Intersects sono molto accellerati se usati assieme con gli indici spaziali