ogr2ogr fusionar múltiples shapefiles: ¿Cuál es el propósito de la etiqueta -nln?

11

El script básico para iterar recursivamente sobre subcarpetas y fusionar todos los shapefiles en uno solo es:

#!/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 en vertaully todos los ejemplos en la web me di cuenta de que para el caso donde actualizo el archivo de salida, -nlnse agrega la etiqueta, por ejemplo:

ogr2ogr -f "ESRI Shapefile" -update -append $consolidated_file $i -nln merged

Según la documentación dice:

Asignar un nombre alternativo a la nueva capa.

Y noté que crea un archivo de forma temporal llamado "fusionado", y al final del bucle el archivo es idéntico al último archivo de forma que fusioné.

No entiendo por qué necesito esto? Porque logré fusionarme exitosamente sin esta etiqueta.

Miguel
fuente

Respuestas:

19

Para GDAL hay almacenes de datos que contienen capas. Algunos almacenes de datos, como los de la base de datos o GML, pueden contener varias capas, pero otros, como los archivos de forma, solo pueden contener una capa.

Puede probar con, por ejemplo, el controlador GeoPackage qué sucede si no usa el modificador -nln con un almacén de datos que puede contener muchas capas.

ogr2ogr -f gpkg merged.gpkg a.shp
ogr2ogr -f gpkg -append -update merged.gpkg b.shp

ogrinfo merged.gpkg
INFO: Open of `merged.gpkg'
      using driver `GPKG' successful.
1: a (Polygon)
2: b (Polygon)

El controlador del archivo de forma no necesariamente necesita el nombre de la capa porque si le da el nombre del almacén de datos "a.shp", el controlador tiene lógica para ver una sola capa, nombrada por el nombre base del archivo de forma. Por lo tanto, puede agregar datos a "merged.shp" con el comando:

ogr2ogr -f "ESRI Shapefile" merged.shp a.shp
ogr2ogr -f "ESRI Shapefile" -append -update merged.shp b.shp

Sin embargo, el controlador shapefile también tiene otra lógica para considerar un almacén de datos cuyo nombre se proporciona sin la extensión .shp como un almacén de datos de varias capas. Prácticamente esto significa un directorio que contiene uno o más archivos de forma como capas. Puedes probar lo que sucede con un comando

ogr2ogr -f "ESRI Shapefile" merged a.shp
ogr2ogr -f "ESRI Shapefile" -append -update merged b.shp

O bien, puede editar su script ligeramente para tener

consolidated_file="./consolidated"

Si desea agregar datos con ogr2ogr, es obligatorio usar el modificador -nln con algunos controladores, incluidos algunos que no admiten múltiples capas. Para algunos otros controladores no es estrictamente necesario, pero usar -nln siempre es seguro y afortunadamente se usa en los ejemplos que ha encontrado. De lo contrario, tendríamos muchas preguntas sobre por qué la fusión en shapefiles es exitosa, pero la fusión en otros formatos simplemente crea nuevas capas.

usuario30184
fuente
eras más rápido que yo! Y también con información nueva que no sabía sobre la salida de Shapefile a un directorio. ¡Excelente!
pLumo
4

Los archivos de forma incluyen solo un conjunto de datos (capa), por lo que no es necesario establecer un nombre de capa.

Si trabaja con PostGIS, SQLite, KML, etc. que pueden manejar múltiples capas en un archivo, debe configurar -nln. De lo contrario, las capas serán como los nombres de archivo y, por lo tanto, no se fusionarán.

pLumo
fuente