Cara mengatur transparansi ke beberapa nilai raster dengan Python

11

Dengan kode berikut saya dapat mengatur transparansi 100% ke nilai 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()

Bagaimana saya bisa mendefinisikan dua nilai (0 dan 8) menjadi 100% transparan?

Ketika saya mengulangi perintah dari blok terakhir dengan nilai raster 8, nilai pertama (0) dihapus dari transparansi layer.

Stefan
sumber

Jawaban:

10

Saya menemukan utas lainnya yang bermanfaat. Bagaimana cara mengatur transparansi lapisan dalam QGIS 2.0 dengan Python? Sepertinya harus ada cara yang lebih pendek dan lebih efisien, tetapi saya menguji ini dan berhasil:

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

Apakah Python persyaratan? Jika saya mengerti apa yang Anda inginkan, Anda bisa melakukan ini di QGIS UI, di properti layer raster: masukkan deskripsi gambar di sini

Jeff G
sumber
Ya, Python adalah persyaratan. Saya telah membangun sebuah plugin yang memuat peta topografi ke proyek QGIS, yang dipilih dari sistem garis lembar.
Stefan