¿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.