Ejecutar Algoritmos de Procesamiento vía Python (QGIS3)

La Caja de Herramientas Procesos en QGIS contiene una colección siempre creciente de herramientas de geoprocesamiento. La caja de herramientas provee un interfaz sencillo de procesamiento por lotes que ejecuta cualquier algoritmo en un gran número de entradas. Vea Procesamiento por Lotes usando el Marco de Procesamiento (QGIS3). Pero hay casos donde necesita incorporar un poco más de lógica personalizada en su procesamiento por lotes. Como todos los algoritmos de procesamiento pueden ser ejecutados programáticamente vía la API Python, usted puede ejecutarlos vía la Consola de Python. Este tutorial muestra cómo ejecutar una algoritmo de procesamiento vía la Consola de Python para realizar una tarea de geoprocesamiento personalizada en solo una pocas líneas de código. Por favor revise el tutorial Iniciándote con la Programación Python (QGIS3) para familiarizarse con lo básico del ambiente de Script Python en QGIS.

Vista general de la Tarea

Usaremos 12 capas ráster grid que representan la precipitación para cada mes del año y calcularemos la precipitación mensual promedio para todos los códigos zip en el área de Seattle.

Otras habilidades que aprenderá

  • Cómo borrar una columna (i.e., campo) de una capa vectorial

Obtener los datos

El Grupo de Clima PRISM reune observación del clima y provee datos históricos y actuales del clima para los estados contiguos de EE.UU. Diríjase a la página de datos Años Recientes y descargue los datos mensuales de precipitación para el año 2017 en formato BIL.

../../_images/data14.png

El portal de Datos Abiertos de la Ciudad de Seattle provee datos libres y abiertos para la ciudad. Busque y descargue los datos de Códigos Zip en formato de archivo shape.

Para su comodidad, puedes descargar directamente una copia de ambos conjuntos de datos desde los enlaces abajo:

PRISM_ppt_stable_4kmM3_2017_all_bil.zip

Zip_Codes.zip

Fuente de Datos [PRISM] [CITYOFSEATTLE]

Procedimiento

  1. Descomprima el archivo PRISM_ppt_stable_4kmM3_2017_all_bil.zip. Ubique la carpeta PRISM_ppt_stable_4kmM3_2017_all_bil en el Explorador QGIS y expándalo. La carpeta contiene 12 capas individuales para cada mes. Mantenga presionala la tecla Ctrl y seleccione los archivos .bil para todos los 12 meses. Una vez seleccionado, arrástrelos a la pantalla.

../../_images/1105.png

Nota

Los datos son provistos en el formato BIL. Cada capa es presentada con un conjunto de archivos .bil que contienen los datos efectivos, un archivo .hdr que describe la estructura de los datos y un archivo .prj que contiene la información de proyección. QGIS puede cargar el archivo .bil siempre que los otros archivos existan en el mismo directorio.

  1. A continuación, descomprima el archivo Zip_Codes.zip y extraiga el archivo shape a una carpeta. Localice la carpeta Zip_Codes y expándala. Arrastre el archivo Zip_Codes.shp a la pantalla.

../../_images/260.png

Nota

The unzip step is important because the Zonal Statistics algorithm works by adding a new field to the layer. If the layer is zipped, QGIS cannot update the layer.

  1. Clic-derecho en la capa Zip_Codes y seleccione Zoom a la Capa. Verá los polígonos de código zip para la ciudad de Seattle y áreas vecinas.

../../_images/338.png
  1. Vaya a Procesos ‣ Caja de herramientas.

../../_images/422.png
  1. El algoritmo para muestrear una capa ráster usando polígonos vectoriales es conocido como Estadísticas zonales. Busque el algoritmo en la Caja de herramientas Procesos. Seleccion el algoritmo y ubique el ratón por encima. Verá un mensaje de herramienta con el texto Algorithm ID: “qgis:zonalstatistics”. Anote este id que será necesitado para llamar a este algoritmo mediante la API Python. Haga doble-clic en el algoritmo Estadísticas zonales para iniciarlo.

