Основной сценарий для рекурсивной итерации по подпапкам и объединения всех шейп-файлов в один:
#!/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
Однако во всех примерах в Интернете я заметил, что для случая, когда я обновляю выходной файл, -nln
добавляется тег, например:
ogr2ogr -f "ESRI Shapefile" -update -append $consolidated_file $i -nln merged
Согласно документации это говорит:
Назначьте альтернативное имя новому слою
И я заметил, что он создает временный шейп-файл под названием «объединенный», и в конце цикла файл идентичен последнему шейп-файлу, который я слил.
Я не понимаю, зачем мне это? Потому что мне удалось слить успешно без этого тега.
Шейп-файлы содержат только один набор данных (слой), поэтому указывать имя слоя не обязательно.
Если вы работаете с PostGIS, SQLite, KML и т. Д., Которые могут обрабатывать несколько слоев в одном файле, вам нужно установить -nln. В противном случае слои будут похожи на имена файлов и, следовательно, не будут объединены.
источник