Le script de base pour itérer récursivement sur des sous-dossiers et fusionner tous les fichiers de formes en un seul est:
#!/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 dans vertaully tous les exemples sur le web, j'ai remarqué que pour le cas où je mets à jour le fichier de sortie, une -nln
balise est ajoutée, par exemple:
ogr2ogr -f "ESRI Shapefile" -update -append $consolidated_file $i -nln merged
Selon la documentation, il est dit:
Attribuer un autre nom au nouveau calque
Et j'ai remarqué qu'il crée un fichier de formes temporaire appelé "fusionné", et à la fin de la boucle, le fichier est identique au dernier fichier de formes que j'ai fusionné.
Je ne comprends pas pourquoi j'ai besoin de ça? Parce que j'ai réussi à fusionner avec succès sans cette balise.
Les fichiers de formes ne comprennent qu'un seul ensemble de données (couche), il n'est donc pas nécessaire de définir un nom de couche.
Si vous travaillez avec PostGIS, SQLite, KML, etc. qui peuvent gérer plusieurs couches dans un seul fichier, vous devez définir -nln. Sinon, les calques seront comme les noms de fichiers et ne seront donc pas fusionnés.
la source