Come copiare lo stile del colore in una colonna di colore nella tabella degli attributi di un livello?


15

Ho un layer poligonale in QGIS che ho applicato uno stile di colore casuale a ciascun poligono. In Proprietà livello -> Stile ho selezionato uno stile classificato e quindi ho generato una scala di colori casuale. Ho aggiunto una colonna di colori alla tabella dei livelli. Esiste un modo per copiare automaticamente il colore assegnato nello stile nella colonna dei colori per ciascun poligono nel formato "# ff0000".

Alla fine, voglio esportarlo come layer GeoJSON e importarlo in una mappa di opuscoli. La colonna dei colori imposterà il colore nell'opuscolo.

Risposte:


22

Potresti usare PyQGIS per questo (non sono sicuro che sia la soluzione migliore per questo).

Seleziona (o attiva) il layer in QGIS ToC, apri la console QGIS Python e copia questo snippet di codice:

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 )

Presumo che il tuo campo per memorizzare i colori sia chiamato 'colore'. Dopo averlo eseguito, ho ottenuto questo:

inserisci qui la descrizione dell'immagine

Fammi sapere se hai qualche problema.


C'è possibilità di farlo per RGB?
Diogo Caribé,

Sicuro. Invece di chiamare cat.symbol().color().name(), fai qualcosa del genere:str(cat.symbol().color().red()) +','+ str(cat.symbol().color().green()) +','+ str(cat.symbol().color().blue())
Germán Carrillo,

Ancora valido in qgis 3.6, a parte l'API rinomina rendererV2 -> renderer
sabas

Non ha funzionato su QGis 3.6 qui. Ho rinominato rendererV2 in renderer, ma non ha funzionato.
Paladini,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.