Creando un plugin de QGIS para determinar el promedio de un ráster con GDAL

Crear un plugin para QGIS no es una tarea muy difícil con la plantilla conocida como ‘Plugin Builder’, sin embargo, tampoco existe mucha documentación actualizada al respecto porque el ritmo de desarrollo frénetico de QGIS la deja obsoleta en poco tiempo y dificil de seguir por comparación si la versión de ‘Plugin Builder’ ha cambiado sustancialmente.

Cuando se genera la plantilla para nuestro plugin la compilación de los recursos es automática con make y todas las modificaciones que realicemos con el QtDesigner son capturadas también automaticamente sin necesidad de una nueva compilación. Por tanto, si nuestro código funciona en la Python Console esto nos lleva sólo a preocuparnos por la sintaxis (adaptarla a la nomenclatura de clases) y el sitio donde hay que colocar los “snipped” para que funcione adecuadamente el plugin.

En nuestro curso de PyQGIS, abordaremos todas las cuestiones fundamentales relativas al manejo de datos Raster con Python y QGIS. Además, también tratamos la temática relativa a PyQGIS para el manejo de datos vectoriales y una introducción a la creación de plugins mediante el ‘Plugin Builder’.

PRÓXIMA SESIÓN EL 20 DE OCTUBRE

En el plugin que se está interesado en desarrollar lo primero que hicimos fue crear un icono personalizado de tamaño 24×24 con el Gimp y nombrarlo como AverageRaster.png. Este nombre debe ser sustituido en los archivos generados por ‘Plugin Builder’: resources.qrc, metadata.txt y average_raster.py. Este último es la aplicación principal que se genera de acuerdo a los datos que introducimos en el formulario inicial de solicitud al crear el plugin. Este formulario fue el siguiente:

plugin1

Al hacer click en OK se pide el directorio de ubicación del plugin; que en Windows corresponde a:

    C:\Users\your_name_user\.qgis2\python\plugins

Una vez seleccionado el folder nos remite a este resumen que contiene los datos de creación de nuestro plugin:

plugin2

Click en OK para aceptar los resultados. Ahora grabamos en el directorio del plugin:

    C:\Users\your_name_user\.qgis2\python\plugins\AverageRaster

el icono AverageRaster.png y procedemos a realizar las modificaciones ya mencionadas en resources.qrc, metadata.txt y average_raster.py. Lanzamos la OSGeo4W Console y ejecutamos (en mi caso el user_name es zeito):

cd C:\Users\your_name_user\.qgis2\python\plugins\AverageRaster [Enter]
make  [Enter]

compilando automáticamente los recursos (traducción de XML a Python) sin necesidad de preocuparse de la sintaxis del comando pyrcc4.

plugin3

En el menú de Plugins -> Manage and Install Plugins ya se puede observar su disponibilidad. Hacemos click en la casilla correspondiente para habilitarlo y luego en Close.

plugin4

Cerramos y abrimos nuevamente QGIS donde se visualizará en la Tool Bar el icono correspondiente (ver imagen inferior). Al hacer click en éste se desplegará la interface por defecto del plugin que, en esta fase de desarrollo, no hace absolutamente nada. En los siguientes pasos nos tocará, con la ayuda adicional del QtDesigner, darle funcionalidad al plugin.

plugin5

Por esta razón, vamos a abrir con el QtDesigner el archivo:

    average_raster_dialog_base.ui

que se encuentra en la ruta del plugin:

    C:\Users\your_name_user\.qgis2\python\plugins\AverageRaster

Le vamos a colocar dos labels con el texto que se encuentra en la imagen de inferior, así como, reducir su tamaño y cambiar de posición los botones (OK, Cancel). Una vez hechas las modificaciones guardamos los cambios.

plugin6

En QGIS, hacemos click en el icono del ‘Plugin Reloader’ (ver imagen siguiente) y en el menú de persiana seleccionamos AverageRaster y luego click en OK.

plugin7

Cuando hacemos click en el icono del plugin vemos que los cambios se han realizado de manera automática. No ha sido necesaria una compilación con pyuic4.

plugin8

Ahora sólo resta modificar el archivo principal average_raster.py para que al clickar OK se envie una señal al slot que permita determinar el promedio requerido. Se escogió GDAL para determinar el promedio porque se tiene acceso directo al array de datos lo que permitiría realizar, si se desea, otro tipo de tareas (clasificación, determinación de medias por filas, exploración de no data values, etc) con poco esfuerzo de programación. Por tanto, requerimos los módulos gdal (importado de osgeo) y struct. La porción de código que nos interesa la adaptamos de aquí:

Cómo leer los valores de un ráster usando el módulo GDAL con PyQGIS

Con relación a la interacción con el usuario, se requerirá una QgsMessageBar en modo de advertencia para comunicar la no existencia de capas activas. Por tanto, de qgis.gui se importa QgsMessageBar. Para visualizar el promedio se hará a través de una QMessageBox. En consecuencia, de PyQt4.gui importamos QMessageBox.

El código completo de average_raster.py se encuentra aquí:

http://pastebin.com/xS9hhtLy.

y el de average_raster_dialog.py en este otro link:

http://pastebin.com/Embr4wDT

Probando el plugin sin capa ráster activa:

plugin9

Determinando el promedio para dos ráster diferentes:

plugin10

Por otra parte, para que el plugin no de error con capas vectoriales hay que incluir esa excepción. Se deja como ejercicio.

Esta entrada fue publicada en PyQGIS, QGIS, Software Libre. Guarda el enlace permanente.

2 respuestas a Creando un plugin de QGIS para determinar el promedio de un ráster con GDAL

  1. Pingback: Modificando plugin de QGIS para determinar promedio ráster con GDAL | El Blog de José Guerrero

  2. Pingback: Newsletter Octubre 2015 | El Blog de José Guerrero

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s