Che cos'è uno shapefile e quali file servono?
Uno shapefile è un formato GIS vettoriale creato da Esri all'inizio degli anni Novanta. È un gruppo di file con lo stesso nome: il .shp contiene la geometria, il .shx un indice e il .dbf gli attributi. Un file .prj indica il sistema di coordinate e un .cpg la codifica del testo. FileReshape può visualizzare uno shapefile o convertirlo in GeoJSON, KML o GeoPackage nel Suo browser, senza caricarlo.
Da dove viene lo shapefile
Esri ha introdotto lo shapefile all'inizio degli anni Novanta con il suo programma desktop ArcView, come modo semplice per memorizzare punti, linee e poligoni insieme a una tabella di attributi. Nel 1998 Esri ha pubblicato la ESRI Shapefile Technical Description, un white paper che documenta la struttura dei file di geometria e di indice. Poiché la descrizione era pubblica e il formato era semplice, altri software potevano leggerlo e scriverlo senza licenza, e lo shapefile è diventato il formato di scambio comune dei GIS desktop.
Questo è ancora oggi il suo punto di forza principale. Portali di open data delle amministrazioni pubbliche, topografi, uffici di pianificazione e aziende di servizi pubblicano shapefile perché quasi ogni programma GIS, da QGIS e ArcGIS Pro a GDAL, i caricatori di PostGIS e molti programmi CAD, sa leggerli. Il formato mostra però anche la sua età, e i limiti descritti qui sotto sono il motivo per cui esistono formati più recenti.
I file che compongono uno shapefile
Uno shapefile è un insieme di file che condividono un nome di base, come parcels.shp, parcels.shx e parcels.dbf. Tre di essi sono obbligatori. Il file .shp memorizza la geometria di ogni elemento come un elenco di coordinate. Il file .shx è un indice con la posizione di ogni record nel .shp, così i programmi possono saltare direttamente all'elemento numero 5.000 invece di leggere tutto ciò che lo precede. Il file .dbf è la tabella degli attributi in formato dBASE, con una riga per elemento nello stesso ordine delle forme. Il legame tra una forma e la sua riga non è altro che questo ordine.
Gli altri file sono facoltativi. Il file .prj contiene il sistema di coordinate come una riga di well-known text (WKT), nel dialetto usato da Esri. Il file .cpg è un minuscolo file di testo che indica la codifica dei caratteri del .dbf, come UTF-8 o 1252. I file .sbn e .sbx sono un indice spaziale usato dal software Esri, e .qix è un altro indice spaziale scritto da GDAL e MapServer; entrambi servono solo a velocizzare il disegno e la ricerca nei file grandi. Il file .shp.xml contiene metadati come una descrizione, l'autore e la data. Può trovare anche file .atx per gli indici degli attributi. Se manca un file facoltativo, i programmi possono comunque leggere i dati, ma senza .prj la posizione è un'ipotesi, e senza .cpg i caratteri speciali possono risultare sbagliati.
I nomi di base devono corrispondere esattamente, comprese maiuscole e minuscole nei sistemi che ne tengono conto. Rinominare solo roads.shp in streets.shp rompe l'insieme. Rinomini, copi e invii tutte le parti insieme; il modo più semplice per tenerle unite è un .zip dell'intero insieme.
Un solo tipo di geometria per shapefile
Ogni shapefile dichiara un tipo di forma nella sua intestazione, e ogni elemento deve essere di quel tipo oppure vuoto. I tipi principali sono Point, MultiPoint, PolyLine (linee) e Polygon, ciascuno in una versione 2D semplice, una versione con valori Z per l'altezza e una versione con valori M per le misure, come la distanza lungo un percorso. Un tipo usato raramente, MultiPatch, descrive superfici 3D. Un file non può mescolare punti e poligoni, quindi un insieme di dati con edifici e relativi ingressi deve essere memorizzato come due shapefile.
I poligoni sono memorizzati come anelli. Nella descrizione pubblicata, il contorno esterno va in senso orario e i buchi in senso antiorario, e un poligono con più parti separate, come un paese con isole, è un unico elemento con più anelli. Il formato non memorizza alcuna topologia: due particelle confinanti memorizzano ciascuna il proprio confine comune separatamente, e nulla nel file garantisce che le linee coincidano.
Limiti della tabella degli attributi .dbf
Molte stranezze dello shapefile derivano dal formato di tabella dBASE, che risale agli anni Ottanta. I nomi dei campi possono avere al massimo 10 caratteri, quindi Population_2020 deve diventare qualcosa come POP_2020, e alcuni programmi li trasformano anche in maiuscolo. I campi di testo contengono al massimo 254 caratteri. Anche il numero di campi è limitato; il valore indicato di solito è 255.
I tipi di dati sono pochi. Il testo è memorizzato in campi carattere a larghezza fissa, i numeri in campi numerici o a virgola mobile con larghezza e numero di decimali fissi, vero e falso in campi logici, e le date in campi data nella forma anno, mese, giorno. Non c'è l'ora del giorno né il fuso orario, quindi un timestamp deve essere memorizzato come testo o diviso in più campi. Non esiste nemmeno un vero valore nullo: un numero vuoto viene di solito scritto come spazi o come zero, a seconda del programma, e alcuni lettori mostrano quindi 0 dove il valore era in realtà sconosciuto. Non ci sono liste, valori annidati né campi binari.
Limiti di dimensione dei file
Le intestazioni dei file .shp e .shx memorizzano offset e lunghezze come numeri a 32 bit, da cui deriva la regola abituale che ogni parte di uno shapefile, in particolare il .shp e il .dbf, deve restare sotto i 2 GB. Alcuni programmi, tra cui GDAL, possono leggere e scrivere file fino a circa 4 GB se glielo si indica, ma altri software potrebbero rifiutarli. Un insieme di dati più grande deve essere diviso in più shapefile o memorizzato in un altro formato. In pratica è spesso il .dbf a raggiungere per primo il limite, perché ogni campo di testo occupa la sua intera larghezza in ogni riga, anche quando la maggior parte dei valori è breve.
Codifica del testo e file .cpg
Il formato .dbf è precedente a Unicode. Il testo è memorizzato come byte, e l'intestazione ha un byte, spesso chiamato language driver ID, che può indicare una code page come Windows-1252 o una code page DOS. Molti programmi lo lasciano vuoto o lo impostano in modo errato. Il file .cpg è stato aggiunto in seguito per dichiarare chiaramente la codifica, e il software moderno scrive in UTF-8 insieme a un .cpg che lo indica.
Quando né il .cpg né il byte dell'intestazione sono corretti, un programma deve tirare a indovinare, e nomi come Malmö, Ærø o São Paulo si trasformano in sequenze di simboli strani. Se lo vede, di solito i dati sono intatti. Indichi al Suo programma GIS quale codifica usare quando apre il layer, per esempio nelle proprietà del layer in QGIS, oppure aggiunga un file .cpg con il nome corretto. Quando scrive shapefile, scelga UTF-8 e tenga il .cpg insieme alle altre parti.
Sistemi di coordinate e file .prj
Il file .shp memorizza semplici numeri senza dire che cosa significano. Potrebbero essere longitudine e latitudine in gradi, metri in un fuso UTM o piedi in un sistema State Plane degli Stati Uniti. Solo il file .prj indica ai programmi quale sistema di riferimento delle coordinate si applica, e lo fa come testo WKT invece che come codice EPSG. La maggior parte dei software sa associare le definizioni comuni a un codice EPSG, ma file .prj insoliti o modificati a mano portano a volte a un'interpretazione leggermente diversa.
Senza un .prj, un programma può presumere WGS84 oppure chiederLe il sistema. Valori tra -180 e 180 e tra -90 e 90 sono probabilmente gradi; valori grandi, nell'ordine delle centinaia di migliaia o dei milioni, sono metri o piedi proiettati. Assegnare un sistema di coordinate si limita a etichettare i dati. Riproiettare ricalcola invece davvero le coordinate, e le due cose non vanno confuse.
Alternative allo shapefile
Il GeoPackage è uno standard aperto dell'Open Geospatial Consortium, basato su un database SQLite in un unico file .gpkg. Contiene più layer, nomi di campo lunghi, vere date e ore, valori nulli e grandi insiemi di dati, ed è il formato predefinito di QGIS. È una buona scelta per consegnare un intero progetto. Il GeoJSON è un formato JSON di testo semplice, standardizzato come RFC 7946. È facile da leggere in un editor di testo ed è il formato naturale per mappe web e API, ma lo standard prevede coordinate WGS84 e i file diventano grandi. FlatGeobuf è un formato binario più recente in un unico file, con un indice spaziale integrato, pensato per una lettura veloce e per lo streaming sul web; il supporto sta crescendo, ma non è ancora universale come per gli altri.
Nessuno di questi è adatto a ogni caso. Lo shapefile resta la scelta più sicura quando non sa quale software usa il destinatario, o quando un sistema o un cliente lo chiede espressamente. Quando i suoi limiti diventano un ostacolo, come nomi di campo troncati, timestamp persi o file vicini ai 2 GB, convertire in GeoPackage è di solito il passo meno doloroso.
Lavorare con gli shapefile nel browser con FileReshape
Gli strumenti per shapefile di FileReshape leggono le parti con GDAL compilato per il web, quindi i file vengono elaborati sul Suo dispositivo e non vengono caricati. Il Visualizzatore di shapefile mostra gli elementi su una mappa e la tabella degli attributi, con il tipo di ogni campo. Le pagine Convertire shapefile in GeoJSON, Convertire shapefile in KML e Convertire shapefile in GeoPackage scrivono gli stessi dati in quei formati; GeoJSON e KML vengono scritti in WGS84, e il GeoPackage mantiene il sistema di coordinate. Convertire KML in shapefile fa il percorso inverso e scrive un .zip con file .shp, .shx, .dbf, .prj e .cpg, uno shapefile per tipo di geometria. Può trascinare un .zip o selezionare insieme le parti, e i nomi già accorciati a 10 caratteri non possono essere ripristinati da nessuna conversione.
Domande frequenti
Quali file di uno shapefile sono obbligatori?
Sono obbligatori i file .shp, .shx e .dbf. I file .prj e .cpg sono facoltativi ma consigliati, e .sbn, .sbx, .qix e .shp.xml sono indici e metadati che si possono tralasciare.
Uno shapefile può contenere insieme punti, linee e poligoni?
No. Ogni shapefile ha un solo tipo di forma nella sua intestazione. I dati misti devono essere divisi in uno shapefile per tipo, oppure memorizzati in un formato come GeoPackage o GeoJSON.
Perché il mio shapefile mostra caratteri strani al posto delle lettere accentate?
Il programma ha letto il .dbf con la codifica sbagliata. Scelga la codifica giusta quando apre il layer, oppure aggiunga un file .cpg con il nome corretto, come UTF-8 o 1252.
Uno shapefile può memorizzare data e ora?
Può memorizzare una data, ma non l'ora del giorno. I timestamp vengono di solito conservati in campi di testo, oppure i dati vengono spostati in un GeoPackage, che ha un vero tipo data e ora.
Lo shapefile è un formato aperto?
I suoi file di geometria e di indice sono documentati in una descrizione tecnica che Esri ha pubblicato nel 1998, e la tabella degli attributi usa il diffuso formato dBASE, quindi molti programmi gratuiti e commerciali leggono e scrivono shapefile.