Estoy teniendo problemas con una función de Python en el editor de expresiones al estilo de un polígono relleno en QGIS.
Estoy tratando de utilizar un azar de esquema de color. Sin embargo, tengo que hacerlo a través de una serie de diferentes mapas de diferentes puntos de la historia.
Necesito el color de "Noruega" a ser el mismo en todos los mapas, lo mismo que el color debe ser el mismo para "Alemania". No me importa cuál sea el color para cada país, sólo que es consistente entre las capas.
Para hacer esto, tengo una función de Python que utiliza el hash MD5 de la columna valor.
Esta función funciona, busca un atributo por su nombre y devuelve un "r,g,b,a" cadena basada en los 4 primeros bytes de la hash MD5:-
"""
Define new functions using @qgsfunction. feature and parent must always be the
last args. Use args=-1 to pass a list of values as arguments
"""
from qgis.core import *
from qgis.gui import *
import hashlib
@qgsfunction(args='auto', group='Custom')
def hashcolor(values, feature, parent):
v = feature.attribute(values)
if not v:
v = "Null"
h = hashlib.md5()
h.update(v)
hd = h.hexdigest()
r = int(hd[0:2],16)
g = int(hd[2:4],16)
b = int(hd[4:6],16)
return "{0},{1},{2},255".format(r,g,b)
Así, por ejemplo,
hashcolour('CNTRY')
siempre devolverá 213,185,41,255
si el CNTRY campo contiene "Noruega"
Yo, a continuación, utilizar esta expresión como el color de relleno para mi polígonos.
Sin embargo, lo único que podría conseguir que esto funcione, si se cumplen ciertos criterios:-
- Me han etiquetado de encendido para que la capa y
- He utilizado
"CNTRY"
en algún lugar de la etiqueta de la expresión
No quiero etiquetas, y yo no sólo puede utilizar la cadena vacía, así que tuve que usar este hack en la expresión de etiqueta para que funcione:-
regexp_replace("CNTRY", '.*','')
¿Alguien puede explicar por qué necesito usar etiquetas en este modo para obtener un python-expresión definida de color a trabajar? Es esto un error, o un efectos secundarios de cómo el editor de expresiones se supone que funciona? Parece extraño que el etiquetado debe ser necesaria para permitir el polígono estilo...
(El programa de instalación : Ubuntu Trusty de 32 bits, QGIS 2.12.3-Lyon)