Estoy fusionando algunos archivos de forma y tuve algunos problemas para hacerlo dentro de QGIS, así que estoy usando ogr2ogr directamente. Estoy haciendo esto (en un lote):
ogr2ogr -overwrite %destination% %n1%
ogr2ogr -update -append %destination% %n2% -nln all_new
ogr2ogr -update -append %destination% %n3% -nln all_new
ogr2ogr -update -append %destination% %n4% -nln all_new
Funciona bien, pero ahora necesito tener en el archivo de forma resultante, un campo con los nombres de los archivos de forma originales que fusioné. No suena muy difícil, pero no estoy logrando hacerlo.
¿Alguien puede ayudar? ¡Gracias!
Usaría la opción -sql e importaría el archivo de forma de la siguiente manera:
fuente
Hay algunas formas de fusionar archivos shape.
y agregar atributo a shapefile @dango directon es bueno. puede usar layer.CreateField (field_name) para crear una nueva columna que se rellena desde
Espero que te ayude...
fuente
vascobnunes, así es como logré este problema usando un script de Python para encadenar varias instrucciones ogr2ogr juntas. Puede convertirlo fácilmente en un script por lotes, básicamente solo concateno las instrucciones de ogr2ogr (
cmd
), luego las ejecuto llamandoos.system(cmd)
, pasando el comando ogr2ogr que concatenamos juntos.El arma secreta es ( como demostró Capooti ) aplicar OGR_SQL para imponer el nombre de archivo como un valor constante del conjunto de datos de origen que está agregando a su resultado de fusión.
En mi ejemplo, la
-sql
bandera maneja esto, en el código es así:Pero eso es confuso de leer porque necesito aplicar comillas simples y comillas dobles en la concatenación resultante. Para hacerlo, tengo que escapar de las comillas simples (es decir, \ ') para usarlas "de verdad". Entonces, para facilitar la lectura, es útil verlo sin variables y secuencias de escape. Si finge que el nombre de archivo era "roads1" para una iteración particular, la concatenación resultante se vería así en la oración ogr2ogr:
Este script .py es una amalgama de tres trucos que le robé a matt wilkie (un clon vacío de un shapefile), j03lar50n (agregando una columna a un shapefile usando ogrinfo y ogr_sql) y capooti (usando ogr_sql para imponer un valor de columna fijo en todos los registros en un shapefile). Así que aquí está el guión completo:
fuente
Agregue una columna con el nombre del archivo fuente de la carpeta de archivos de forma. Requiere GDAL 1.10dev, mi intento de eliminar la extensión .shp no funciona, pero en general funciona. - Me imagino que podría agregarse a las líneas que se fusionan con OGR.
fuente
Hola tal vez este enlace te ayude. Muestra cómo agregar un campo a un archivo de forma usando los enlaces de gdal de python.
fuente
Dentro de QGIS puede agregar el complemento Merge Shapefile. Hay una opción para "Agregar columna con nombre de archivo"
fuente
Una versión ligeramente modificada de la respuesta de JaaKL. Tenga en cuenta que -append foo.shp y -nln foo deben coincidir. Además, tenga en cuenta el uso del dialecto SQLite (GDAL aparentemente no acepta la palabra clave 'Actualizar', por lo que el dialecto SQLite debe usarse instaed), y la ausencia de la palabra clave 'TABLE' después de la palabra 'ACTUALIZAR' (no es necesario o aceptado por SQLite).
fuente
Un poco tarde para la discusión, pero ahora también hay ogrmerge
fuente