domingo, 9 de julio de 2017

Establecer estilo de borde a 'no pen' empleando un QgsGraduatedSymbolRendererV2 con PyQGIS

Aunque puedan parecer similares los objetos QgsGraduatedSymbolRendererV2, a diferencia de los QgsCategorizedSymbolRendererV2, no pueden ser instanciados de la misma forma. Para crear el renderer en un sólo paso es necesario obtener primero una rampa de colores (objeto de la clase QgsVectorGradientColorRampV2) que automáticamente generará los símbolos de acuerdo al campo elegido en la tabla de atributos y el número de clases establecidos. El método para colocar el estilo de borde a 'no pen' está en los símbolos (QgsFillSymbolV2 para capas de tipo polígono) y corresponde, para esta tarea, a 'setOutputUnit(1)'. El código completo se encuentra a continuación:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from qgis.PyQt.QtGui import QColor

layer = iface.activeLayer()

fieldName = "FID"

provider = layer.dataProvider()
numberOfClasses = 10
color1 = QColor("red")  
color2 = QColor("green")
  
ramp = QgsVectorGradientColorRampV2(color1, color2)

renderer = QgsGraduatedSymbolRendererV2.createRenderer(layer, 
                                                       fieldName, 
                                                       numberOfClasses, 
                                                       QgsGraduatedSymbolRendererV2.Quantile, 
                                                       QgsSymbolV2.defaultSymbol(layer.geometryType()), 
                                                       ramp)

symbols = renderer.symbols()

for symbol in symbols:
    symbol.setOutputUnit(1) #1 is for no pen

layer.setRendererV2( renderer )

layer.triggerRepaint()

Para está situación:


después de ejecutado el código anterior en la Python Console de QGIS se obtiene el renderizado deseado.


No hay comentarios: