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.

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'

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í


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.