O script básico para iterar recursivamente sobre subpastas e mesclar todos os shapefiles em um único é:
#!/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
Pairando em quase todos os exemplos da Web, notei que, no caso em que atualizo o arquivo de saída, a -nln
tag é adicionada, por exemplo:
ogr2ogr -f "ESRI Shapefile" -update -append $consolidated_file $i -nln merged
De acordo com a documentação, diz:
Atribua um nome alternativo à nova camada
E notei que ele cria um shapefile temporário chamado "mesclado" e, no final do loop, o arquivo é idêntico ao último shapefile que mesclei.
Não entendo por que preciso disso? Porque consegui mesclar com sucesso sem essa tag.
Os arquivos shapefiles incluem apenas um conjunto de dados (camada), portanto, a configuração de um nome de leito não é necessária.
Se você trabalha com PostGIS, SQLite, KML etc. que podem lidar com várias camadas em um arquivo, é necessário definir -nln. Caso contrário, as camadas serão como os nomes dos arquivos e, portanto, não serão mescladas.
fonte