Come convertire KML in shapefile: QGIS, ogr2ogr o online
Per convertire un KML in shapefile, apra il KML in QGIS, faccia clic con il tasto destro sul layer, scelga Esporta > Salva elementi come e indichi ESRI Shapefile. Dalla riga di comando, esegua ogr2ogr -f "ESRI Shapefile" con un tipo di geometria per ogni output. Oppure trascini il .kml nella pagina Convertire KML in shapefile di FileReshape, che lavora nel Suo browser senza caricare il file, separa punti, linee e poligoni e aggiunge i file .prj e .cpg.
Che cosa cambia quando un KML diventa uno shapefile
Il KML, il formato di Google Earth e di Google My Maps, e lo shapefile memorizzano i dati geografici in modi molto diversi, e ogni metodo di conversione deve affrontare le stesse differenze. Conoscerle in anticipo Le evita sorprese nel risultato.
Un solo tipo di geometria per file. Un file KML può mescolare punti, linee e poligoni nella stessa cartella. Uno shapefile può contenere un solo tipo di geometria, quindi un KML misto deve diventare più shapefile, uno per tipo.
Nomi di campo brevi. La tabella degli attributi .dbf ammette nomi di campo fino a 10 caratteri, quindi Description diventa Descriptio. I valori di testo più lunghi di 254 caratteri, come le lunghe descrizioni HTML, vengono troncati.
Nessuno stile. Colori, spessori delle linee e icone fanno parte del KML ma non di uno shapefile, quindi vanno persi. Se lo stile è importante, deve ricrearlo nel Suo programma GIS.
Sistema di coordinate. Il KML è sempre in longitudine e latitudine WGS84. Lo shapefile può restare in WGS84 con un file .prj che lo indica, oppure essere riproiettato in un sistema come un fuso UTM se Le servono distanze e superfici in metri. Uno shapefile richiede inoltre che le sue parti .shp, .shx e .dbf restino insieme, e un file .cpg indica ai programmi la codifica del testo.
Convertire KML in shapefile in QGIS
QGIS è gratuito e open source e legge il KML tramite GDAL. È la scelta migliore quando vuole anche controllare, modificare o ridefinire lo stile dei dati, oppure riproiettarli. Quando un KML ha più cartelle o tipi di geometria misti, QGIS può mostrare una finestra che li elenca come layer separati; aggiunga quelli che Le servono ed esporti ciascuno di essi.
Nella finestra «Salva layer vettoriale come» può impostare anche il sistema di coordinate dell'output e la codifica. Scelga UTF-8, così i nomi con lettere come é, ø o ü restano intatti. Ripeta l'esportazione per ogni layer se il KML conteneva punti, linee e poligoni.
- Apra QGIS e trascini il file .kml sulla mappa, oppure usi Layer > Aggiungi layer > Aggiungi layer vettore.
- Faccia clic con il tasto destro sul layer nel pannello Layer e scelga Esporta > Salva elementi come.
- Imposti «Formato» su ESRI Shapefile, scelga un nome di file e, se serve, un altro sistema di coordinate.
- Faccia clic su «OK» e controlli il nuovo layer shapefile e la sua tabella degli attributi.
Convertire KML in shapefile con ogr2ogr
ogr2ogr è il convertitore da riga di comando di GDAL. Lo usi per file grandi, per lavori in blocco su molti file KML e negli script. Inizi con ogrinfo per vedere quali layer contiene il KML; con i driver KML di GDAL, ogni cartella KML viene di solito letta come un layer a sé.
Poiché uno shapefile contiene un solo tipo di geometria, scriva ogni tipo in uno shapefile proprio. Il campo speciale OGR_GEOMETRY di OGR SQL permette di filtrare per tipo con -where o -sql. L'opzione -nlt imposta il tipo di geometria del layer di output, e -nlt PROMOTE_TO_MULTI è utile quando un layer mescola linee o poligoni semplici e multiparte. Se salta il filtro, lo shapefile prende il tipo del primo elemento, e gli elementi di altri tipi causano errori.
Se i campi ExtendedData diventano colonne dipende dal driver KML della Sua build di GDAL. Il driver LIBKML li legge; controlli quali driver ha con ogrinfo --formats. I collegamenti di rete, che rimandano a un KML su un server web, è meglio scaricarli e salvarli prima come KML locale.
# Elencare i layer (cartelle) e i loro tipi di geometria
ogrinfo -so -al places.kml
# Uno shapefile per tipo di geometria
ogr2ogr -f "ESRI Shapefile" places_points.shp places.kml -where "OGR_GEOMETRY='POINT' OR OGR_GEOMETRY='MULTIPOINT'" -explodecollections -nlt POINT -lco ENCODING=UTF-8
ogr2ogr -f "ESRI Shapefile" places_lines.shp places.kml -where "OGR_GEOMETRY='LINESTRING' OR OGR_GEOMETRY='MULTILINESTRING'" -nlt PROMOTE_TO_MULTI -lco ENCODING=UTF-8
ogr2ogr -f "ESRI Shapefile" places_polygons.shp places.kml -where "OGR_GEOMETRY='POLYGON' OR OGR_GEOMETRY='MULTIPOLYGON'" -nlt PROMOTE_TO_MULTI -lco ENCODING=UTF-8
# Facoltativo: riproiettare nel fuso UTM 33N invece di mantenere WGS84
ogr2ogr -f "ESRI Shapefile" -t_srs EPSG:32633 places_utm.shp places_points.shpConvertire KML in shapefile online con FileReshape
La pagina Convertire KML in shapefile di FileReshape fa lo stesso lavoro nel Suo browser, senza software da installare. Usa GDAL compilato per il web, e il KML viene letto dal Suo disco e non viene caricato, quindi è sicura anche per i dati dei clienti. Il risultato è un .zip con i file .shp, .shx, .dbf, .prj e .cpg di ogni shapefile.
Il convertitore gestisce per Lei i problemi abituali. Punti, linee e poligoni vengono scritti in shapefile separati, per esempio Sights_points.shp e Routes_lines.shp, e ogni cartella KML diventa uno shapefile a sé con il nome della cartella. I nomi dei campi vengono tagliati a 10 caratteri. Per impostazione predefinita l'output resta in WGS84 con un file .prj, e può scegliere un altro sistema, come un fuso UTM. Le altitudini vengono mantenute come shapefile 3D. La tabella degli attributi viene scritta in UTF-8 con un file .cpg corrispondente.
Ne conosca i limiti. Colori e icone non vengono trasferiti. Il nome e la descrizione dei segnaposto vengono mantenuti, ma i campi aggiuntivi salvati come ExtendedData del KML non vengono letti dalla versione di GDAL per il browser. I collegamenti di rete che rimandano a dati sul web non vengono seguiti; il convertitore indica quanti ne ha ignorati. Per un KMZ, estragga prima il KML con lo strumento Convertire KMZ in KML. Il limite di dimensione è la memoria del Suo browser, e i file fino a circa 200 MB di norma funzionano.
- Apra la pagina Convertire KML in shapefile e trascini il Suo file .kml, oppure faccia clic per sceglierlo.
- Se vuole, scelga un «Sistema di coordinate di uscita», per esempio un fuso UTM.
- Faccia clic su «Converti in Shapefile» e scarichi il .zip con gli shapefile, poi lo decomprima e aggiunga i file .shp al Suo GIS.
Quale metodo scegliere?
Usi il convertitore nel browser per un singolo file, quando Le serve solo uno shapefile da inoltrare o da aprire in un altro programma. Usi QGIS quando vuole controllare il risultato su una mappa, modificare gli attributi, ricreare lo stile o mantenere i campi ExtendedData. Usi ogr2ogr per file molto grandi, per convertire molti file in una volta o per flussi di lavoro automatizzati. Se il destinatario accetta il GeoPackage, valuti questo formato: non ha il limite di 10 caratteri per i nomi dei campi e può contenere più layer in un unico file.
Domande frequenti
Perché da un solo KML ottengo più shapefile?
Uno shapefile può memorizzare un solo tipo di geometria. Quando il Suo KML mescola punti, linee e poligoni, o ha più cartelle, ogni tipo o cartella diventa uno shapefile a sé, così nessun dato va perso.
I colori e le icone di Google Earth vengono mantenuti?
No. Uno shapefile non ha spazio per gli stili, quindi colori, spessori delle linee e icone vanno persi con qualsiasi metodo. Ridefinisca lo stile del layer in QGIS o nel Suo programma GIS.
Posso convertire un file KMZ in shapefile?
Sì. Un KMZ è un KML compresso. QGIS e ogr2ogr di solito possono leggerlo direttamente. Con FileReshape, usi prima lo strumento Convertire KMZ in KML e poi converta il KML in shapefile.
Il mio KML viene caricato quando lo converto online con FileReshape?
No. La conversione avviene nel Suo browser e il file resta sul Suo computer.
Perché il campo Description si chiama Descriptio?
Il formato .dbf limita i nomi dei campi di uno shapefile a 10 caratteri, quindi i nomi più lunghi vengono tagliati. Rinomini i campi prima della conversione, oppure usi il GeoPackage se i nomi lunghi sono importanti.