3 votos

De secuencias de comandos de la asignación de columnas de estilo atributos en QGIS?

En una capa de vector es posible ajustar/secuencias de comandos en el estilo de las columnas de atributos en el mapa "de la Etiqueta de la columna" a un atributo específico de campo/columna en lugar de ser poblado con el mismo contenido de la columna "Valor"? Estoy trabajando en QGIS 2.14.

Hemos simbología por categorías y símbolos en un XML creado en base a un campo de clave ("ID_UCF" [tipo integer]) que se usa para clasificar los atributos de estilo - partido de los símbolos de archivo - pero de esta manera tenemos la leyenda del mapa de tomar el "ID_UCF" códigos como símbolo de etiquetas y necesitamos que las etiquetas como una descripción de los códigos. Esta descripción de texto está dada por una columna presentes en la tabla de atributos de la etiqueta ("DSCR_UCF" [escriba texto]).

¿Cómo podemos cambiar el contenido de la columna de estilo "Etiqueta" - en este caso la "Leyenda" para asumir las descripciones?

Hemos estado buscando en qgis.núcleo como rendererV2 clase, pero no podía encontrar la manera de lidiar con el problema.

enter image description here

1voto

Geoffrey Puntos 228

Con la esperanza de que hemos entendido bien tu problema, puede establecer el texto de un campo especificado como Leyenda por crear directamente el categorizados estilo.

Suponiendo que a partir de esta auto-explicativo Atributo Tabla:

enter image description here

usted puede asignar el "DSCR_UCF" de campo como la Leyenda de la "ID_UCF" valores utilizando el código siguiente desde la Consola de Python:

from PyQt4.QtGui import *
import random

layer = iface.activeLayer()

my_dict = {}
for feat in layer.getFeatures(): #iterate over the features for defining the lookup: value -> (color, label) 
    if feat["ID_UCF"] not in my_dict.keys():
        color = QColor.fromRgb(random.randint(0,255),random.randint(0,255),random.randint(0,255)) #assign a random color
        my_dict[feat["ID_UCF"]] = (color.name(), feat["DSCR_UCF"]) #lookup: value -> (color, label) 
    else: # go to the next feature since the label is already stored
        continue

# Create a category for each item in my_dict
categories = []
for value, (color_name, label) in my_dict.items():
    symbol = QgsSymbolV2.defaultSymbol(layer.geometryType())
    symbol.setColor(QColor(color_name))
    category = QgsRendererCategoryV2(value, symbol, label)
    categories.append(category)

# Create the render and assign it to the layer
renderer = QgsCategorizedSymbolRendererV2("ID_UCF", categories)
layer.setRendererV2(renderer)
layer.triggerRepaint()

Usted recibirá este resultado:

enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X