Plot nilai RGB untuk setiap fitur secara terpisah
Aug 18 2020
Saya ingin memplot setiap nilai rgb untuk fitur masing-masing lapisan melalui pyqgis. Atm saya berjuang untuk menerapkannya dengan benar untuk setiap lapisan secara individual. Dengan kode saya saat ini di bawah ini, semua fitur mendapatkan kode warna terakhir di baris no. 3. dan oleh karena itu mereka semua memiliki warna yang sama, bukan setiap elemen adalah satu individu.
Saya menggunakan QGIS 2.8.8 Wien dan oleh karena itu solusi yang diusulkan untuk QGIS 3 tidak bekerja dengan baik.
b = iface.activeLayer()
symbols = b.rendererV2().symbols()
symbol = symbols[0]
for f in b.getFeatures():
expr = f['rgb']
express = "color_rgb("+str(expr) +")"
symbol.symbolLayer(0).setDataDefinedProperty('color', express)
b.triggerRepaint()
iface.legendInterface().refreshLayerSymbology(b)


Jawaban
2 LouisCottereau Aug 18 2020 at 21:08
Berikut adalah kode yang saya sesuaikan untuk Anda, ini berfungsi pada qgis 2.18.28 saya:
b = iface.activeLayer()
fni = b.fieldNameIndex("rgb")
unique_values = b.uniqueValues(fni)
# fill categories
categories = []
for unique_value in unique_values:
red, blue, green = unique_value.split(",")
# initialize the default symbol for this geometry type
symbol = QgsSymbolV2.defaultSymbol(b.geometryType())
symbol.setSize(size)
# configure a symbol layer
layer_style = {}
layer_style['color'] = '%d, %d, %d' % (red, blue, green)
layer_style['outline'] = '#000000'
symbol_layer = QgsSimpleFillSymbolLayerV2.create(layer_style)
# replace default symbol layer with the configured one
if symbol_layer is not None:
symbol.changeSymbolLayer(0, symbol_layer)
# create renderer object
category = QgsRendererCategoryV2(unique_value, symbol, str(unique_value))
# entry for the list of category items
categories.append(category)
# create renderer object
renderer = QgsCategorizedSymbolRendererV2('$id', categories)
# assign the created renderer to the layer
if renderer is not None:
b.setRendererV2(renderer)
b.triggerRepaint()
b.triggerRepaint()
iface.legendInterface().refreshLayerSymbology(b)
Selalu Menjadi Ancaman: Mengapa Orang Berkulit Coklat dan Hitam Tidak Bisa Nyaman di Amerika Serikat
Jana Duggar: Semua yang Dia Katakan Tentang Cinta dan Jendela 5 Tahunnya untuk Menemukan 'Yang Satu'