15.3. Esplorare Formati Dati e Campi

15.3.1. Dati Raster

I dati raster GIS sono matrici di celle discrete che rappresentano caratteristiche/fenomeni su, sopra o sotto la superficie terrestre. Ogni cella nella griglia raster ha la stessa dimensione, e le celle sono solitamente rettangolari (in QGIS saranno sempre rettangolari). I tipici insiemi di dati raster includono dati di telerilevamento, come fotografie aeree, o immagini satellitari e dati modellati, come l’elevazione o la temperatura.

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

Il formato GeoPackage è ideale per memorizzare dati raster quando si lavora con QGIS. Il popolare e potente formato GeoTiff è una buona alternativa.

QGIS fa uso di informazioni di georeferenziazione all’interno del layer raster (ad esempio, GeoTiff) o di un world file associato per visualizzare correttamente i dati.

15.3.2. Dati vettoriali

Molte delle funzioni e degli strumenti disponibili in QGIS funzionano allo stesso modo, indipendentemente dalla fonte dei dati vettoriali. Tuttavia, a causa delle differenze nelle specifiche dei formati (GeoPackage, ESRI Shapefile, MapInfo e MicroStation, AutoCAD DXF, PostGIS, SpatiaLite, Oracle Spatial, MS SQL Server, SAP HANA Spatial e molti altri), QGIS può gestire alcune proprietà in modo diverso. Il supporto è fornito dal GDAL vector drivers. Questa sezione descrive come lavorare con queste specifiche.

Nota

QGIS supporta (multi)punto, (multi)linea, (multi)poligono, CircularString, CurvaComposta, CurvePolygon, MultiCurve, MultiSurface, tutti opzionalmente con valori Z e/o M.

Dovresti anche tener presente che alcuni driver non supportano alcuni di questi formati, come CircularString, CurvaComposta, CurvePolygon, MultiCurve, MultiSurface. QGIS li convertirà.

15.3.2.1. GeoPackage

Il formato GeoPackage (GPKG) è indipendente dalla piattaforma, ed è implementato come un contenitore di database SQLite, e può essere usato per memorizzare sia dati vettoriali che raster. Il formato è stato definito dall’Open Geospatial Consortium (OGC), ed è stato pubblicato nel 2014.

GeoPackage può essere utilizzato per memorizzare quanto segue in un database SQLite:

  • elementi vettore

  • insiemi di immagini di matrici di tasselli e mappe raster

  • attributi (dati non-spaziali)

  • estensioni

Dalla versione 3.8 di QGIS, GeoPackage può anche memorizzare progetti QGIS. I layer di GeoPackage possono avere campi JSON.

GeoPackage è il formato predefinito per i dati vettoriali in QGIS.

15.3.2.2. Formato ESRI Shapefile

Il formato ESRI Shapefile è ancora uno dei formati di file vettoriali più utilizzati, anche se ha alcune limitazioni rispetto ad esempio a GeoPackage e SpatiaLite.

Un insieme di dati in formato ESRI Shapefile è composto da diversi file. I tre seguenti sono obbligatori:

  1. .shp file contenente le geometrie

  2. .dbf file contenente gli attributi in formato dBase

  3. .shx file indici

Un set di dati in formato ESRI Shapefile può anche includere un file con suffisso .prj, che contiene informazioni sulla proiezione. Sebbene sia molto utile avere un file di proiezione, non è obbligatorio. Un set di dati in formato Shapefile può contenere altri file. Per ulteriori dettagli, consultare le `specifiche tecniche ESRI <https://www.esri.com/content/dam/esrisites/sitecore-archive/Files/Pdfs/library/whitepapers/pdfs/shapefile.pdf>_.

GDAL supporta in lettura e scrittura il formato ESRI Shapefile compresso (shz e shp.zip).

Migliorare le prestazioni per i insiemi di dati in formato ESRI Shapefile

Per migliorare le prestazioni di visualizzazione di un insieme di dati in formato ESRI Shapefile, puoi creare un indice spaziale. Un indice spaziale migliorerà la velocità di zoom e di spostamento. Gli indici spaziali usati da QGIS hanno un’estensione .qix.

Segui questi passi per creare un indice spaziale:

  1. Carica un insieme di dati in formato ESRI Shapefile (vedi Il Pannello Browser)

  2. Apri la finestra di dialogo Proprietà Layer facendo doppio clic sul nome del layer nella legenda o facendo clic destro e scegliendo Proprietà… dal menu contestuale

  3. Nella scheda Sorgente, clicca sul pulsante Crea Indice Spaziale.

Problemi nel caricare un file .prj

Se carichi un dataset in formato ESRI Shapefile con un file .prj e QGIS non è in grado di leggere il sistema di riferimento delle coordinate da quel file, sarà necessario definire manualmente la proiezione corretta nella scheda Proprietà Layer ► Sorgente del layer cliccando il pulsante setProjection Seleziona SR. Questo è dovuto al fatto che i file .prj spesso non forniscono i parametri di proiezione completi come usati in QGIS ed elencati nella finestra di dialogo SR.

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

15.3.2.3. Files Testo Limitato

I file di testo delimitati sono molto comuni e ampiamente utilizzati a causa della loro semplicità e leggibilità - i dati possono essere visualizzati e modificati in un semplice editor di testo. Un file di testo delimitato è costituito da dati tabulari con colonne separate da un determinato carattere e righe separate da interruzioni 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 colonne separate da virgole. I file di testo delimitati possono anche contenere informazioni di posizione (vedi Memorizzazione di informazioni sulla geometria in un file di testo delimitato).

QGIS ti permette di caricare un file di testo delimitato come layer o come tabella ordinaria (vedi Il Pannello Browser o Importare file di testo delimitato). Prima controlla che il file soddisfi i seguenti 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 la geometria deve essere abilitata, il file deve contenere campo(i) per definire la geometria. Questo campo(i) può 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 un file CSV con colonne non stringhe, puoi avere un file CSVT di accompagnamento (vedere la sezione Utilizzo di file CSVT per controllare la formattazione del campo).

Il file di dati di elevazione elevp.csv nell” insieme dei dati campione di QGIS (vedi la sezione Installare dati campione) è un esempio di un file di testo valido:

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

Alcune cose da notare sul file di testo:

  1. Il file di testo di esempio usa ; (punto e virgola) come delimitatore (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. Non si usano virgolette (") 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 di informazioni sulla geometria 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… ), per geometrie puntuali di dati;

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

Sono supportati gli elementi con geometrie curve (CircularString, CurvePolygon e CompoundCurve) . Ecco alcuni esempi di tipi di geometria in un file di testo delimitato con geometrie codificate come 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))

I file di testo delimitati supportano anche le coordinate Z e M nelle geometrie:

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 si caricano i file CSV, il driver GDAL presume che tutti i campi siano stringhe (cioè testo), a meno che non gli venga detto diversamente. Puoi creare un file CSVT per indicare a GDAL (e a QGIS) il tipo di dati delle diverse colonne:

Type

Name

Example

Whole number

Integer

4

Booleano

Integer(Boolean)

true

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

CoordX

CoordX

8.8249

CoordY

CoordY

47.2274

Point(X)

Point(X)

8.8249

Point(Y)

Point(Y)

47.2274

WKT

WKT

POINT(15 20)

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.

Suggerimento

Rilevamento dei tipi di campo

Invece di utilizzare un file CSVT per indicare i tipi di dati, QGIS offre la possibilità di rilevare automaticamente i tipi di campo e di modificare i tipi di campo supposti.

15.3.2.4. Layer PostGIS

I layer PostGIS sono memorizzati in un database PostgreSQL. I vantaggi di PostGIS sono le capacità di indicizzazione spaziale, filtraggio e interrogazione. Utilizzando PostGIS, le funzioni vettoriali come select e identify funzionano in modo più accurato di quanto non facciano con i layer GDAL in QGIS.

Suggerimento

Layer PostGIS

Normalmente, un layer PostGIS è identificato da una voce nella tabella geometry_columns. QGIS può caricare layer che non hanno una voce nella tabella geometry_columns. Questo include sia tabelle che viste. Fai riferimento al tuo manuale PostgreSQL per informazioni sulla creazione di viste.

Questa sezione contiene alcuni dettagli su come QGIS accede ai layer PostgreSQL. La maggior parte delle volte, QGIS dovrebbe semplicemente fornirti una lista di tabelle di database che possono essere caricate, e le caricherà su richiesta. Tuttavia, se hai problemi a caricare una tabella PostgreSQL in QGIS, le informazioni che seguono possono aiutarti a capire i messaggi di QGIS e darti indicazioni per modificare la tabella PostgreSQL o la definizione della vista per permettere a QGIS di caricarla.

Nota

Un database PostgreSQL può memorizzare anche i progetti QGIS.

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 offre una casella di controllo Select at id che è attivata di default. 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.

Nota

Tabella esterna PostgreSQL

Le tabelle esterne PostgreSQL non sono esplicitamente supportate dal provider PostgreSQL e saranno gestite come una vista.

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.

  1. Eseguire un backup PLAIN della tabella ``layer_style””.

  2. Aprire il file in un editor di testo

  3. Modificare la riga SET xmloption = content; in SET XML OPTION DOCUMENT;

  4. Salvare il file

  5. Utilizzare psql per ripristinare la tabella nel nuovo database

Filtro lato server

QGIS permette di filtrare gli elementi già sul lato server. Controlla Impostazioni ► Opzioni ► Sorgenti Dati ► checkbox Esegui le espressioni lato server se possibile per farlo. Solo le espressioni supportate saranno inviate al database. Le espressioni che usano operatori o funzioni non supportate saranno restituita alla esecuzione in locale.

Supporto di PostgreSQL alle diverse tipologie di dati

I tipi di dati supportati da PostgreSQL includono: intero, numero in virgola mobile, booleano, oggetto binario, dati stringa a lunghezza variabile, geometria, timestamp, array, hstore e json.

15.3.2.5. 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 uno strumento chiamato shp2pgsql, che può essere usato per importare set di dati in formato Shapefile in un database compatibile con PostGIS. Per esempio, per importare un set di dati in formato Shapefile chiamato lakes.shp in un database PostgreSQL chiamato gis_data, usa il seguente comando:

shp2pgsql -s 2964 lakes.shp lakes_new | psql gis_data

Questo crea un nuovo layer chiamato lakes_new nel database gis_data. Il nuovo layer avrà un identificatore di riferimento spaziale (SRID) di 2964. Vedi la sezione Lavorare con le Proiezioni per maggiori informazioni sui sistemi di riferimento spaziale e le proiezioni.

Suggerimento

Esportare dati da PostGIS

C’è anche uno strumento per esportare insiemi di dati PostGIS in formato Shapefile: pgsql2shp. Viene fornito all’interno della tua distribuzione PostGIS.

ogr2ogr

Oltre a shp2pgsql e DB Manager, esiste un altro strumento per alimentare i dati geografici in PostGIS: ogr2ogr. Fa parte dell’installazione di GDAL.

Per importare un insieme di dati in formato Shapefile in PostGIS, fai come segue:

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

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

Da sottolineare che GDAL deve essere compilato con PostgreSQL per supportare PostGIS. Si può verificare digitando (in nix):

ogrinfo --formats | grep -i post

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

export PG_USE_COPY=YES

ogr2ogr non crea indici spaziali come fa shp2pgsl. Devi crearli manualmente, usando successivamente il normale comando SQL CREATE INDEX, come passo extra (come descritto nella prossima sezione Migliorare le prestazioni).

Migliorare le prestazioni

Recuperare elementi da un database PostgreSQL può essere dispendioso in termini di tempo, specialmente su una rete. Puoi migliorare le prestazioni di estrazione dei layer PostgreSQL assicurandoti che esista un indice spaziale PostGIS su ogni layer nel database. PostGIS supporta la creazione di un indice GiST (Generalized Search Tree) per velocizzare la ricerca spaziale (le informazioni sull’indice GiST sono prese dalla documentazione di PostGIS disponibile all’indirizzo https://postgis.net).

Suggerimento

Puoi usare il DB Manager per creare un indice per il tuo layer. Dovresti prima selezionare il layer e cliccare su Tabella ► Modifica tabella, andare alla 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 grandi, la creazione dell’indice può richiedere molto tempo. Una volta che l’indice è stato creato, si dovrebbe eseguire un VACUUM ANALYZE. Vedi la documentazione di PostGIS (POSTGIS-PROJECT in Letteratura e riferimenti web) per maggiori informazioni.

Il seguente esempio crea 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$

15.3.2.6. Vettori SpatiaLite

Se vuoi salvare un vettore usando il formato SpatiaLite, puoi farlo seguendo le istruzioni in Creare nuovi layer da layer esistente. Seleziona SpatiaLite come Formato e inserisci sia Nome file che Nome layer.

Inoltre, puoi selezionare SQLite come formato e poi aggiungere SPATIALITE=YES nel campo Opzioni personalizzate ► Origine dati. Questo dice a GDAL di creare un database SpatiaLite. Vedi anche https://gdal.org/drivers/vector/sqlite.html.

QGIS supporta anche le viste modificabili in SpatiaLite. Per la gestione dei dati di SpatiaLite, puoi anche usare il plugin di base DB Manager.

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

15.3.2.7. Parametri specifici di GeoJSON

Con exporting layers in GeoJSON, sono disponibili alcune specifiche Opzioni del layer. Queste opzioni provengono 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.

  • RFC7946 di default verrà usato GeoJSON 2008. Se impostato su YES, verrà usato lo standard aggiornato RFC 7946. Il default è NO (quindi GeoJSON 2008). Vedi https://gdal.org/drivers/vector/geojson.html#rfc-7946-write-support per le principali differenze, in breve: solo EPSG:4326 è permesso, altri SR saranno trasformati, i poligoni saranno scritti in modo da seguire la regola della mano destra per l’orientamento, i valori di un array «bbox» sono [west, south, east, north], non [minx, miny, maxx, maxy]. Alcuni nomi di estensioni sono vietati negli oggetti FeatureCollection, Feature e Geometry, la precisione predefinita delle coordinate è di 7 cifre decimali

  • WRITE_BBOX impostato su YES per includere il perimetro di delimitazione delle geometrie a livello di elemento e insieme di elementi

Oltre a GeoJSON c’è anche un’opzione per esportare in «GeoJSON - Newline Delimited» (vedi https://gdal.org/drivers/vector/geojsonseq.html). Invece di una FeatureCollection con Features, puoi esportare un tipo (probabilmente solo Features) separato sequenzialmente con newline.

GeoJSON - Newline Delimited ha anche alcune opzioni specifiche per i Layer:

  • COORDINATE_PRECISION vedi sopra (come per GeoJSON)

  • RS se iniziare i record con il carattere RS=0x1E. La differenza è come gli elementi sono separati: solo da un carattere newline (LF) (Newline Delimited JSON, geojsonl) o aggiungendo anche un carattere record-separator (RS) (dando GeoJSON Text Sequences, geojsons). Il valore predefinito è NO. Ai file viene data l’estensione .json se l’estensione non è fornita.

15.3.2.8. SAP HANA Layer Spaziali

Questa sezione contiene alcuni dettagli su come QGIS accede ai layer di SAP HANA. Nella maggior parte dei casi, QGIS dovrebbe semplicemente fornire un elenco di tabelle e viste del database che possono essere caricate e le caricherà su richiesta. Tuttavia, se si riscontrano problemi nel caricamento di una tabella o di una vista SAP HANA in QGIS, le informazioni riportate di seguito possono aiutare a capire la causa principale e a risolvere il problema.

Identificazione degli elementi

Se vuoi utilizzare tutte le funzionalità di modifica degli elementi di QGIS, è necessario che QGIS sia in grado di identificare senza ambiguità ogni elemento di un layer. Internamente, QGIS utilizza un intero con segno a 64 bit per identificare gli elementi, mentre l’intervallo negativo è riservato a scopi speciali.

Pertanto, il provider SAP HANA richiede una chiave univoca che possa essere mappata su un numero intero positivo a 64 bit per supportare pienamente le funzionalità di modifica degli elementi di QGIS. Se non è possibile creare tale mappatura, puoi visualizzare gli elementi, ma la modifica potrebbe non funzionare.

Aggiungere tabelle

Quando si aggiunge una tabella come layer, il provider SAP HANA utilizza la chiave primaria della tabella per mapparla a un id univoco dell’elemento. Pertanto, per avere un supporto completo per la modifica delle caratteristiche, devi avere una chiave primaria per la definizione della tua tabella.

Il provider SAP HANA supporta chiavi primarie a più colonne, ma se vuoi ottenere migliori prestazioni, la chiave primaria deve essere una singola colonna di tipo INTEGER.

Aggiungere viste

Quando si aggiunge una vista come layer, il provider SAP HANA non è in grado di identificare automaticamente le colonne che identificano senza ambiguità un elemento. Inoltre, alcune viste sono di sola lettura e non possono essere modificate.

Per avere un supporto completo per la modifica degli elementi, la vista deve essere aggiornabile (controllare la colonna IS_READ_ONLY nella vista di sistema SYS.VIEWS per la vista in questione) e devi fornire manualmente a QGIS una o più colonne che identificano un elemento. Le colonne possono essere fornite utilizzando Layer ► Aggiungi Layer ► Aggiungi Layer SAP HANA Spatial e quindi selezionando le colonne nella colonna Feature id. Per ottenere prestazioni ottimali, il valore Feature id dovrebbe essere una singola colonna INTEGER.

15.3.3. Layer che attraversano 180° di longitudine

Molti software GIS non gestiscono i layer con un sistema di riferimento geografico (lat/lon) che attraversa la linea dei 180 gradi di longitudine. Di conseguenza, se apriamo un layer di questo tipo in QGIS, potremmo vedere due località molto separate, che dovrebbero apparire vicine. In Fig. 15.27, il piccolo punto all’estrema sinistra della mappa (Isole Chatham) dovrebbe trovarsi all’interno della griglia, a destra delle isole principali della Nuova Zelanda.

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

Fig. 15.27 Mappa in lat/lon che attraversa la linea di 180° di longitudine

15.3.3.1. Risolvere in PostGIS

Una soluzione consiste nel trasformare i valori della longitudine utilizzando PostGIS e la funzione ST_ShiftLongitude. Questa funzione legge ogni punto/vertice in ogni componente di ogni elemento di una geometria e sposta la sua coordinata di longitudine da -180..0° a 180..360° e viceversa se compresa tra questi intervalli. Questa funzione è simmetrica, quindi il risultato è una rappresentazione a 0..360° di un dato a -180..180° e una rappresentazione a -180..180° di un dato a 0..360°.

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

Fig. 15.28 Attraversamento del 180° di longitudine applicando la funzione ST_ShiftLongitude.

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

  2. Utilizza l’interfaccia della linea di comando di PostGIS per eseguire il seguente comando:

    -- In this example, "TABLE" is the actual name of your PostGIS table
    update TABLE set geom=ST_ShiftLongitude(geom);
    
  3. 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).