Rampa de pseudocolor mediante PyQGIS

En este post voy a considerar como establecer una rampa de pseudocolor mediante PyQGIS. A pesar de lo sencillo del script, me ha costado un poco encontrar la solución debido a que el Manual Oficial del 2014 (PyQGIS Cook Book) mantiene aún sin actualizar un considerable número de métodos de clase y sus ejemplos no funcionan. El problema es especialmente notable en lo que respecta a las Raster Layers.

El script comienza creando una referencia a la capa activa mediante iface. Luego se crea una lista de colores para la rampa (tomé los dos que ejemplifica el PyQGIS Cook Book pero se pueden añadir o generar más). Como el raster que voy a usar tiene valores entre 1323 y 3556 estos son los que consideré. Si se quiere automatizar el proceso entonces habría que obtener las estadísticas del ráster a través del método ‘dataProvider’ de QgsRasterLayer.

En el PyQGIS Cook Book hacen referencia a un método ‘rasterShader’ que ya no existe en la clase QgsRasterLayer y el cual permitiría acceder al método ‘rasterShaderFunction’ de una clase a la cual no mencionan. Las líneas siguientes en el PyQGIS Cook Book permiten visualizar que una de las clases clave es la QgsColorRampShader. La otra clase clave es QgsRasterShader que es en donde está la función “pérdida”.

Finalmente, se utiliza el constructor de la clase QgsSingleBandPseudoColorRenderer para crear el renderizado en pseudocolor el cual se asigna a la layer mediante ‘setRenderer’.

El código que ejecuté desde el editor de la Python Console es el siguiente:

from PyQt4.QtCore import *
from PyQt4.QtGui import *

layer=iface.activeLayer()

#To set an interpolated color ramp shader ranging from green to yellow color
#(for pixel values from 1323 to 3556)
lst = [ QgsColorRampShader.ColorRampItem(1323, QColor(0,255,0),'green'), \
    QgsColorRampShader.ColorRampItem(3556, QColor(255,255,0),'yellow') ]
    
myRasterShader = QgsRasterShader()
myColorRamp = QgsColorRampShader()

myColorRamp.setColorRampItemList(lst)
myColorRamp.setColorRampType(QgsColorRampShader.INTERPOLATED)
myRasterShader.setRasterShaderFunction(myColorRamp)

myPseudoRenderer = QgsSingleBandPseudoColorRenderer(\
    layer.dataProvider(), 1,  myRasterShader)

layer.setRenderer(myPseudoRenderer)

iface.mapCanvas().refresh()

La layer de partida esta en esta forma:

enhancement3

y al correr el script se obtuvo lo siguiente:

pseudocolor

Es sólo cuestión de modificarlo para que se adapte a nuestras preferencias.

Esta entrada fue publicada en Código Python, PyQGIS, SIG, Software Libre. Guarda el enlace permanente.

2 respuestas a Rampa de pseudocolor mediante PyQGIS

  1. Pingback: Cómo establecer el color de un rasgo (feature) dependiendo de los valores de los atributos con PyQGIS | El Blog de José Guerrero

  2. Pingback: Cómo cambiar el renderizado de un ráster basado en pseudo color o palette a single band gray | 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