Definição De Simbologia Através De Campo RGBA
Definição De Simbologia Através De Campo RGBA avatar

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!

REFERÊNCIAS

http://www.dgterritorio.pt/cartografia_e_geodesia/cartografia/cartografia_tematica/cartas_de_ocupacao_do_solo/corine_land_cover/

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *