Esplorare i formati dati e i campi

Dati Raster

I dati raster sono matrici di celle discrete che rappresentano oggetti della superficie terrestre o dell’ambiente al di sopra o al di sotto di essa. Ogni cella nella matrice ha la stessa dimensione e le celle sono solitamente rettangolari (in QGIS sono sempre rettangolari). Esempi tipici di dati raster sono quelli provenienti dal telerilevamento come le fotografie aeree, le immagini da satellite e i dati modellati come le matrici dell’elevazione.

A differenza dei dati vettoriali, i dati raster in genere non hanno un record di database associato per ogni cella. Sono geocodificati dalla risoluzione dei pixel e dalla coordinata X/Y di un pixel d’angolo del layer raster. Questo permette a QGIS di posizionare correttamente i dati nell’area di disegno della mappa.

The GeoPackage format is convenient for storing raster data when working with QGIS. The popular and powerful GeoTiff format is a good alternative.

QGIS makes use of georeference information inside the raster layer (e.g., GeoTiff) or an associated world file to properly display the data.

Dati vettoriali

Molte delle geometrie disponibili in QGIS funzionano allo stesso modo, indipendentemente dalla fonte dei dati vettoriali. Tuttavia, a causa delle differenze nelle specifiche dei formati (ESRI Shapefile, MapInfo e MicroStation, AutoCAD DXF, PostGIS, SpatiaLite, DB2, Oracle Spatial e MSSQL Spatial database, e molti altri), QGIS può gestire in modo diverso alcune delle loro proprietà. Questa sezione descrive come lavorare con queste specificità.

Nota

QGIS supports (multi)point, (multi)line, (multi)polygon, CircularString, CompoundCurve, CurvePolygon, MultiCurve, MultiSurface feature types, all optionally with Z and/or M values.

You should also note that some drivers don’t support some of these feature types, like CircularString, CompoundCurve, CurvePolygon, MultiCurve, MultiSurface feature type. QGIS will convert them.

GeoPackage

The GeoPackage (GPKG) format is platform-independent, and is implemented as a SQLite database container, and can be used to store both vector and raster data. The format was defined by the Open Geospatial Consortium (OGC), and was published in 2014.

GeoPackage can be used to store the following in a SQLite database:

  • vector features

  • tile matrix sets of imagery and raster maps

  • attributes (non-spatial data)

  • extensions

ESRI Shapefile

L’ESRI shapefile è ancora uno dei formati di file vettoriali più utilizzati in QGIS. Tuttavia, questo formato ha qualche limitazione che altri formati non hanno (come il Geopackage, SpatiaLite). Il supporto è fornito dalla libreria OGR Simple Feature Library.

Un formato dati shapefile è costituito da diversi file. I seguenti tre sono obbligatori:

  1. .shp file contenente le geometrie

  2. .dbf file contenente gli attributi in formato dBase

  3. .shx file indici

Uno shapefile può anche includere un file con suffisso .prj che contiene le informazioni sulla proiezione. Anche se non è obbligatorio, è molto utile avere informazioni sulla proiezione. Uno shapefile può contenere anche altri files. Per ulteriori informazioni, vedi le specifiche tecniche di ESRI all’indirizzo http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf.

Ottimizzare le prestazioni per gli shapefile

Per migliorare le prestazioni di visualizzazione di uno shapefile, puoi creare un indice spaziale. L’indice spaziale migliora la velocità di visualizzazione quando usi le funzioni di zoom e di spostamento. Gli indici spaziali usati da QGIS hanno estensione .qix.

Segui questi passi per creare un indice spaziale:

  1. Carica uno shapefile (vedi Il Pannello Browser).

  2. Apri la finestra di dialogo Proprietà vettore facendo doppio click sul nome dello shapefile nella legenda o cliccandoci con il tasto destro e scegliendo Proprietà… dal menu contestuale.

  3. Nella scheda Sorgente, fai clic sul pulsante Crea Indice Spaziale.

Problemi nel caricare un file .prj

Se carichi un dataset in formato Shapefile con un file .prj file e QGIS non è in grado di leggere il sistema di riferimento delle coordinate da quel file, dovrai definire manualmente la proiezione corretta all’interno della scheda Proprietà vettore ‣ Sorgente del layer cliccando sul pulsante setProjection Seleziona SR. Ciò è dovuto al fatto che i file .prj spesso non forniscono i parametri di proiezione completi come quelli utilizzati in QGIS ed elencati nella finestra di dialogo SR.

Per lo stesso motivo, se crei un nuovo set di dati in formato Shapefile con QGIS, vengono creati due diversi file di proiezione: un file .prj file con parametri di proiezione limitati, compatibile con il software ESRI, e un file .qpj file, che fornisce i parametri completi del SR utilizzato. Ogni volta che QGIS trova un file .qpj file, sarà usato al posto del .prj.

Files Testo Limitato

Il file di testo delimitato è un formato molto comune e ampiamente utilizzato per la sua semplicità e leggibilità - i dati possono essere visualizzati e modificati anche con un editor di testo. Un file di testo delimitato è un dato tabellare con ogni colonna separata da un definito carattere e ogni riga separata da un’interruzione di riga. La prima riga di solito contiene i nomi delle colonne. Un tipo comune di file di testo delimitato è un CSV (Comma Separated Values), con ogni colonna separata da una virgola. Tali file di dati possono contenere anche informazioni sulla posizione (vedi Memorizzazione informazioni di geometrie in un file di testo delimitato).

QGIS ti permette di caricare un file in formato di testo delimitato come layer o come semplice tabella (vedi Il Pannello Browser o Importare file di testo delimitato). Prima però verifica che soddisfi questi requisiti:

  1. Il file deve avere una riga di intestazione con il nome dei campi. Questa deve essere la prima riga del file di testo (preferibilmente la prima riga del file di testo).

  2. Se si deve abilitare la geometria, la riga di intestazione deve contenere uno o più campi con la definizione della geometria. Questi campi possono avere qualsiasi nome.

  3. Le coordinate X e Y (se la geometria è identificata da coordinate) devono essere specificate come numeri. Il sistema di coordinate non è importante.

  4. Se hai dati che non sono una stringa (testo) e il file è un file CSV, devi avere un file CSVT (vedi sezione Utilizzo di file CSVT per controllare la formattazione del campo).

Come esempio di un file di testo valido, importa il file di punti quotati elevp.csv presente nell’insieme di dati campione di QGIS (vedi sezione Dati campione):

X;Y;ELEV
-300120;7689960;13
-654360;7562040;52
1640;7512840;3
[...]

