Cómo establecer la transparencia en múltiples valores ráster con Python

11

Con el siguiente código, puedo establecer el 100% de transparencia en el valor ráster 0:

map=None

for lyr in QgsMapLayerRegistry.instance().mapLayers().values():
  if lyr.name() == "some_layer":
    map= lyr

tr=None

tr=QgsRasterTransparency()
tr.initializeTransparentPixelList(0)
map.renderer().setRasterTransparency(tr)
map.triggerRepaint()

¿Cómo puedo definir dos valores (0 y 8) para que sean 100% transparentes?

Cuando repito los comandos del último bloque con el valor ráster 8, el primer valor (0) se elimina de la transparencia de la capa.

Stefan
fuente

Respuestas:

10

Encontré este otro hilo que fue útil ¿Cómo configuro la transparencia de capa en QGIS 2.0 con Python? Parece que debería haber una forma más corta y más eficiente, pero probé esto y funciona:

print 'Start'
active_layer = qgis.utils.iface.mapCanvas().currentLayer()
raster_transparency  = active_layer.renderer().rasterTransparency()
ltr = QgsRasterTransparency.TransparentSingleValuePixel()
ltr2 =  QgsRasterTransparency.TransparentSingleValuePixel()
tr_list = []
ltr.min = 0  # Or another value
ltr.max = 0  # Or another value
ltr.percentTransparent = 100  # Or another value
ltr2.min = 8  # Or another value
ltr2.max = 8  # Or another value
ltr2.percentTransparent = 100
tr_list.append(ltr)
tr_list.append(ltr2)

raster_transparency.setTransparentSingleValuePixelList(tr_list)

active_layer.triggerRepaint()  # Tried with iface.mapCanvas().refresh(), but it didn't work
print 'Finish'
kflaw
fuente
2

¿Es Python un requisito? Si entiendo lo que quieres, puedes hacerlo en la interfaz de usuario de QGIS, en las propiedades de la capa ráster: ingrese la descripción de la imagen aquí

Jeff G
fuente
Sí, Python es un requisito. He creado un complemento que carga mapas topográficos en un proyecto QGIS, seleccionado de un sistema de línea de hoja.
Stefan