Podstawowym skryptem w celu iteracyjnego rekurencyjnego przechodzenia między podfolderami i scalania wszystkich plików kształtów w jeden jest:
#!/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
Hoverrer we wszystkich przykładach w Internecie zauważyłem, że w przypadku aktualizacji pliku wyjściowego -nln
dodaje się znacznik, na przykład:
ogr2ogr -f "ESRI Shapefile" -update -append $consolidated_file $i -nln merged
Zgodnie z dokumentacją mówi:
Przypisz alternatywną nazwę do nowej warstwy
Zauważyłem, że tworzy tymczasowy plik kształtu o nazwie „scalony”, a na końcu pętli plik jest identyczny z ostatnim scalonym plikiem kształtu.
Nie rozumiem, dlaczego tego potrzebuję? Ponieważ udało mi się scalić bez tego znacznika.
Pliki kształtów zawierają tylko jeden zestaw danych (Warstwa), więc ustawienie nazwy warstwy nie jest konieczne.
Jeśli pracujesz z PostGIS, SQLite, KML itp., Które mogą obsługiwać wiele warstw w jednym pliku, musisz ustawić -nln. W przeciwnym razie warstwy będą podobne do nazw plików, a zatem nie zostaną scalone.
źródło