domenica 2 aprile 2023

GeoPackage, Shapefile e dintorni.

GeoPackage, Shapefile e dintorni. Caratteristiche, comparazioni, benchmark e relativi ambiti di utilizzo in QGIS.
(Tempo di lettura 9 ')

In questo post vengono riportate alcune considerazioni sulle differenze strutturali e prestazionali nell'utilizzo del formato GeoPackage in QGIS, non solo rispetto al maturo Shapefile ma anche nei confronti dei formati SpatiaLite e GeoJSON, accomunati dal fatto di essere database spaziali standalone (1), ovvero che non richiedono un server per funzionare.

In linea di massima il GeoPackage (2) può essere definito come un formato aperto per la memorizzazione e il trasferimento di informazioni geospaziali, attraverso l'utilizzo di un unico file con estensione .gpkg.

La struttura, costruita sullo schema del database SQLite3 (3) e nel rispetto della codifica standard definita dall’OGC (Open Geospatial Consortium) (4), rende il formato GeoPackage capace di contenere più livelli di dati vettoriali (5), immagini raster, indici spaziali, stili dei layer e altri tipi di tabelle senza geometrie associate, come ad esempio i metadati e perfino lo stesso progetto QGIS, il tutto in un singolo file che può essere scambiato facilmente anche tra computer con processori e sistemi operativi diversi (concetto di interoperabilità).

Progettato per gestire archivi complessi e dati voluminosi fino a 140 TByte (6), il GeoPackage permette di superare alcuni limiti anacronistici dello Shapefile (nato nell’epoca del MS-DOS), tra cui i 10 caratteri per i nomi delle intestazioni dei campi, quello dei 255 caratteri per gli attributi testuali e la soglia dei 2 Gbyte per i file. Per di più, gestisce correttamente i campi data+ora (DateTime) ed applica diversi vincoli di integrità che proteggono il database da cancellazioni e altri danni accidentali (ma non vi prepara il caffè ovvero è solo un contenitore di database pertanto non gestisce le query e non effettua le altre operazioni topologiche sui database che invece devono essere eseguite tramite software per l’analisi spaziale come QGIS).

Sebbene QGIS poteva già con la versione 2.10.1 leggere e scrivere file in formato GeoPackage e successivamente con la versione 2.18 leggere anche Tiles, benché con importanti limitazioni, l’integrazione definitiva è avvenuta con il rilascio, nel febbraio del 2018, della versione 3.0 di QGIS, nella quale le impostazioni predefinite per operare sui layer vettoriali sono passate dal proporre il formato Shapefile a quello GeoPackage.

Questo cambiamento non dovrebbe spaventare chi è abituato a lavorare con i layer Shapefile, sempre presenti in QGIS nell’elenco dei formati disponibili, ma piuttosto rappresenta un invito ad avvalersi, per l’interscambio dei dati geospaziali, di un formato tecnologicamente più evoluto e in continuo aggiornamento , che contiene in un unico file geometrie vettoriali, dati tabellari e livelli raster, mentre lo Shapefile, come noto, può memorizzare solo layer vettoriali utilizzando almeno 3 file distinti.


Come già accennato, la principale differenza, a livello macroscopico, che si può osservare affiancando una cartella contenente un layer salvato nel formato Shapefile con una contenente lo stesso layer ma in formato GeoPackage è che nella prima ci saranno almeno 3 file, con estensione .shp, .dbf, .shx e forse molti altri con estensioni diverse, mentre nella seconda sarà presente un solo file con estensione .gpkg , come schematizzato nella seguente figura esplicativa :




Risulta opportuno, a questo punto, fare un breve cenno sul formato SpatiaLite che esteriormente presenta una forte somiglianza con il GeoPackage in quanto entrambi risultano costituiti da un unico file e condividono lo stesso “motore” SQLite (7) ma, a parte queste caratteristiche comuni, appartengono a due categorie funzionalmente distinte. Il GeoPackage è in sostanza un contenitore di database come il suo antenato Shapefile, mentre lo SpatiaLite include sia le librerie SQL che le estensioni per gestire i dati geospaziali e ciò rende tale formato indipendente dall'applicativo GIS utilizzato, per cui in specifici ambiti operativi potrebbe costituire, secondo un’autorevole fonte, una valida alternativa standalone rispetto a formati client-server come PostgreSQL/PostGIS o per altri Spatial DBMS .

Per avere un’ordine di grandezza delle differenti dimensioni dei file memorizzati e dei tempi di caricamento di uno o più layer vettoriali salvati nei formati Shapefile, GeoPackage, SpatiaLite e GeoJSON, sono stati effettuati alcuni test speditivi, svolti esclusivamente con gli strumenti di processing e di misura presenti in QGIS (8), al fine di determinare i valori medi relativi a tre caricamenti per ciascuno dei tre dataset utilizzati per la prova comparativa, il primo riguarda il layer dei confini dei Comuni del FVG 2021 contenente  215 poligoni con 7 attributi, il secondo è il classico Corine Land Cover (CLC18_IVLIV_IT), contenente un layer di 136.391 poligoni con 4 attributi e l’ultimo composto da 57 layer e da tre diversi tipi di geometrie, 4 layer contenenti 498.323 punti, 15 layer con 177.115 linee e 38 layer con 644.357 poligoni che costituiscono il dataset DBTfvg Lotto Giuliano (shape_DBT_TS_V20201124). La configurazione del sistema di prova era composta da un PC Dell Precision Tower 3620 (CPU Intel Xeon E3-1245 @ 3.50GHz, RAM 32 GB, SSD) con sistema operativo Windows 10 (Ver. 2009) e QGIS versione 3.22.10 LTR .


Formato database

N. geometrie
e tipo

Totale MByte

N.
file

Var. % dim.shp

Tempo (s) layer sorgente/mappa

Var. rel. vel.shp 

Shapefile FVG

125 Polygon

20

4

0%

0,02133

1,00

GeoPackage FVG

125 Polygon

20,1

1

0,5%

0,01433

1,49

SpatiaLite FVG

125 Polygon

26,4

1

32%

0,01067

2,00

GeoJSON FVG 

125 Polygon

65,5

1

227%

11,779

0,00181

Shapefile CLC

136.391 Polygon

265

8

0%

0,01967

1,00

GeoPackage CLC

136.391 Polygon

306

1

15%

0,01167

1,69

SpatiaLite CLC

136.391 Polygon

313

1

18%

0,01033

1,90

GeoJSON CLC 

136.391 Polygon

753

1

184%

143,692

0,00014

Shapefile DBT_TS

498.323 Point

2.800

667

0%

0,966

1,00

177.115 Line

6443.57 Polygon

GeoPackage DBT_TS

498.323 Point

1.017

1

-64%

1,42

0,68

177.115 Line

644.357 Polygon

SpatiaLite DBT_TS

498.323 Point

838

1

-70%

0,295

3,27

177.115 Line

644.357 Polygon

GeoJSON DBT_TS

498.323 Point




Test non effettuato


177.115 Line

644.357 Polygon


A prescindere dalle maggiori funzionalità offerte dall’uno o dall'altro formato, ciò che balza subito agli occhi scorrendo i risultati tabellati nella colonna "Var. % dim.shp", relativa all'indice di variazione dimensionale in MB rispetto allo Shapefile, è la minore occupazione di spazio su disco del formato Shapefile per dataset fino a circa 300 MByte, mentre nel caso del dataset composto da 57 Shapefile con 667 file e una dimensione totale di 2.800 MByte, si osserva una riduzione di circa ⅔ delle dimensioni del dataset passando ai formati più recenti GeoPackage e SpatiaLite.


Risultati più interessanti, invece, quelli riportati nell'ultima colonna "Var. rel. vel.shp", che rappresenta una sorta di “velocità” di caricamento del formato in esame rispetto a quella base dello Shapefile e costituisce un indice prestazionale, migliore se superiore all’unità o peggiore se inferiore. In termini più precisi, esprime il rapporto tra il tempo di caricamento del layer Shapefile sorgente, se unico, o dei layer Shapefile della mappa, se molteplici, e il tempo impiegato per caricare il dataset nel relativo formato, sempre misurato in secondi con l'apposito strumento di QGIS .

Il gradino più alto sul podio, con il minor tempo di caricamento dei dataset per ognuna delle 3 prove , risulta stabilmente occupato dal formato SpatiaLite, che vanta anche un ottimo piazzamento relativamente alle dimensioni del file generato, mentre il formato GeoPackage ottiene il secondo posto per dataset fino a circa 300 MB mentre, nel caso del dataset del DBT_TS, manifesta un comportamento anomalo piazzandosi, inaspettatamente, addirittura dietro allo Shapefile (anche ripetendo il test in altre condizioni) . Al quarto e ultimo posto si piazza, per l'eccessivo spazio occupato dal file e per la lenta "velocità" di caricamento, il dataset in formato GeoJSON, che però risulta più orientato alle applicazioni WEB.


Anche se non può certo definirsi statisticamente rappresentativo un test speditivo eseguito con 3 dataset su un solo PC e con un'unica versione di QGIS, si tratta comunque di una prima misura sperimentale. Ad ogni modo, per chi volesse cimentarsi in simili prove, i dataset necessari possono essere liberamente scaricati presso i riferimenti riportati alla fine di questo post (9)(10)(11).


In merito all’annosa questione della transizione dal formato Shapefile a quello GeoPackage, ritengo che forse potrebbe non avvenire del tutto, almeno non con modalità così pervasive come ci si aspettava, in quanto vi sono diversi settori produttivi e amministrativi, che svolgono prevalentemente attività diverse dalla cartografia o geomatica, nelle quali lo Shapefile risulta, a tutti gli effetti, più che sufficiente per sopperire alle circoscritte esigenze di rappresentazione dei dati territoriali relativi a piccole realtà locali o a quelle progettuali per opere pubbliche di modesta entità.


Riporto una breve esemplificazione che spero possa chiarire meglio le criticità che possono verificarsi in alcuni ambiti operativi. Tra le complesse attività di validazione tecnica e normativa del progetto di un intervento redatto da terzi, una parte riguarda la verifica degli elaborati grafici allegati. Talvolta, nonostante l’indicazione di produrre file vettoriali territoriali in formato Shapefile con S.R. RDN2008/TM33 (EPSG6708), può capitare di riceverli in formato .DWG o .DXF, talora non georiferiti o ancora in Gauss Boaga, ma anche in questi casi non conviene lamentarsi troppo in quanto può accadere di scoprire che tutti gli elaborati grafici pervenuti sono esclusivamente in formato .PDF, bloccati in modifica e copia, però rigorosamente firmati digitalmente.




Va detto inoltre che i geopacchetti (termine talvolta utilizzato al posto di GeoPackage), se da un lato offrono numerose caratteristiche e funzionalità avanzate, dall’altro richiedono un certo grado di padronanza nella gestione di più database in un unico contenitore e la conoscenza di alcuni concetti non banali la cui curva di apprendimento potrebbe rappresentare un limite in molti ambiti operativi non strettamente centrati sulle esigenze specifiche della cartografia digitale.
Non va neppure sottovalutata la complessità della struttura del formato GeoPackage, la cui corretta gestione da parte del sistema è di fondamentale importanza per mantenere l’integrità del database geospaziale e qualora venisse compromessa potrebbero verificarsi sporadici inconvenienti, come ad esempio l’impossibilità di modificare la cella di una tabella durante l’editing o altre criticità. Nella remota ipotesi che ciò si verifichi in QGIS, la soluzione consigliata è quella di creare un nuovo profilo o cancellare quello di default e riavviare l'applicativo. Sembra che tale rarissima anomalia sia da attribuire a delle configurazioni sbagliate fatte involontariamente dall’utente oppure all’installazione di plugin difettosi (NdR con il beneficio del dubbio, alcuni nerd sostengono che ciò capiti solo a chi utilizza Windows come sistema operativo mentre sulle versioni Linux si dice che queste cose non accadono).
Per quanto detto sopra, ritengo sia più probabile il raggiungimento di una situazione di pacifica coesistenza tra i due formati standalone, nella quale lo Shapefile potrebbe venire utilizzato per archiviare singoli database territoriali con strutture semplici e di dimensioni contenute mentre il GeoPackage potrebbe essere dedicato alla gestione di database geospaziali con strutture complesse o voluminose. Il formato SpatiaLite, invece, potrebbe essere impiegato nei casi in cui sia richiesta un’elevata velocità di caricamento di dataset particolarmente voluminosi.
In ogni caso tra le FAQ del sito GeoPackage.org, che è il sito di riferimento per tale formato, si legge la seguente risposta alla domanda se il GeoPackage sostituirà lo Shapefile: “Potrebbe ma non è necessario. Se tutto ciò di cui hai bisogno è semplicemente trasferire o visualizzare, il formato GeoPackage potrebbe essere eccessivo e qualcosa come GeoJSON potrebbe essere più appropriato… “, ma avrei qualche dubbio nell'adoperare il formato GeoJSON per l’interscambio di dati geospaziali, visti gli esiti dei test effettuati.
Comunque, trattandosi di punti di vista personali e soggettivi ognuno è libero di nutrire aspettative e convinzioni differenti rispetto a quelle sopra esposte (clausola liberatoria), per il resto ritengo sia meglio lasciare che siano le scelte fatte dai singoli utenti, nel corso di un congruo lasso di tempo, a dirimere la questione.

Altri tipi di analisi delle prestazioni che riguardano i tempi di esecuzione di alcune query spaziali sono consultabili sulle pagine riportate nei punti (12), (13), (14), mentre ai punti (15) e (16) sono riportati i link a due articoli che avevano affrontato in precedenza il tema dei vantaggi del formato GeoPackage rispetto allo Shapefile.

Fonti:
  1. L’alternativa all'architettura standalone, è rappresentata dai database client-server, come PostgreSQL/PostGis, che per lavorare richiedono l’accesso, da uno o più terminali client, a un server dedicato alla gestione degli accessi, all’aggiornamento dei dati e al controllo della loro integrità.

  2. http://www.geopackage.org/guidance/getting-started.html

  3. https://it.wikipedia.org/wiki/SQLite

  4. https://www.ogc.org/standard/geopackage/

  5. Per dati vettoriali si intendono quelle geometrie composte da punti o linee o poligoni e dai relativi attributi visualizzati in tabelle organizzate in righe, chiamate record e in colonne, chiamate campi.

  6. http://www.GeoPackage.org/spec/

  7. A voler essere precisi, l’SQLite è un DBMS non geografico di tipo standalone mentre PostgreSQL/PostGis è uno Spatial DBMS, cioè è in grado di svolgere, al suo interno, elaborazioni geografiche oltre a quelle tabellari, oltreché funzionare in modalità client-server. 

  8. https://www.qgis.org/en/site/forusers/visualchangelog316/index.html#id65

  9. Dataset Comuni FVG 2021 :   https://irdat.regione.fvg.it/consultatore-dati-ambientali-territoriali/home

  10. Dataset CLC :  https://groupware.sinanet.isprambiente.it/uso-copertura-e-consumo-di-suolo/library/copertura-del-suolo/corine-land-cover/corine-land-cover-2018-iv-livello

  11. Dataset DBT_TS :  https://eaglefvg.regione.fvg.it/eagle/main.aspx?configuration=Guest

  12. https://github.com/pigreco/benchmark/blob/master/prove/estrai_vertici.md

  13. https://www.gaia-gis.it/fossil/libspatialite/wiki?name=benchmark-4.0

  14. https://oslandia.com/en/2019/06/21/qgis-3-and-performance-analysis/

  15. https://pigrecoinfinito.com/2018/04/08/qgis-e-il-formato-GeoPackage/

  16. https://massimilianomoraca.it/blog/gis/il-geopackage-una-valida-alternativa-al-formato-shape/

 </


CC-BY-Daniele Samez 
N.d.R. Per la stesura di questo scritto non si è fatto uso di strumenti di A. I. e ciò può essere facilmente desunto dalla presenza di numerose imperfezioni e imprecisioni nel testo di cui sopra ;-).

Post più visualizzati