Cách đặt độ trong suốt cho nhiều giá trị raster bằng Python


11

Với đoạn mã sau tôi có thể đặt độ trong suốt 100% thành giá trị 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()

Làm cách nào để xác định hai giá trị (0 và 8) trong suốt 100%?

Khi tôi lặp lại các lệnh của khối cuối cùng với giá trị raster 8, giá trị đầu tiên (0) sẽ bị xóa khỏi độ trong suốt của lớp.

Câu trả lời:


10

Tôi đã tìm thấy chủ đề khác này rất hữu ích Làm cách nào để thiết lập độ trong suốt của lớp trong QGIS 2.0 với Python? Có vẻ như nên có một cách ngắn hơn và hiệu quả hơn, nhưng tôi đã thử nghiệm điều này và nó hoạt động:

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

Python có phải là một yêu cầu không? Nếu tôi hiểu những gì bạn muốn, bạn có thể thực hiện điều này trong Giao diện người dùng QGIS, trong các thuộc tính của lớp raster: nhập mô tả hình ảnh ở đây


Vâng, Python là một yêu cầu. Tôi đã xây dựng một plugin tải bản đồ địa hình cho dự án QGIS, được chọn từ hệ thống dòng.
Stefan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.