Como copiar o estilo de cores para uma coluna de cores na tabela de atributos de uma camada?


15

Eu tenho uma camada de polígono no QGIS que apliquei um estilo aleatório de cores em cada polígono. Em Propriedades da camada -> Estilo, selecionei um estilo categorizado e gerei uma rampa de cores aleatória. Adicionei uma coluna de cores à tabela de camadas. Existe uma maneira de copiar automaticamente a cor atribuída no estilo para a coluna de cores para cada polígono no formato "# ff0000".

Por fim, quero exportá-lo como uma camada GeoJSON e importá-lo para um mapa de folheto. A coluna de cores definirá a cor no folheto.

Respostas:


22

Você pode usar o PyQGIS para isso (embora não tenha certeza da melhor solução).

Selecione (ou ative) a camada no QGIS ToC, abra o console do QGIS Python e copie este trecho 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 )

Presumo que seu campo para armazenar cores seja chamado de 'cor'. Depois de executá-lo, obtive o seguinte:

insira a descrição da imagem aqui

Deixe-me saber se você enfrentar algum problema.


Existe a possibilidade de fazer isso para RGB?
Diogo Caribé

Certo. Em vez de ligar cat.symbol().color().name(), faça algo parecido com isto:str(cat.symbol().color().red()) +','+ str(cat.symbol().color().green()) +','+ str(cat.symbol().color().blue())
Germán Carrillo

Ainda no válida qgis 3.6, além do rendererV2 API renomeação -> processador
Sabas

Não funcionou no QGis 3.6 aqui. Renomeei o rendererV2 para renderizador, mas não funcionou.
Paladini
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.