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.

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'

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


Ya, Python adalah persyaratan. Saya telah membangun sebuah plugin yang memuat peta topografi ke proyek QGIS, yang dipilih dari sistem garis lembar.
Stefan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.