OnlineMapMaker logo

Convertitore da Shapefile a GeoJSON - SHP in GeoJSON in Pochi Clic

Converti file Shapefile in formato GeoJSON in pochi clic: carica uno shapefile compresso, ottieni un vero file GeoJSON conforme a RFC 7946 e scaricalo. Tutto viene eseguito nel tuo browser, nulla viene caricato. Apri versione a schermo intero →

Rate this tool:
Advertisement
Loading converter…
Hai bisogno di aiuto con il tuo progetto GIS?Scopri i Nostri Servizi

Perché convertire uno shapefile in GeoJSON

Se ti sei mai chiesto come convertire uno shapefile in GeoJSON, la risposta breve è che uno shapefile non è affatto un unico file. Ciò che la maggior parte delle persone chiama "uno shapefile" è in realtà un insieme di almeno tre file separati che condividono lo stesso nome con estensioni diverse: `.shp` per la geometria, `.shx` per un indice posizionale in quella geometria, e `.dbf` per la tabella degli attributi. Un'esportazione shapefile reale spesso aggiunge un file `.prj` per il sistema di riferimento delle coordinate e un file `.cpg` per la codifica del testo. Se apri solo il file `.shp` in un editor di testo ottieni rumore binario; se apri solo il `.dbf` ottieni attributi senza alcuna forma a cui collegarli.

Il GeoJSON, al contrario, è un unico file JSON autonomo, definito da una singola specifica (RFC 7946), che fissa il sistema di riferimento delle coordinate su longitudine/latitudine WGS84. Proprio questo design a file singolo e CRS singolo è il motivo per cui così tante mappe web, librerie JavaScript e API GIS moderne si aspettano GeoJSON come input invece di un pacchetto shapefile. Convertire shapefile in geojson è di solito il primo passo prima che un set di dati possa essere caricato in Leaflet, Mapbox GL, un'anteprima mappa renderizzata da GitHub, o quasi qualsiasi altro strumento di mappatura basato su browser.

Questo strumento esiste per rendere indolore quel primo passo. Invece di installare GDAL, aprire software GIS desktop, o scrivere uno script Python solo per convertire un file, comprimi i tuoi file `.shp` / `.shx` / `.dbf` (e `.prj`, se lo hai) insieme, trascini lo zip nel browser, e ottieni un file `.geojson` funzionante in pochi clic. La conversione viene eseguita interamente lato client, quindi lo strumento funziona allo stesso modo con dieci elementi o centomila, e i tuoi dati non vengono mai inviati da nessuna parte.

Advertisement

Il formato Shapefile: storia e struttura

Il formato shapefile è stato pubblicato da ESRI (Environmental Systems Research Institute) nel luglio 1998 in un documento chiamato "ESRI Shapefile Technical Description". Nonostante abbia quasi tre decenni e manchi di supporto nativo per nomi di campi attributo più lunghi di 10 caratteri, più livelli di geometria per file, o Unicode di default, rimane uno dei formati GIS vettoriali più usati al mondo nei dataset governativi, di pubblica utilità e accademici, in gran parte perché è stato adottato così presto e così ampiamente prima che esistessero formati più moderni.

Il file .shp inizia con un'intestazione fissa di 100 byte: i byte da 0 a 3 sono un "codice file" big-endian sempre uguale all'intero 9994, i byte da 24 a 27 danno la lunghezza del file in parole a 16 bit (big-endian), i byte da 28 a 31 danno la versione dello shapefile (little-endian, sempre 1000), i byte da 32 a 35 danno il tipo di forma come codice intero (1 = Punto, 3 = PolyLine, 5 = Poligono, 8 = MultiPunto, con varianti +10 o +20 per i valori di coordinate Z e M), e i byte da 36 a 67 danno il riquadro di delimitazione dell'intero file come quattro double little-endian: Xmin, Ymin, Xmax, Ymax. Dopo questa intestazione, il file è una sequenza di record a lunghezza variabile, ognuno con la propria piccola intestazione che indica il numero di record e la lunghezza del contenuto prima dei byte di geometria veri e propri.

