Comment définir la transparence sur plusieurs valeurs raster avec Python

11

Avec le code suivant, je peux définir 100% de transparence sur la valeur raster 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()

Comment définir deux valeurs (0 et 8) pour qu'elles soient 100% transparentes?

Lorsque je répète les commandes du dernier bloc avec la valeur raster 8, la première valeur (0) est supprimée de la transparence du calque.

Stefan
la source

Réponses:

10

J'ai trouvé cet autre fil qui était utile Comment définir la transparence des couches dans QGIS 2.0 avec Python? Il semble qu'il devrait y avoir un moyen plus court et plus efficace, mais j'ai testé cela et cela fonctionne:

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
la source
2

Python est-il une exigence? Si je comprends ce que vous voulez, vous pouvez le faire dans l'interface utilisateur de QGIS, dans les propriétés de la couche raster: entrez la description de l'image ici

Jeff G
la source
Oui, Python est une exigence. J'ai construit un plugin qui charge des cartes topographiques dans un projet QGIS, sélectionné à partir d'un système de ligne de feuille.
Stefan