Lista de colores ampliada para una Color Ramp Shader en PyQGIS

En el post pasado se construyó una rampa de pseudocolor empleando los métodos de clase de PyQGIS. Las principales clases usadas fueron la QgsColorRampShader, la QgsRasterShader y la QgsSingleBandPseudoColorRenderer. En este post se utiliza ahora una lista con tres colores (en lugar de 2), que se seleccionan a partir de un diccionario, para colorizar los pixeles de un raster ‘singlebandgray’ con base en tres intervalos iguales que se han generado a partir de los valores mínimo y máximo del raster.

Para facilitar el uso de los ‘QColor’ en la ‘ColorRampItem’ se emplea la nomenclatura html (formato hexadecimal) que se obtiene facilmente a partir de la ventana ‘Change Foreground Color’ del software libre GIMP; tal como se evidencia en la imagen siguiente (el color azul se representa como QColor(‘#0000ff’) en QGIS):

gimp

El código que mejor funcionó fue el siguiente:

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

layer=iface.activeLayer()

min=1323
max =3556
range =max-min
add=range//2
int =min + add

colDic={'red':'#ff0000', 'yellow':'#ffff00','blue':'#0000ff'}

valueList =[min, int, max]
 
lst = [ QgsColorRampShader.ColorRampItem(valueList[0], QColor(colDic['red'])), \
    QgsColorRampShader.ColorRampItem(valueList[1], QColor(colDic['yellow'])), \
    QgsColorRampShader.ColorRampItem(valueList[2], QColor(colDic['blue']))]

myRasterShader = QgsRasterShader()
myColorRamp = QgsColorRampShader()

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

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

layer.setRenderer(myPseudoRenderer)

layer.triggerRepaint()

Produce una rampa de pseudocolor que va desde el rojo al azul pasando por el amarillo como color intermedio.

Por otra parte, traté de simplificar el código con un bucle y un append a una lista vacía pero, por alguna razón, este procedimiento no libera el buffer que almacena los colores. Esto se comprueba fácilmente cambiando el 2 de la división entera de add=range//2 por cualquier otro valor y debería cambiar la imagen de pseudocolor. No se detectan cambios ni siquiera haciendo un append fuera de un bucle. Por esta razón me quedé con este código.

La ejecución del código en el editor de la Python Console produce lo siguiente:

pseudocolor

Las zonas más bajas son las rojas y las más altas las azules (se trata de un raster DEM). Si se cambia el factor ya mencionado, por ejemplo a 5, se obtiene lo siguiente:

pseudocolor2

Si el factor se coloca en un 1.000.000 se obtiene una rampa amarillo-azul y si es 1 una rampa rojo-amarillo. A continuación se tiene la imagen con la primera situación:

pseudocolor3

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

3 respuestas a Lista de colores ampliada para una Color Ramp Shader en PyQGIS

  1. Pingback: Lista de colores ampliada para una Color Ramp S...

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

  3. 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