Как установить прозрачность для нескольких растровых значений с помощью Python

11

С помощью следующего кода я могу установить 100% прозрачность для растрового значения 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()

Как я могу определить два значения (0 и 8), чтобы быть на 100% прозрачным?

Когда я повторяю команды последнего блока со значением растра 8, первое значение (0) удаляется из прозрачности слоя.

Стефан
источник

Ответы:

10

Я нашел этот другой поток, который был полезен. Как мне установить прозрачность слоя в QGIS 2.0 с Python? Кажется, что должен быть более короткий и эффективный способ, но я проверил это, и это работает:

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
источник
2

Является ли Python обязательным требованием? Если я понимаю, что вы хотите, вы можете сделать это в пользовательском интерфейсе QGIS, в свойствах растрового слоя: введите описание изображения здесь

Джефф Дж
источник
Да, Python является обязательным требованием. Я создал плагин, который загружает топографические карты в проект QGIS, выбранный из системы листов.
Стефан