En esta entrada vamos a aprender cómo combinar automáticamente un gran número de capas ráster a través de la consola de Python de QGIS. Con el método descrito más abajo evitaremos problemas de memoria y seleccionar manualmente todos los ficheros que queramos combinar.
TL; DR, la solución
La solución consiste en hacer la combinación en dos pasos. En el primer paso se crea un fichero VRT (Virtual Dataset) que contiene el mosaico de imágenes. En el segundo paso el fichero VRT se transforma al formato deseado.
vrt_path = os.path.join(BASE_PATH, 'prov_vrt.vrt') vrt = gdal.BuildVRT(vrt_path, lista) result = os.path.join(BASE_PATH, 'merged.tif') gdal.Translate(result, vrt, format='GTiff')
Donde lista es una lista con las rutas de cada uno de los ráster a combinar.
Código completo
El código completo requiere la importación de las librerías os y pathlib. Estas librerías nos permiten acceder al sistema de ficheros y tratar de una manera sencilla y adecuada las rutas, respectivamente.
Mediante glob se filtran los ficheros de la carpeta para que cumplan una regla concreta, en este caso que estén en formato TIF.
from pathlib import Path import os folder_path = r"C:\Users\Usuario\Desktop\input" BASE_PATH = os.path.dirname(os.path.abspath(folder_path)) folder = Path(folder_path) l = [] for f in folder.glob('**/*.tif'): f_path = f.as_posix() l.append(f_path) vrt_path = os.path.join(BASE_PATH, 'prov_vrt.vrt') vrt = gdal.BuildVRT(vrt_path, l) result = os.path.join(BASE_PATH, 'merged.tif') gdal.Translate(result, vrt, format='GTiff')
Tanto la herramienta de la caja de geoprocesos como el uso de gdal_merge implican que previo a la combinación de las imágenes estas se cargan en memoria. Mediante el código arriba descrito arriba se evitan todos los errores asociados a la gestión y la falta de memoria. Para ejecutar este script fuera de QGIS solo será necesario importar al principio GDAL.
Para obtener más opciones de configuración y obtener el control pleno de estos métodos se recomienda estudiar la documentación de GDAL para VRT y Translate. La referencia para Python se puede encontrar en esta página.
Deja tu comentario