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 di dati geospaziali racchiusi in un singolo 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à). Consente l'accesso simultaneo in lettura da parte di più utenti, mentre nel caso si debba ricorrere alla scrittura (editing) condivisa andrebbero preferiti altri formati più adatti alla modifica collaborativa di dati geospaziali.
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è in quanto non è strutturato per gestire accessi simultanei in modifica o assegnare permessi in lettura o scrittura ed inoltre essendo solo un contenitore di database, 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 .
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.
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à.
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.
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.
https://www.qgis.org/en/site/forusers/visualchangelog316/index.html#id65
Dataset Comuni FVG 2021 : https://irdat.regione.fvg.it/consultatore-dati-ambientali-territoriali/home
Dataset DBT_TS : https://eaglefvg.regione.fvg.it/eagle/main.aspx?configuration=Guest
https://github.com/pigreco/benchmark/blob/master/prove/estrai_vertici.md
https://www.gaia-gis.it/fossil/libspatialite/wiki?name=benchmark-4.0
https://oslandia.com/en/2019/06/21/qgis-3-and-performance-analysis/
https://pigrecoinfinito.com/2018/04/08/qgis-e-il-formato-GeoPackage/
https://massimilianomoraca.it/blog/gis/il-geopackage-una-valida-alternativa-al-formato-shape/