Wie kopiere ich den Farbstil in eine Farbspalte in der Attributtabelle einer Ebene?

15

In QGIS gibt es eine Polygonebene, auf die ich jedem Polygon einen zufälligen Farbstil zugewiesen habe. Unter Layereigenschaften -> Stil habe ich einen kategorisierten Stil ausgewählt und dann einen zufälligen Farbverlauf erzeugt. Ich habe der Layertabelle eine Farbspalte hinzugefügt. Gibt es eine Möglichkeit, die im Stil zugewiesene Farbe automatisch in die Farbspalte für jedes Polygon in der Form "# ff0000" zu kopieren.

Letztendlich möchte ich es als GeoJSON-Ebene exportieren und in eine Broschürenkarte importieren. Die Farbspalte legt die Farbe in der Broschüre fest.

user2956607
quelle

Antworten:

22

Sie können dafür PyQGIS verwenden (obwohl Sie nicht sicher sind, ob dies die beste Lösung ist).

Wählen Sie die Ebene in QGIS ToC aus (oder aktivieren Sie sie), öffnen Sie die QGIS Python-Konsole und kopieren Sie diesen Codeausschnitt:

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 )

Ich gehe davon aus, dass Ihr Feld zum Speichern von Farben als "Farbe" bezeichnet wird. Nachdem ich es ausgeführt habe, habe ich Folgendes erhalten:

Bildbeschreibung hier eingeben

Lassen Sie mich wissen, wenn Sie auf ein Problem stoßen.

Germán Carrillo
quelle
Gibt es die Möglichkeit, dies für RGB zu tun?
Diogo Caribé
Sicher. cat.symbol().color().name()Tun Sie Folgendes , anstatt anzurufen :str(cat.symbol().color().red()) +','+ str(cat.symbol().color().green()) +','+ str(cat.symbol().color().blue())
Germán Carrillo
In qgis 3.6 weiterhin gültig, abgesehen von der API-Umbenennung rendererV2 -> renderer
sabas
Hat hier nicht an QGis 3.6 gearbeitet. Ich habe rendererV2 in renderer umbenannt, aber es hat nicht funktioniert.
Paladini