sábado, 8 de julio de 2017

Añadiendo opción de 'offset', al renderer de líneas que se solapan en la misma capa, con PyQGIS

Cuando se tienen rasgos solapados en una misma capa la opción que funciona para separarlos es mediante un renderer de tipo QgsCategorizedSymbolRendererV2. Para ello, primero hay que crear los símbolos y después las categorías correspondientes a éstos. Para instanciar el renderer se le pasa como parámetro el label del campo objeto de la categorización. Finalmente, se añaden las categorías al renderer, este último a la capa y se "refresca" (método 'triggerRepaint' de QgsVectorLayer) para visualizar los resulatdos.


El código completo es el siguiente:

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
29
30
31
32
33
layer = iface.activeLayer()

symbols = []

symbol = QgsLineSymbolV2.createSimple({'color':'green',
                                       'width':'1',
                                       'offset':'1'})

symbols.append(symbol)

symbol = QgsLineSymbolV2.createSimple({'color':'red',
                                       'width':'1',
                                       'offset':'0'})

symbols.append(symbol)

symbol = QgsLineSymbolV2.createSimple({'color':'blue',
                                       'width':'1',
                                       'offset':'-1'})

symbols.append(symbol)

# creating categories
categories = [ QgsRendererCategoryV2(i, symbol, str(i)) for i, symbol in enumerate(symbols) ]

renderer = QgsCategorizedSymbolRendererV2('id')

for category in categories:
    renderer.addCategory(category) 

layer.setRendererV2(renderer)

layer.triggerRepaint()

Cuando se ejecuta el código anterior, para un vectorial de tres rasgos completamente solapados, el resultado es el esperado; tal como se observa en la imagen siguiente:


No hay comentarios: