¿Cómo copiar el estilo de color a una columna de color en la tabla de atributos de una capa?


15

Tengo una capa de polígono en QGIS en la que he aplicado un estilo de color aleatorio a cada polígono. En Propiedades de capa -> Estilo, seleccioné un estilo categorizado y luego generé una rampa de color aleatorio. Agregué una columna de color a la tabla de capas. ¿Hay alguna manera de copiar automáticamente el color asignado en el estilo a la columna de color para cada polígono en la forma "# ff0000".

En última instancia, quiero exportarlo como una capa GeoJSON e importarlo en un mapa de folleto. La columna de color establecerá el color en el folleto.

Respuestas:


22

Podría usar PyQGIS para eso (aunque no estoy seguro de cuál es la mejor solución).

Seleccione (o active) la capa en el QGIS ToC, abra la consola QGIS Python y copie este fragmento de código:

prefix = "'"
layer = iface.activeLayer()
attr = layer.rendererV2().classAttribute()
attrColor = 'color' # Name of the field to store colors
fieldIndex = layer.dataProvider().fieldNameIndex(attrColor)
attrFeatMap = {}

for cat in layer.rendererV2().categories(): 
  expr = "\""+attr+"\"="+prefix+unicode(cat.value())+prefix
  for f in layer.getFeatures(QgsFeatureRequest(QgsExpression(expr))):
    attrMap = { fieldIndex : cat.symbol().color().name()}
    attrFeatMap[ f.id() ] = attrMap

layer.dataProvider().changeAttributeValues( attrFeatMap )

Supongo que su campo para almacenar colores se llama 'color'. Después de ejecutarlo, obtuve esto:

ingrese la descripción de la imagen aquí

Avísame si tienes algún problema.


¿Existe la posibilidad de hacerlo por RGB?
— Diogo Caribé

Seguro. En lugar de llamar cat.symbol().color().name(), haga algo como esto:str(cat.symbol().color().red()) +','+ str(cat.symbol().color().green()) +','+ str(cat.symbol().color().blue())
— Germán Carrillo

Todavía válido en qgis 3.6, aparte del cambio de nombre de la API rendererV2 -> renderer
— sabas

No funcionó en QGis 3.6 aquí. Cambié el nombre de rendererV2 a renderer, pero no funcionó.
— Paladini
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.