El script básico para iterar recursivamente sobre subcarpetas y fusionar todos los shapefiles en uno solo es:
#!/bin/bash
consolidated_file="./consolidated.shp"
for i in $(find . -name '*.shp'); do
if [ ! -f "$consolidated_file" ]; then
# first file - create the consolidated output file
ogr2ogr -f "ESRI Shapefile" $consolidated_file $i
else
# update the output file with new file content
ogr2ogr -f "ESRI Shapefile" -update -append $consolidated_file $i
fi
done
Hoverer en vertaully todos los ejemplos en la web me di cuenta de que para el caso donde actualizo el archivo de salida, -nln
se agrega la etiqueta, por ejemplo:
ogr2ogr -f "ESRI Shapefile" -update -append $consolidated_file $i -nln merged
Según la documentación dice:
Asignar un nombre alternativo a la nueva capa.
Y noté que crea un archivo de forma temporal llamado "fusionado", y al final del bucle el archivo es idéntico al último archivo de forma que fusioné.
No entiendo por qué necesito esto? Porque logré fusionarme exitosamente sin esta etiqueta.
Los archivos de forma incluyen solo un conjunto de datos (capa), por lo que no es necesario establecer un nombre de capa.
Si trabaja con PostGIS, SQLite, KML, etc. que pueden manejar múltiples capas en un archivo, debe configurar -nln. De lo contrario, las capas serán como los nombres de archivo y, por lo tanto, no se fusionarán.
fuente