So legen Sie mit Python Transparenz für mehrere Rasterwerte fest

11

Mit dem folgenden Code kann ich 100% Transparenz auf den Rasterwert 0 setzen:

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()

Wie kann ich zwei Werte (0 und 8) so definieren, dass sie 100% transparent sind?

Wenn ich die Befehle des letzten Blocks mit dem Rasterwert 8 wiederhole, wird der erste Wert (0) aus der Ebenentransparenz entfernt.

Stefan
quelle

Antworten:

10

Ich habe diesen anderen Thread gefunden, der hilfreich war. Wie stelle ich die Layertransparenz in QGIS 2.0 mit Python ein? Es scheint, dass es einen kürzeren und effizienteren Weg geben sollte, aber ich habe dies getestet und es funktioniert:

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
quelle
2

Ist Python eine Voraussetzung? Wenn ich verstehe, was Sie wollen, können Sie dies in der QGIS-Benutzeroberfläche in den Eigenschaften der Rasterebene tun: Geben Sie hier die Bildbeschreibung ein

Jeff G.
quelle
Ja, Python ist eine Voraussetzung. Ich habe ein Plugin erstellt, das topografische Karten in ein QGIS-Projekt lädt, das aus einem Blattliniensystem ausgewählt wurde.
Stefan