Questo post ha lo scopo di fornire assistenza a persone che stanno cercando di unire molti shapefile (presenti in una cartella) in un singolo shp in ambiente Windows o Linux usando strumenti Open Source.
Risolveremo il problema usando la riga di comando, la libreria GDAL/OGR, mapshaper, la shell di OSGeo4W e Bash su Ubuntu come sottosistema Win 10.
Dati
Cartella con 390 shapefile, uno per ogni Comune della Regione Siciliana:

OSGeo4W Shell
Lo script che permette di fondere tutti gli shp in uno solo (merged.shp) è:
for %f in (*.shp)
do (
if not exist merged.shp
(ogr2ogr -f “esri shapefile” merged.shp %f)
else
(ogr2ogr -f “esri shapefile” -update -append merged.shp %f -nln Merged )
)
Bash Ubuntu sotto Win 10
Lo script che permette di fondere tutti gli shp in uno solo (merged.shp) è:
for f in *.shp;
do
ogr2ogr -update -append merged.shp $f -f "ESRI Shapefile";
done;
Mapshaper
La ricetta che permette di fondere tutti gli shp in uno solo (merged.shp) è:
mapshaper -i *.shp encoding=latin1 combine-files -merge-layers -o merged.shp
QGIS processing
Permette di fondere i vettori caricati in QGIS oppure dal File Sistem

NOTE FINALI:
Ho testato tutti i metodi sopra descritti e rimango stupefatto dalla semplicità di mapshaper: in una sola riga e senza cicli è possibile “mergiare” 390 shp in pochi secondi.

Riferimenti:
Ringraziamenti:
- Andrea Borruso by default
Dati:
Se il blog post vi è piaciuto cliccate su ‘Mi piace’, grazie!!!
if you liked the blog post click on ‘Like’, thank you !!!
Se il post vi è stato utile contribuite a mantenerlo aggiornato PayPal
Molto interessante il fatto di fondere vettori, bypassando qgis, specie se sono centinaia se non migliaia di file, tipo i classici shapefile, usando GDAL.
Riporto qui sotto qualche esempio, un caso in cui si abbiano centinaia di shapefile, con prefissi variabili e suffissi costanti, copiando ed incollando il codice nella OSGeo4W Shell per ottenere un unico DB Spatialite.
Es. Come fondere gli shapefile del catasto del Trentino Alto-Adige, scaricabili gratuitamente da Openkat:
for %f in (C:\GIS_Laboratorio\Input\*_fix_points.shp) do (ogr2ogr -f SQLITE C:\GIS_Laboratorio\Spatialite\TN_catasto.sqlite %f -update -append -dsco SPATIALITE=YES -lco LAUNDER=YES -lco GEOMETRY_NAME=geo -nlt POINT -nln punti_fiduciali)
for %f in (C:\GIS_Laboratorio\Input\*_vl_local_name.shp) do (ogr2ogr -f SQLITE C:\GIS_Laboratorio\Spatialite\TN_catasto.sqlite %f -update -append -dsco SPATIALITE=YES -lco LAUNDER=YES -lco GEOMETRY_NAME=geo -nlt POINT -nln nomi_locali)
for %f in (C:\GIS_Laboratorio\Input\*_vl_parcel_poly.shp) do (ogr2ogr -f SQLITE C:\GIS_Laboratorio\Spatialite\TN_catasto.sqlite %f -update -append -dsco SPATIALITE=YES -lco LAUNDER=YES -lco GEOMETRY_NAME=geo -nlt POLYGON -nln catasto)
"Mi piace""Mi piace"
Grazie Simone
"Mi piace""Mi piace"