La clase QgsRasterTransparency con PyQGIS

La clase QgsRasterTransparency de QGIS permite establecer en rásteres el nivel de transparencia de píxeles individuales o grupos de píxeles. El acceso a este tipo de objectos es posible mediante el método ‘rasterTransparency’ de los diferentes renderer (QgsSingleBandGrayRenderer, QgsSingleBandPseudoColorRenderer, etc) que se pueden disponer; incluyendo los multibanda tipo RGB.

Como la clase apenas contiene sólo 29 elementos en su descripción (ver imagen siguiente), no es muy difícil instanciarla y analizarla. Si se quiere hacer transparentes grupos de píxeles aislados entonces tendremos que crear tantos objetos como grupos existan. Si es sólo un píxel o sólo un grupo de píxeles en un intervalo discreto consecutivo basta simplemente con un objeto. Estos objetos son del tipo TransparentSingleValuePixel y tienen que ser almacenados en una lista que se introduce en el objeto QgsRasterTransparency mediante el método ‘setTransparentSingleValuePixelList’.

transparency1

Los métodos de los objetos TransparentSingleValuePixel se pueden averiguar con un ‘dir’, tal como se ejemplifica a continuación, y los tres más importantes a considerar son ‘max’, ‘min’ y ‘percentTransparent’.

dir(QgsRasterTransparency.TransparentSingleValuePixel)
['__class__', '__delattr__', '__dict__', '__doc__', 
'__format__', '__getattribute__', '__hash__', '__init__', 
'__module__', '__new__', '__reduce__', '__reduce_ex__', 
'__repr__', '__setattr__', '__sizeof__', '__str__', 
'__subclasshook__', '__weakref__', 'max', 'min', 
'percentTransparent']

Para ejemplificar el uso de la clase se tiene el código siguiente:

layer = iface.activeLayer()

transparency  = layer.renderer().rasterTransparency()

n = 2

pixels = [ QgsRasterTransparency.TransparentSingleValuePixel()
           for i in range(n) ]

min = [ 1348, 2000 ]
max = [ 1500, 3000]

trpcy = 100

for i, item in enumerate(pixels):
    item.min = min[i]
    item.max = max[i]
    item.percentTransparent = trpcy

transparency.setTransparentSingleValuePixelList( pixels )

layer.triggerRepaint()  

que voy a usar con el ráster dem a continuación:

transparency2

La ejecución del código anterior en la Python Console de QGIS va a hacer 100 % transparentes a los píxeles en dos grupos. El primero abarca desde 1348 hasta 1500 y el segundo desde 2000 hasta 3000. El resultado es el siguiente:

transparency3

En las propiedades de la capa, imagen inferior, se puede observar como la ejecución del código adicionó los intervalos de píxeles transparentes a la lista de píxeles de las ‘Custom transparency options’.

transparency4

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

2 respuestas a La clase QgsRasterTransparency con PyQGIS

  1. Buen día amigo, primero quiero felicitarte por la valiosa información que nos compartes en tu blog. Pero quiero consultarte lo siguiente:

    Estoy trabajando con imagenes de Google Earth visualizadas a traves del Open layers pluggin en el QGIS, después cargo toda mi información vectorial, y todo ensambla bien (imagen satelital e información vectorial), despues genero mi layout a partir de los datos obtenidos del proyecto. Hasta ese punto toda la información esta bien, pero cuando guardo mi layout en formato jpg, png, tif, pdf, el resultante es un archivo que presenta la información desplazada de la imagen o las imagenes satelitales no salen completas.
    Ya he intentado en ver si es algun problema del sistema de referencia y todos los archivos tiene el mismo sistema de referencia; tambien actualice el proyecto tanto la del layout, bloquee las vista de las capas para que no afectara al layout. Con ninguna de las anteriores logre algun cambio.

    Saludos espero tu ayuda

    • Gracias por tus comentarios. Tu problema es con el Map Composer y yo poco trabajo con él (mi interés está más centrado en los geoprocesamientos con Python). Trata de ubicar en el manual de QGIS cuales son las opciones más comunes para la configuración y producción de mapas.

      Saludos

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