Her özellik için ayrı ayrı RGB değerleri çizin
Aug 18 2020
Katmanın ilgili özelliği için her rgb değerini pyqgis aracılığıyla çizmek istiyorum. Atm Her katman için ayrı ayrı düzgün bir şekilde uygulamakta zorlanıyorum. Aşağıdaki mevcut kodum ile tüm özellikler 3. sıradaki son renk kodunu alır. ve bu nedenle her unsurun ayrı ayrı rengi yerine hepsi aynı renge sahiptir.
QGIS 2.8.8 Wien kullanıyorum ve bu nedenle QGIS 3 için önerilen çözümler düzgün çalışmıyor.
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)


Yanıtlar
2 LouisCottereau Aug 18 2020 at 21:08
İşte sizin için uyarladığım bir kod, qgis 2.18.28'imde çalıştı:
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)
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Nicole Kidman, Michael Keaton ve Val Kilmer'in Batman Olarak Paylaştığı Bu 1 Çekici Özelliğe Bayıldı
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'