Das grundlegende Skript, um rekursiv über Unterordner zu iterieren und alle Shapefiles zu einem einzigen zusammenzuführen, lautet:
#!/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 in vertaully allen Beispielen im Web Ich habe festgestellt, dass für den Fall, dass ich die Ausgabedatei aktualisiere, -nln
Tag hinzugefügt wird, zum Beispiel:
ogr2ogr -f "ESRI Shapefile" -update -append $consolidated_file $i -nln merged
Laut Dokumentation heißt es:
Weisen Sie der neuen Ebene einen alternativen Namen zu
Und ich habe festgestellt, dass ein temporäres Shapefile namens "zusammengeführt" erstellt wird. Am Ende der Schleife ist die Datei identisch mit dem zuletzt zusammengeführten Shapefile.
Ich verstehe nicht, warum ich das brauche? Weil es mir gelungen ist, ohne dieses Tag erfolgreich zusammenzuführen.
Shapefiles enthalten nur einen Datensatz (Layer), sodass das Festlegen eines Layernamens nicht erforderlich ist.
Wenn Sie mit PostGIS, SQLite, KML usw. arbeiten, die mehrere Ebenen in einer Datei verarbeiten können, müssen Sie -nln festlegen. Andernfalls entsprechen die Ebenen den Dateinamen und werden daher nicht zusammengeführt.
quelle