Alcune cose da tenere in considerazione in merito al file di testo:

  1. Il file di testo usato come esempio usa ; (punto e virgola) come delimitatore. Ma qualsiasi carattere può essere usato per delimitare i campi.

  2. La prima riga è la riga di intestazione. Questa contiene i campi X, Y e ELEV.

  3. Nessun tipo di virgoletta (") dev’essere usata per delimitare i campi di testo.

  4. Le coordinate X sono contenute nel campo X.

  5. Le coordinate Y sono contenute nel campo Y.

Memorizzazione informazioni di geometrie in un file di testo delimitato

I file testo delimitato possono contenere informazioni sulla geometria in due forme principali:

  • Come coordinate in colonne separate (es. Xcol, Ycol…. ), compatibili con i dati geometrici dei punti;

  • Come well-known text (WKT) rappresentazione della geometria in una singola colonna, per qualsiasi tipo di geometria.

Sono supportati anche oggetti con geometrie curve (CircularString, CurvePolygon and CompoundCurve). Di seguito tre esempi di tali tipologie geometriche nel formato geometrie WKT:

Label;WKT_geom
LineString;LINESTRING(10.0 20.0, 11.0 21.0, 13.0 25.5)
CircularString;CIRCULARSTRING(268 415,227 505,227 406)
CurvePolygon;CURVEPOLYGON(CIRCULARSTRING(1 3, 3 5, 4 7, 7 3, 1 3))
CompoundCurve;COMPOUNDCURVE((5 3, 5 13), CIRCULARSTRING(5 13, 7 15,
  9 13), (9 13, 9 3), CIRCULARSTRING(9 3, 7 1, 5 3))

Il formato testo delimitato supporta anche geometrie che hanno coordinate Z e M:

LINESTRINGZ(10.0 20.0 30.0, 11.0 21.0 31.0, 11.0 22.0 30.0)

Utilizzo di file CSVT per controllare la formattazione del campo

Quando carichi i file CSV, il driver OGR presuppone che tutti i campi siano stringhe (cioè tipo testo) a meno che non sia detto diversamente. Puoi creare un file CSVT per indicare a OGR (e QGIS) quali tipi di dati ci sono nelle diverse colonne:

Type

Name

Example

Whole number

Integer

4

Decimal number

Real

3.456

Date

Date (YYYY-MM-DD)

2016-07-28

Time

Time (HH:MM:SS+nn)

18:33:12+00

Date & Time

DateTime (YYYY-MM-DD HH:MM:SS+nn)

2016-07-28 18:33:12+00

Il file CSVT è un file di testo normale di UNA sola riga con i tipi di dati racchiusi da virgolette e separati da virgole, ad esempio:

"Integer","Real","String"

Puoi anche specificare la larghezza e la precisione di ogni colonna, ad esempio:

"Integer(6)","Real(5.5)","String(22)"

Questo file viene salvato nella stessa cartella del file .csv, con lo stesso nome, ma con .csvt come estensione.

Puoi trovare maggiori informazioni in GDAL CSV Driver.

Layer PostGIS

I vettori PostGIS sono memorizzati in un database PostgreSQL. PostGIS ha diversi vantaggi: creazione dell’indice spaziale, capacità di filtraggio e di interrogazione molto potenti. Usando PostGIS, le funzioni vettoriali come la selezione e l’identificazione sono più precise che con i vettori OGR in QGIS.

Suggerimento

Layer PostGIS

Normalmente, un vettore PostGIS è definito da una voce nella tabella geometry_columns. QGIS può caricare layers che non dispongono di una voce nella tabella geometry_columns. Ciò include sia tabelle che viste. La definizione di una vista spaziale fornisce un potente mezzo per visualizzare i tuoi dati. Consulta il tuo manuale PostgreSQL per informazioni sulla creazione di viste.

Questa sezione contiene alcuni dettagli su come QGIS accede ai vettori PostgreSQL. La maggior parte delle volte QGIS dovrebbe semplicemente fornirti un elenco di tabelle del database che possono essere caricate e dovrebbe poi caricarle in base alla tua richiesta. Comunque se hai difficoltà a caricare una tabella di PostgreSQL in QGIS, le informazioni seguenti ti possono aiutare a capire tutti i messaggi di QGIS e ti possono dare un’indicazione di come cambiare le tabelle o le definizioni delle viste di PostgreSQL in modo che QGIS le possa caricare.

Chiave primaria

QGIS richiede che i vettori PostgreSQL contengano una colonna che possa essere usata come chiave univoca per il vettore. Le tabelle devono contenere una chiave primaria o una colonna con un vincolo univoco. Questa colonna deve essere di tipo int4 (un numero intero di 4 byte). Alternativamente, la colonna ctid può essere usata come chiave primaria. Se a una tabella mancano queste informazioni, verrà usata la colonna oid. Le prestazioni saranno migliori se la colonna è indicizzata (le chiavi primarie sono indicizzate automaticamente in PostgreSQL).

QGIS prevede una casella di controllo Seleziona all’ID che viene attivata per impostazione predefinita. Questa opzione ottiene gli id senza gli attributi il che è più veloce nella maggior parte dei casi.

Viste

Se il layer di PostgreSQL è una vista sussistono gli stessi requisiti, ma non sempre necessitano chiavi primarie o colonne con vincoli univoci. Devi definire un campo della chiave primaria (deve essere un intero) nella finestra di dialogo di QGIS prima di caricare la vista. Se non c’è una colonna adatta nella vista, QGIS non caricherà il vettore. Se succede la soluzione è di modificare la vista in modo che contenga una colonna adatta (un intero e una chiave primaria con un vincolo univoco, preferibilmente indicizzato).

Come per le tabelle, una casella di controllo Seleziona all’ID è attiva per impostazione predefinita (vedere sopra per il significato della casella di controllo). Può aver senso disattivare questa opzione quando si utilizzano viste impegnative.

Stili di default dei layer QGIS e backup del database

Se vuoi fare una copia di backup del tuo database PostGIS usando i comandi pg_dump e pg_restore, e gli stili di default dei layer come salvati da QGIS non ripristinabili in seguito, devi impostare l’opzione XML su DOCUMENT prima del comando di ripristino.

SET XML OPTION DOCUMENT;

Filtro lato server

QGIS consente di filtrare le geometrie già sul lato server. Per fare ciò attiva Impostazioni ‣ Opzioni ‣ Origine dati ‣ checkbox Esegui le espressioni sul lato server sul lato server se possibile. Saranno accettate solo le espressioni supportate dal database. Le espressioni che utilizzano operatori o funzioni non supportati saranno restituite alla esecuzione in locale.

Supporto di PostgreSQL alle diverse tipologie di dati

La maggior parte dei tipi di dati più comuni sono supportati da PostgreSQL: intero, numero in virgola mobile, dati stringa a lunghezza variabile, geometria, timestamp, array e hstore.

Importare dati in PostgreSQL

I dati possono essere importati in PostreSQL/PostGIS usando diversi strumenti, come il plugin DB Manager e gli strumenti da riga di comando shp2pgsql e ogr2ogr

DB Manager

QGIS ha un plugin di base chiamato dbManager DB Manager. Si può utilizzare per caricare dati, e include il supporto per gli schemi. Vedi la sezione Plugin DB Manager per ulteriori informazioni.

shp2pgsql

PostGIS include una utility chiamata shp2pgsql che può essere utilizzata per importare i set di dati in formato Shapefile in un database PostGIS. Per esempio, per importare un set di dati in formato Shapefile chiamato lakes.shp` in un database PostgreSQL chiamato gis_data, usare il seguente comando:

shp2pgsql -s 2964 lakes.shp lakes_new | psql gis_data

Questo comando crea un nuovo vettore, chiamato lakes_new , nel database gis_data. Il nuovo vettore avrà un identificatore del sistema di riferimento (SRID) corrispondente a 2964. Vedi la sezione Lavorare con le proiezioni per ulteriori informazioni sui sistemi di riferimento spaziali e sulle proiezioni.

Suggerimento

Esportare dati da PostGIS

Come lo strumento di importazione shp2pgsql, c’è anche uno strumento per esportare i set di dati PostGIS nel formato Shapefile: pgsql2shp. Questo viene fornito all’interno della tua distribuzione PostGIS.

ogr2ogr

Oltre a shp2pgsql e DB Manager c’è un altro strumento per caricare dati in PostGIS: ogr2ogr. Questo strumento fa parte dell’installazione di GDAL

Per importare un set di dati in formato Shapefile in PostGIS, procedere come segue:

ogr2ogr -f "PostgreSQL" PG:"dbname=postgis host=myhost.de user=postgres
password=topsecret" alaska.shp

Questo importerà il set di dati alaska.shp in formato Shapefile nel database PostGIS postgis usando l’utente postgres con la password topsecret sul server host myhost.de.

Nota che OGR deve essere compilato con PostgreSQL per supportare PostGIS. Puoi verificare ciò digitando (in nix) :

ogrinfo --formats | grep -i post

Se preferisci utilizzare il comando COPY di PostgreSQL invece del metodo predefinito INSERT INTO, puoi esportare la seguente variabile d’ambiente (disponibile almeno in nix e osx):

export PG_USE_COPY=YES

ogr2ogr non crea indici spaziali come shp2pgsl. Devi crearli manualmente, usando come passo aggiuntivo il comando SQL CREATE INDEX dopo l’importazione, come passo aggiuntivo (come descritto nella sezione seguente Migliorare le prestazioni).

Migliorare le prestazioni

Recuperare gli oggetti da un database PostgreSQL può richiedere molto tempo, specialmente in rete. Puoi migliorare le prestazioni di caricamento dei layer PostgreSQL assicurando l’esistenza di un indice spaziale PostGIS su ogni layer del database. PostGIS supporta la creazione di un indice GiST (Generalized Search Tree) per velocizzare le ricerche spaziali dei dati (le informazioni dell’indice GiST sono tratte dalla documentazione PostGIS disponibile all’indirizzo https://postgis.net).

Suggerimento

Puoi utilizzare il DBManager per creare un indice del tuo layer. Dovresti prima selezionare il livello e cliccare su Tabella ‣ Modifica tabella, andare nella scheda Indici e cliccare su Aggiungi indice spaziale.

La sintassi per creare un indice GIST è:

CREATE INDEX [indexname] ON [tablename]
  USING GIST ( [geometryfield] GIST_GEOMETRY_OPS );

Nota che per tabelle molto grandi, la creazione dell’indice può richiedere parecchio tempo. Non appena l’indice è stato creato, dovresti effettuare un VACUUM ANALYZE. Vedi la documentazione di PostGIS (POSTGIS-PROJECT Letteratura e riferimenti web) per ulteriori informazioni.

Segue un esempio di come creare un indice GiST:

gsherman@madison:~/current$ psql gis_data
Welcome to psql 8.3.0, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

gis_data=# CREATE INDEX sidx_alaska_lakes ON alaska_lakes
gis_data-# USING GIST (the_geom GIST_GEOMETRY_OPS);
CREATE INDEX
gis_data=# VACUUM ANALYZE alaska_lakes;
VACUUM
gis_data=# \q
gsherman@madison:~/current$

Vettori a cavallo dei 180° di longitudine

Molti pacchetti GIS non prevedono mappe vettoriali con un sistema di riferimento geografico (lat/lon) che attraversa la linea di longitudine a 180 gradi (http://postgis.refractions.net/documentation/manual-2.0/ST_Shift_Longitude.html_Shift_Longitude.html). Come risultato, se apriamo una tale mappa in QGIS, vedremo due luoghi lontani e distinti, che dovrebbero apparire uno vicino all’altro. In Figure_vector_crossing, il piccolo punto all’estrema sinistra della mappa (Chatham Islands) dovrebbe essere all’interno della griglia, alla destra delle isole principali della Nuova Zelanda.

../../../_images/vectorNotWrapping.png

Mappa in lat/lon a cavallo dei 180° di longitudine

Una soluzione consiste nel trasformare i valori di longitudine utilizzando PostGIS e la funzione ST_Shift_Longitude. Questa funzione legge i punti/vertici di ogni elemento di una geometria e se la coordinata di longitudine è < 0° , aggiunge 360°. Il risultato sarà una versione 0° - 360° dei dati, che verranno poi visualizzati su una mappa centrata a 180°.

../../../_images/vectorWrapping.png

Vettori a cavallo di 180° di longitudine usando la funzione ST_Shift_Longitude

Guida all’uso

  • Importa i dati in PostGIS (Importare dati in PostgreSQL) usando, per esempio, il plugin DB Manager.

  • Usa l’interfaccia da linea di comando di PostGIS per dare il seguente comando (nell’esempio “TABLE” è il nome della tua tabella PostGIS): gis_data=# update TABLE set the_geom=ST_Shift_Longitude(the_geom);

  • Se tutto è andato a buon fine, riceverai la conferma sul numero di geometrie che sono state aggiornate. Potrai cosi caricare la mappa e vedere le differenze (Figure_vector_crossing_map).

Vettori SpatiaLite

Se vuoi salvare un layer vettoriale in formato SpatiaLite, puoi farlo cliccando con il tasto destro del mouse sul layer nella legenda. Quindi, fai clic su Salva come…, definisci il nome del file di output e seleziona “SpatiaLite” come formato e il SR. Inoltre, puoi selezionare “SQLite” come formato e poi aggiungere SPATIALITE=YES nel campo di opzione per la creazione dell’origine dati OGR. Questo dice a OGR di creare un database SpatiaLite. Vedi anche https://www.gdal.org/ogr/drv_sqlite.html_sqlite.html.

QGIS supporta anche viste modificabili in SpatiaLite.

Se vuoi creare un nuovo layer SpatiaLite, fai riferimento alla sezione Creare un nuovo layer SpatiaLite.

Suggerimento

SpatiaLite data management Plugins

Per la gestione dei dati di SpatiaLite puoi utilizzare anche diversi plugin Python: QSpatiaLite, SpatiaLite Manager o DB Manager (plugin core, consigliato). Se necessario, possono essere scaricati e installati con il programma di installazione plugin.

Parametri specifici di GeoJSON

Quando esportazione dei layer in GeoJSON, questo formato ha alcune specifiche Opzioni del Layer disponibili. Queste opzioni provengono in realtà da GDAL che è responsabile della scrittura del file:

  • COORDINATE_PRECISION il numero massimo di cifre dopo il separatore decimale da inserire in coordinate. I valori predefiniti sono 15 (nota: per le coordinate Lat Lon 6 è considerato sufficiente). La troncatura si verifica per rimuovere gli zeri finali.

  • WRITE_BBOX impostato su YES per scrivere una proprietà bbox con il rettangolo di delimitazione delle geometrie a livello di elemento e di collezione di elementi.

Layer DB2 Spatial

IBM DB2 per Linux, Unix e Windows (DB2 LUW), i prodotti IBM DB2 per z/OS (mainframe) e IBM DashDB consentono agli utenti di memorizzare e analizzare i dati spaziali nelle colonne della tabella relazionale. La funzione DB2 per QGIS supporta la gamma completa di visualizzazione, analisi e manipolazione dei dati spaziali in questi database.

La documentazione utente su queste funzionalità può essere trovata in DB2 z/OS KnowledgeCenter, DB2 LUW KnowledgeCenter e DB2 DashDB KnowledgeCenter.

Per ulteriori informazioni sul funzionamento delle opzioni spaziali DB2, consulta il Tutorial DB2 Spatial Tutorial su IBM DeveloperWorks.

La funzionalità DB2 attualmente supporta solo l’ambiente Windows tramite il driver ODBC di Windows.

Il client che esegue QGIS deve disporre di uno dei seguenti componenti installati:

  • DB2 LUW

  • IBM Data Server Driver Package

  • IBM Data Server Client

Per aprire un database DB2 in QGIS, si può fare riferimento alla sezione:ref:browser_panel o Caricare layer da Database.

Se stai accedendo a un database DBW LUW sulla stessa macchina o che utilizza DB2 LUW come client, i file di esecuzione e i files di supporto DB2 devono essere inclusi nel percorso di Windows. Ciò può essere fatto creando una file batch come seguire con il nome db2.bat e includendolo nella directory %OSGEO4W_ROOT%/etc/ini.

@echo off
REM Point the following to where DB2 is installed
SET db2path=C:\Program Files (x86)\sqllib
REM This should usually be ok - modify if necessary
SET gskpath=C:\Program Files (x86)\ibm\gsk8
SET Path=%db2path%\BIN;%db2path%\FUNCTION;%gskpath%\lib64;%gskpath%\lib;%path%