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)