En esta entrada se muestra el proceso para realizar una extracción por mascara (“cortar”) de varios archivos raster-TIF con un archivo shape, ejecutando un script en la consola de Python de QGIS.
El script puede ejecutarse también con el CMD (ventana del Símbolo del sistema) de Windows, pero en este post únicamente se mostrará cómo realizarlo directamente el QGIS.
Los programas para el funcionamiento de este script son: Windows / QGIS.
En la imagen que se ve a continuación, en el recuadro rojo están las tres líneas donde el usuario debe modificar los directorios correspondientes a sus propios datos. Nótese que dicho directorio se puede copiar directamente desde el navegador de Windows, y se pega en el script, anteponiendo la letra r en las comillas.
Por ejemplo, el directorio D:_Franz\04_cortarTIF_QGIS\datosFranz\TIF_originales
Quedaría así:
CarpetaTIForiginales = r»D:_Franz\04_cortarTIF_QGIS\datosFranz\TIF_originales»
Las otras partes del script se deben dejar sin modificaciones, incluso las primeras 11 líneas se pueden copiar hasta a la consola de Python de QGIS, y no habrá problema pues son líneas comentadas ya que tienen el símbolo # de comentarios.
Una vez modificados los directorios del script, se puede copiar a la consola de Python de QGIS, la cual se abre desde el menú Complementos > Consola de Python, o mediante el botón que tiene un ícono similar al de Python:
Luego se copia todas las líneas de código del script hasta la ventana de entrada, que se señala en verde en la imagen a continuación:
Luego se introduce uno o dos ENTER para que se ejecute. Si todo está en orden, los colores de las líneas que quedan en la parte superior tendrán color negro, azul o verde, si resultan líneas en color rojo, indica que se presentó algún error, por lo que se debe revisar el procedimiento y las modificaciones realizadas al script original, o bien, copiar las líneas de código nuevamente.
Es necesario también revisar la carpeta de los archivos de salida (raster-TIF cortados) y eliminar los archivos que se hayan generado, antes de ejecutar nuevamente el script.
Una contribución de: Antonio Pantoja
Interesante post pero no termino de ver la necesidad de meter las cosas en un script de Python cuando se puede correr el comando de GDAL directamente desde la consola (que es en el fondo a lo que llama Python) y te ahorras incluso abrir QGIS.
😉
Efectivamente, el método mostrado en este post es tan solo un más de los múltiples posibles.
Gracias por comentar
Saludos
Antonio Pantoja C
Holaaa.
Excelente post y genial para las personas que apenas están aprendiendo SIG y quieren automatizar sus tareas utilizando Python.
Como dato adicional, para aquellas personas que estén trabajando en en la versión de QGIS 3.0 tengan en cuenta que la función print presente en el codigo de ejemplo le hace falta los parentesis » print() «. Solo ajustando ese pequeño detalle el codigo es 100% efectivo. Muchas gracias, espero que publiques mas temas así.
Gracias Juan por tu valioso aporte.
Aun no encuentro mi error…
archivo a procesar: C:\Users\NESTOR\Documents\TESIS\FUENTES\GOES_IMAGENES\3Marzo\1-10\GOES15_BAND_04_20180301_000017.tif
2
la carpet que contiene al raster y ese dos de abajo salen en rojo.
No sabría decirte sino tengo detalles, intenta colocar en una carpeta más corta, por ejemplo: C:\SIG\
Hola. No me funciona.
Hay que tener instalado gdal? o con el gdal que trae qgis funciona?
Un saludo
Traceback (most recent call last):
File «», line 1, in
File «D:/WK/PYQGIS/VOLAYA/CLIP_IMAGES_SHAPE.py», line 11, in
subprocess.call(‘gdal_warp -dstnodata -9999 -q -cutline %s -crop_to_outline -of GTiff -ot UInt16 %s %s’ % (shp_clip, raster,corte))
File «C:\usbgis\apps\qgis2\apps\Python27\lib\subprocess.py», line 524, in call
return Popen(*popenargs, **kwargs).wait()
File «C:\usbgis\apps\qgis2\apps\Python27\lib\subprocess.py», line 711, in __init__
errread, errwrite)
File «C:\usbgis\apps\qgis2\apps\Python27\lib\subprocess.py», line 948, in _execute_child
startupinfo)
WindowsError: [Error 2] El sistema no puede encontrar el archivo especificado
El problema parece que tiene que ver con el tipo de barra que usas (/ \), usa la barra inversa invertida \.