Il file .dbf è una tabella dBase III / dBase IV: un blocco di intestazione che descrive ogni campo (nome, tipo, lunghezza in byte, numero di decimali), seguito da un record a larghezza fissa per riga. L'ordine delle righe nel .dbf corrisponde esattamente all'ordine dei record nel file .shp, posizione per posizione, poiché non esiste una chiave esterna esplicita tra di loro. Il file .shx esiste puramente come scorciatoia: memorizza una coppia (offset, lunghezza) di 8 byte per record così che un lettore possa saltare direttamente a qualsiasi forma senza scansionare tutti i record precedenti, il che conta molto di più per uno shapefile da 500 MB che per uno piccolo.

Una particolarità strutturale si ripercuote direttamente sulla logica di conversione: un record poligono shapefile non ha alcun concetto di "questo anello è un buco in quell'altro anello". È semplicemente un elenco piatto di anelli chiusi. La convenzione (secondo la specifica) è che gli anelli orientati in senso orario sono confini esterni e gli anelli orientati in senso antiorario sono buchi, e un lettore deve determinare da sé quale buco appartenga a quale anello esterno. I poligoni GeoJSON seguono la stessa convenzione di orientamento (RFC 7946 la raccomanda, pur non richiedendola rigorosamente), ma un convertitore da shapefile a GeoJSON deve comunque percorrere ogni anello, classificarlo, e ricostruire l'annidamento prima di poter emettere una geometria Polygon o MultiPolygon valida.

Guida passo dopo passo: come convertire shp in geojson

Shapefile to GeoJSON converter with the Choose File button and a zipped shapefile selected
Passo 1

Comprimi insieme i tuoi file `.shp`, `.shx` e `.dbf` (includi anche il `.prj`, se lo hai), poi scegli quel file zip nel convertitore, oppure clicca su "Try sample" per caricare un piccolo shapefile di esempio già pronto. Lo shapefile viene analizzato immediatamente e visualizzato in anteprima sulla mappa come layer grigio "Source shapefile".

Shapefile loaded into the converter, ready to convert to GeoJSON
Passo 2

Il pannello Layers elenca lo shapefile di origine con il suo numero di elementi. Controlla la mappa per confermare che siano stati caricati i dati giusti, poi clicca su "Convert to GeoJSON" quando sei pronto.

Conversion result panel showing feature count, geometry types, bounding box, and file size
Passo 3

Un secondo layer "Converted GeoJSON" viene aggiunto sopra quello di origine, e appare un riepilogo: quanti elementi sono stati convertiti, quali tipi di geometria sono stati trovati, il riquadro di delimitazione, le colonne degli attributi, e la dimensione risultante del file GeoJSON.

Map preview of the converted shapefile features with the basemap toggle switched on
Passo 4

Usa le caselle di controllo nel pannello Layers per mostrare o nascondere il layer di origine e quello convertito in modo indipendente, e attiva "Show basemap" se vuoi una mappa stradale come sfondo per entrambi.

Download button for the converted .geojson file
Passo 5

Clicca su "Download converted.geojson" per salvare sul tuo computer il file GeoJSON finito e conforme agli standard.

Advertisement

Sei casi d'uso reali

Dove la conversione di shapefile in geojson emerge realmente nel lavoro GIS quotidiano.

  1. Pubblicare open data governativi sul web. Molti portali di open data comunali, regionali e nazionali distribuiscono ancora dataset di particelle, zonizzazione e confini come shapefile. Convertire shapefile in geojson trasforma quel download in qualcosa che una mappa web o un'app JavaScript può caricare direttamente, senza elaborazione lato server.
  2. Caricare dati di rilievo o sul campo in una mappa web. I dispositivi GPS da campo e i vecchi flussi di lavoro GIS desktop esportano spesso shapefile. Una rapida conversione da shp a geojson è spesso l'unico passaggio tra l'output di un rilevatore e una mappa condivisibile su Leaflet o Mapbox GL.
  3. Preparare dati per le anteprime mappa di GitHub o GitLab. GitHub renderizza automaticamente i file `.geojson` come mappa interattiva, ma non renderizza affatto gli shapefile. Convertire uno shapefile prima del commit fa la differenza tra una mappa renderizzata e quattro file binari illeggibili in un repository.
  4. Alimentare librerie di mappatura JavaScript. Leaflet, Mapbox GL JS, OpenLayers e deck.gl consumano tutti nativamente GeoJSON. Nessuno di essi può leggere uno shapefile direttamente nel browser, quindi un convertitore shp in geojson è un passaggio obbligato in qualsiasi pipeline di mappatura lato client che parta da dati shapefile.
  5. Migrare vecchi archivi GIS verso formati moderni. Le organizzazioni che dismettono vecchi sistemi GIS desktop spesso possiedono anni di archivi shapefile. Convertire shapefile in geojson (o oltre, in GeoParquet o GeoPackage) è di solito il primo passaggio di migrazione, poiché il GeoJSON è leggibile praticamente da ogni strumento moderno.
  6. Controlli rapidi occasionali senza installare GIS desktop. A volte vuoi solo vedere cosa c'è dentro un file `.shp` che qualcuno ti ha inviato via email. Convertirlo in GeoJSON e visualizzarlo in anteprima su una mappa è più veloce che installare QGIS o ArcGIS per un singolo file.

L'algoritmo di conversione, passo dopo passo

Convertire uno shapefile in GeoJSON non è un'unica operazione ma una piccola pipeline di passaggi ben definiti di analisi e ricostruzione della geometria. Ecco esattamente cosa succede ai tuoi dati, in ordine.

1. Decomprimere e individuare l'insieme di file corrispondente

Il .zip caricato viene decompresso in memoria, e il convertitore raggruppa i file per il loro nome base condiviso per trovare una terna corrispondente .shp / .shx / .dbf (più un .prj e .cpg opzionali). Se uno zip contiene più di una tale terna, viene trattato come un'esportazione shapefile multi-livello e ogni livello viene convertito indipendentemente.

2. Analizzare l'intestazione fissa di 100 byte del `.shp`

L'intestazione viene letta per prima per confermare che il codice file sia uguale a 9994, per leggere il tipo di forma (che indica al parser quale struttura di record aspettarsi successivamente), e per leggere il riquadro di delimitazione a livello di file. Il layout dei campi rilevanti per la conversione è:

Bytes 0-3    File code           big-endian int, always 9994
Bytes 24-27  File length         big-endian int, in 16-bit words
Bytes 28-31  Version             little-endian int, always 1000
Bytes 32-35  Shape type          little-endian int (1=Point, 3=PolyLine, 5=Polygon, 8=MultiPoint)
Bytes 36-67  Bounding box        4 little-endian doubles: Xmin, Ymin, Xmax, Ymax

Tutto dopo il byte 100 viene letto come un flusso di record a lunghezza variabile, ognuno preceduto dalla propria piccola intestazione che indica il numero di record e la lunghezza del contenuto in parole a 16 bit, che viene poi convertita in un conteggio di byte moltiplicando per due.

3. Ricostruire gli anelli in geometrie Polygon e MultiPolygon

Per i record di tipo Poligono, ogni anello nel record viene letto come un array piatto di coppie (x, y). Il convertitore calcola quindi l'area con segno di ogni anello usando la formula del laccio (shoelace formula), area = 0.5 * Σ(x[i] * y[i+1] - x[i+1] * y[i]). Un risultato positivo (nella convenzione oraria-positiva dello shapefile) marca un anello esterno; un risultato negativo marca un buco. Ogni anello-buco viene poi abbinato all'anello esterno più piccolo il cui riquadro di delimitazione lo contiene completamente, e i due vengono combinati in un unico array coordinates di un Polygon GeoJSON, con l'anello esterno per primo e ogni anello-buco dopo. Quando un record contiene più di un anello esterno, il risultato diventa invece un MultiPolygon.

4. Riproiettare le coordinate e allegare gli attributi

Se è presente un file .prj e il suo sistema di riferimento delle coordinate non è già WGS84, ogni coppia di coordinate prodotta nel passaggio precedente viene riproiettata in longitudine/latitudine WGS84, poiché quello è il sistema di coordinate richiesto da RFC 7946 per un GeoJSON valido. In parallelo, la tabella .dbf viene analizzata campo per campo, e il record i nel .dbf viene allegato come oggetto properties della geometria costruita dal record i nel file .shp, poiché i due file sono abbinati puramente per posizione, non tramite alcuna chiave esplicita.

Il passaggio finale racchiude ogni geometria convertita e le sue proprietà in una Feature GeoJSON, raccoglie ogni elemento in un'unica FeatureCollection, e serializza quella struttura in testo, pronta per essere scaricata come file .geojson. Poiché ogni passaggio sopra descritto è una trasformazione deterministica e ben definita, convertire due volte lo stesso shapefile produce sempre un output GeoJSON identico byte per byte.

Advertisement

Le librerie GIS dietro la conversione degli shapefile

Un convertitore shp in geojson vale quanto il parser di shapefile che ha sotto. Ecco cosa fa realmente il lavoro, in questo strumento e altrove.

  • shpjs: Il motore dietro questo strumento. shpjs è una libreria in puro JavaScript che decomprime l'archivio, analizza la geometria binaria `.shp` e la tabella degli attributi `.dbf`, riproietta le coordinate usando i dati `.prj` quando presenti, e assembla il risultato in GeoJSON, tutto senza uscire dal browser o da un processo Node.js.
  • GDAL / OGR (ogr2ogr): La libreria C/C++ alla base della maggior parte del software GIS desktop e lato server. Il comando `ogr2ogr -f GeoJSON output.geojson input.shp` è il modo standard de facto per convertire shapefile in geojson da riga di comando, ed è lo stesso motore che QGIS chiama internamente quando usi la sua finestra "Export Features".
  • Fiona e GeoPandas: Lo stack di I/O geospaziale di Python. Fiona avvolge direttamente GDAL/OGR, e GeoPandas si basa su Fiona, quindi `gpd.read_file('data.shp')` seguito da `gdf.to_file('data.geojson', driver='GeoJSON')` è uno dei modi più comuni in cui gli sviluppatori convertono shapefile in geojson all'interno di una pipeline di dati.
  • Mapshaper: Uno strumento a riga di comando e basato su browser ampiamente usato (di Matthew Bloch) che legge gli shapefile con un proprio parser e può semplificare la geometria durante la conversione, utile quando uno shapefile è troppo dettagliato per una mappa web e servono sia conversione che semplificazione in un solo passaggio.
  • QGIS e ArcGIS: Entrambe le applicazioni GIS desktop possono aprire uno shapefile nativamente ed esportarlo come GeoJSON tramite un'azione di menu, "Export Features" in QGIS e "Feature Class to GeoJSON" o strumenti simili in ArcGIS, entrambi i quali chiamano GDAL/OGR o una libreria equivalente sotto l'interfaccia utente.

Tutti questi strumenti concordano sulla stessa specifica shapefile sottostante e sullo stesso formato di output GeoJSON, quindi un file convertito da uno qualsiasi di essi dovrebbe essere strutturalmente equivalente. La differenza pratica sta in dove avviene il lavoro: GDAL, Fiona e il software GIS desktop girano tutti su una macchina con qualcosa installato, mentre il motore basato su shpjs di questo strumento gira direttamente nella scheda del tuo browser, motivo per cui qui non è mai richiesta alcuna installazione né alcun caricamento di file su un server.

Domande e risposte tecniche

Dieci domande comuni su come convertire uno shapefile in GeoJSON, con risposte dirette.

1. Come converto uno shapefile in GeoJSON?

Metti i file .shp, .shx e .dbf (più .prj se lo hai) in un unico archivio .zip, carica quello zip su questo convertitore, e clicca su "Convert to GeoJSON". Lo strumento legge la geometria binaria dello shapefile, la abbina alla tabella degli attributi, e produce un file .geojson conforme agli standard che puoi scaricare immediatamente, tutto all'interno del tuo browser.

2. Perché questo strumento chiede un file zip invece del file .shp direttamente?

Un file .shp da solo contiene solo geometria, senza attributi e, cosa fondamentale, senza alcun campo che descriva cosa rappresenti realmente ogni forma. Uno shapefile valido è un insieme di almeno tre file (.shp, .shx, .dbf) che devono essere letti insieme, quindi questo convertitore, come qualsiasi altro convertitore shp in geojson, ha bisogno di tutti e tre contemporaneamente, e uno zip è il modo più semplice per fornire un insieme corrispondente.

