domingo, 12 de marzo de 2017

Cómo copiar a una columna el nombre del color para un vectorial con Graduated Symbol Renderer en PyQGIS

En esta pregunta de gis.stackexchange.com se indaga acerca de cómo guardar el color de un rasgo en un campo de la tabla de atributos para un vectorial que ha sido clasificado con un renderizado "Graduated Symbol". La razón de ésta se debe a que el script empleado directamente de otra pregunta no funciona porque es válido para un Categorized Symbol Renderer.


Para resolver este problema se propuso el siguiente script:


1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
layer = iface.activeLayer()

provider = layer.dataProvider()

renderer = layer.rendererV2()

feats = [ feat for feat in layer.getFeatures() ]
values = [ feat.attribute('FID')  for feat in feats ] #change for 'NDVI' in case of NDVI field

n = len(feats)

color_feats = [ renderer.symbolForValue(value).color().name() for value in values ]

idx = layer.fieldNameIndex('color')
 
for i, feat in enumerate(feats):
    new_values = {idx : color_feats[i]}
    provider.changeAttributeValues({i:new_values})

que ejecutado en la Python Console de QGIS para un vectorial con un render "Graduated Symbol" con 4 clases para el campo 'FID' produjo este resultado:


Si se cambia la base de la clasificación al campo 'NDVI' (ver imagen de abajo), para lo cual hay que sustituir en el código el label 'FID' por el de 'NDVI' en la lista values, el resultado siguiente es también satisfactorio; con 5 clases para "Graduated Symbol Renderer":


No hay comentarios: