Comment copier le style de couleur dans une colonne de couleur dans la table attributaire d'un calque?

15

J'ai une couche de polygones dans QGIS à laquelle j'ai appliqué un style de couleur aléatoire à chaque polygone. Sous Propriétés du calque -> Style, j'ai sélectionné un style catégorisé, puis j'ai généré une rampe de couleurs aléatoire. J'ai ajouté une colonne de couleur à la table des calques. Existe-t-il un moyen de copier automatiquement la couleur attribuée dans le style à la colonne de couleur pour chaque polygone sous la forme "# ff0000".

En fin de compte, je veux l'exporter en tant que couche GeoJSON et l'importer dans une carte de dépliant. La colonne de couleur définira la couleur dans la brochure.

user2956607
la source

Réponses:

22

Vous pouvez utiliser PyQGIS pour cela (mais je ne suis pas sûr que ce soit la meilleure solution).

Sélectionnez (ou activez) la couche dans QGIS ToC, ouvrez la console QGIS Python et copiez cet extrait de code:

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 )

Je suppose que votre champ pour stocker les couleurs s'appelle «couleur». Après l'avoir exécuté, j'ai obtenu ceci:

entrez la description de l'image ici

Faites-moi savoir si vous rencontrez un problème.

Germán Carrillo
la source
Est-il possible de le faire pour RVB?
Diogo Caribé
Sûr. Au lieu d'appeler cat.symbol().color().name(), faites quelque chose comme ceci:str(cat.symbol().color().red()) +','+ str(cat.symbol().color().green()) +','+ str(cat.symbol().color().blue())
Germán Carrillo
Toujours valide dans qgis 3.6, à part l'API renommer rendererV2 ->
renderer
N'a pas fonctionné sur QGis 3.6 ici. J'ai renommé rendererV2 en renderer, mais cela n'a pas fonctionné.
Paladini