3. Questa conversione da shp a geojson è gratuita, e c'è un limite di dimensione file?

Sì, è completamente gratuita e senza registrazione. Non c'è un limite artificiale di dimensione del file, anche se shapefile molto grandi (diverse centinaia di MB) richiederanno più tempo per essere analizzati poiché tutto avviene sul tuo dispositivo invece che su un server.

4. Il convertitore preserva i miei dati di attributo?

Sì. Ogni campo della tabella .dbf viene letto e collegato al relativo elemento come oggetto properties di GeoJSON, preservando nomi e valori dei campi, inclusi numeri, testo e date.

5. Cosa succede al sistema di riferimento delle coordinate?

Se il tuo zip include un file .prj, il convertitore legge il sistema di riferimento delle coordinate che descrive. Il GeoJSON, secondo RFC 7946, è sempre in longitudine/latitudine WGS84, quindi se lo shapefile di origine usa una proiezione diversa (un caso comune per i sistemi di griglia nazionali), le coordinate vengono riproiettate in WGS84 durante la conversione. Se non è presente alcun file .prj, si presume che le coordinate siano già in WGS84.

6. Può gestire correttamente shapefile di tipo Poligono con buchi?

Sì. I record poligono shapefile memorizzano gli anelli come elenco piatto senza relazione esplicita genitore-figlio, affidandosi all'ordine di orientamento degli anelli per distinguere i confini esterni dai buchi. Il convertitore classifica ogni anello in base alla sua area con segno, riassocia i buchi al loro corretto anello genitore, e produce geometrie GeoJSON Polygon o MultiPolygon corrette.

7. Quali tipi di geometria sono supportati?

Point, MultiPoint, PolyLine (convertito in LineString o MultiLineString), e Polygon (convertito in Polygon o MultiPolygon), incluse le loro varianti Z (elevazione) e M (misura). I record di tipo nullo vengono ignorati, poiché non contengono alcuna geometria da convertire.

8. Si può convertire uno shapefile con più di un livello?

Un singolo file .shp contiene sempre esattamente un livello di geometria, quindi se il tuo zip contiene più file .shp (un'esportazione multi-livello), ognuno viene convertito separatamente e chiaramente etichettato nel risultato, così puoi sapere quali elementi provengono da quale shapefile originale.

9. Perché alcuni attributi di testo appaiono corrotti dopo la conversione?

Il formato .dbf memorizza il testo usando una specifica code page (codifica dei caratteri), e gli shapefile più vecchi non includono sempre un file .cpg che indichi quale. Quando non viene dichiarata alcuna codifica, il convertitore ricade su un valore predefinito comune; se i tuoi dati di origine usavano una codifica regionale insolita, alcuni caratteri accentati potrebbero richiedere una correzione manuale dopo la conversione.

10. Il mio shapefile viene caricato su un server?

No. La decompressione dell'archivio, l'analisi della geometria binaria .shp, la lettura della tabella degli attributi .dbf, e l'assemblaggio del GeoJSON finale avvengono tutti localmente nel tuo browser usando JavaScript. Il tuo file non lascia mai il tuo dispositivo.

La conversione viene eseguita interamente nel tuo browser usando shpjs. Nessun file viene mai caricato su un server. Map tiles © OpenStreetMap contributors.

Muhammad Gulraiz Khan, esperto GIS e fondatore di KONAKTIVE e OnlineMapMaker.com

Informazioni sull’Autore

Muhammad Gulraiz Khan

Esperto e Consulente GIS · Fondatore di KONAKTIVE

Muhammad Gulraiz Khan è un esperto GIS con oltre dieci anni di esperienza professionale nella fornitura di soluzioni geospaziali per il settore energetico, tra cui progetti per la Banca Mondiale, l’International Finance Corporation (IFC) e USAID. Ha creato OnlineMapMaker.com per rendere gli strumenti di mappatura professionali gratuiti e accessibili a tutti.

Advertisement