../../_images/522.png
  1. Haremos una ejecución manual de prueba del algoritmo para una sola capa. Ésta es una manera útil de revisar si el algoritmo se comporta como se espera y también una manera fácil para averiguar cómo pasar parámetros relevantes al algoritmo cuando se lo usa mediante Python. En el diálogo Zonal statistics, seleccione PRISM_ppt_stable_4kmM3_201701_bil como la Capa ráster y Zip_Codes como la Capa vectorial que contiene zonas. Deje los otros parámetros predeterminados. Clic en el botón junto a Estadísticas a calcular y seleccione sólo Media. Clic en Ejecutar.

../../_images/622.png
  1. Una vez que finalice el algoritmo, cambia a la pestaña Registro. Tome nota de los Parámetros de Entrada que fueron pasados al algoritmo. Clic en Cerrar.

../../_images/721.png
  1. Revisemos los resultados de la ejecución de prueba. En la ventana principal QGIS, clic-derecho a la capa Zip_Codes y seleccione Abrir tabla de atributos. Este algoritmo particular modifica la capa zona de entrada en el lugar y agrega una nueva columna para cada estadística seleccionada. Como habíamos seleccionado sólo el valor Media, una nueva columna llamada _mean es agregada a la tabla. El _ fue el prefijo predeterminado. Cuando ejecutamos el algoritmo para capas de cada mes, será útil especificar un prefijo predeterminado con el número de mes de manera que podamos identificar fácilmente los valores medios para cada mes (i.e., 01_mean, 02_mean, etc.). Especificar este prefijo predeterminaod no es posible en el Interfaz de Procesamiento por Lotes de QGIS y si ejecutáramos este comando usando el interfaz, tendríamos que ingresar manualmente el prefijo predeterminado para cada capa. Si está trabajando con un gran número de capas, esto puede ser muy incómodo. Por lo tanto, podemos agregar esta lógica personalizada usando la API Python y ejecutando el algoritmo en un bucle for para cada capa.

../../_images/821.png
  1. Antes que procedamos, borremos la columna _mean que fue creada durante nuestra ejecución de prueba. Clic en el botón modo de Conmutar Edición, seguido por el botón Borrar campo. Seleccione el campo _mean y clic en Aceptar.

../../_images/921.png
  1. Clic el botón Conmutar edición de nuevo y Guardar los cambios.

../../_images/1021.png
  1. De vuelta en la ventana principal QGIS, vaya a Complementos ‣ Consola de Python.

../../_images/1125.png
  1. Para ejecutar el algoritmo de procesamiento mediante Python, necesitamos acceder a los nombres de todas las capas. Ingrese el siguiente código en la Consola Python y presione Intro. Verá los nombres de todas las capas impresas en la consola.

root = QgsProject.instance().layerTreeRoot()
for layer in root.children():
  print(layer.name())
../../_images/121.gif
  1. Para agregar un prefijo personalizado, necesitamos mirar el nombre de la capa y extraer una subcadena que representa el número de mes. Ingrese el siguiente código para iterar sobre todas las capas ráster, extraiga el prefijo personalizado y ejecute el algoritmo qgis:zonalstatistics usándolo.

root = QgsProject.instance().layerTreeRoot()
for layer in root.children():
  if layer.name().startswith('PRISM'):
    prefix = layer.name()[-6:-4]
    params = {'INPUT_RASTER': layer.name(), 'RASTER_BAND': 1, 'INPUT_VECTOR': 'Zip_Codes', 'COLUMN_PREFIX': prefix+'_', 'STATS': 2}
    processing.run("qgis:zonalstatistics", params)
../../_images/131.gif
  1. Una vez que termine el procesamiento, clic-derecho en la capa Zip_Codes y seleccione Abrir tabla de atributos.

../../_images/1420.png
  1. Verá agregadas 12 nuevas columnas a la tabla con prefijos personalizados y valores medios de precipitación extraídos de las capas ráster.

../../_images/1519.png
comments powered by Disqus