Este post aborda o processo de configuração de simbologia através do atributo RGBA, permite ultrapassar uma limitação do QGIS, que se encontra ainda por resolver (http://hub.qgis.org/issues/11491). Resultou da necessidade de produzir a simbologia oficial para a carta de ocupação de solos Corine Land Cover (CLC) com base nos valores RGB.
Objetivo inicial:
Simbolizar a carta de ocupação de solos Corine Land Cover 2006 (CLC2006), por classes utilizando o sistema de cores RGBA.
1. A preparação União da tabela de atributos da CLC2006 com a tabela da nomenclatura que possuía os valores RGB. (Fig. 1) da informação consistiu:
2. Criação de novo campo denominado [rbga] do tipo texto com a concatenação dos campos R, G, B e a criação do parâmetro A (alfa) que corresponde ao grau de opacidade (Fig. 2).
Nota: Os valores do campo devem variar entre 0 e 255 separados por vírgula, o valor da opacidade é 255 para todas as classes (Fig. 3)
3. Com a coluna rgba criada na tabela de atributos, procedeu-se à configuração do estilo.
Problema
O mapa aparece corretamente simbolizado, mas a legenda não reflete as categorias criadas, todas aparecem a negro, não permitindo uma interpretação correta da informação.
Identificou-se que se trata-se de uma limitação do QGIS, que se encontra ainda por resolver (http://hub.qgis.org/issues/11491)
Solução
Criar um script python que faça a associação da cor à classe respetiva.
Com a ajuda do Alexandre Neto do grupo de utilizadores do QGIS PT, que produziu o seguinte script, é possível ultrapassar com sucesso o problema. Script disponível aqui.
from PyQt4.QtGui import QColor iface = qgis.utils.iface mc = iface.mapCanvas() layer = mc.currentLayer() features = layer.getFeatures() color_dict = dict() for feature in features: cat = feature.attribute('designacao') rgba_value = feature.attribute('rbga') color_dict[cat] = rgba_value renderer = layer.rendererV2() categories = renderer.categories() for category in categories: value = category.value() cat_id = renderer.categoryIndexForValue(value) print cat_id if value != u'': rgba = color_dict[value].split(',') rgba = [int(i) for i in rgba ] color = QColor(rgba[0],rgba[1],rgba[2],rgba[3]) symbol = category.symbol() symbol.setColor(color) renderer.updateCategorySymbol(cat_id,symbol) mc.refresh() qgis.utils.iface.legendInterface().refreshLayerSymbology(layer)
Procedimentos de utilização do script:
1. Abrir a consola python (Módulos > Consola Python);
2. Dentro da consola abrir o script;
3. Editar as linhas 12 e 13 e adaptar ao nome das colunas relativas ao campo das categorias e ao campo com os valores RBGA. Gravar.
4. Definir estilo categorizado utilizando o campo respetivo;
5. Desativar a opção Substituir dados definidos;
6. Correr o script.
Resultado final
Mapa corretamente simbolizado com a respetiva legenda!