Simbología multicapa en vectoriales de línea mediante PyQGIS

En un post pasado se había considerado con PyQGIS la personalización de la simbología de vectoriales de línea a través de la clase QgsLineSymbolV2. El método usa una serie de keywords asociadas a sus respectivos values en un diccionario para definir la apariencia del nuevo símbolo. Estas opciones se detallan en el post anterior y se refieren a simbología simple en monocapa; como aquella que permite representar fronteras o límites de territorio. Sin embargo, si se desea representar carreteras, líneas férreas u otros objetos más complejos es necesario recurrir a las opciones en multicapa; tal como se tiene a continuación en la imagen siguiente:

multi_layer_symbol

La imagen anterior representa una carretera asfaltada con señalización de línea entrecortada en blanco. Tiene dos capas. Una de color negro, más gruesa (ancho 3), sobre la cual se ha colocado una línea blanca tipo ‘dash’ (entrecortada) con longitud 8, espaciamiento 4 y espesor 1. Como hay 2 capas es lógico pensar que tiene que haber dos símbolos (symbol1, symbol2). Vamos a definirlos en la Python Console:

>>>symbol1 = QgsLineSymbolV2.createSimple({
'penstyle':'solid', 
'color':'black', 
'width':'3'
})
>>>symbol2 = QgsLineSymbolV2.createSimple({
'penstyle':'dash', 
'color':'white', 
'width':'0',
'customdash':'8;4',
'use_custom_dash': '1' 
})

Como se van a combinar comprobemos si son compatibles (parece lógico que lo sean porque ambos pertenecen a la clase QgsLineSymbolV2):

>>>type1=symbol1.type()
>>>type2=symbol2.type()
>>>symbol1.isSymbolLayerCompatible(type2)
True

Una vez hecha la prueba de compatibilidad vamos a verificar que ambos símbolos son mono capa:

>>>symbol1.symbolLayerCount()
1
>>>symbol2.symbolLayerCount()
1

Para adicionar un símbolo (symbol2) a otro (symbol1) hay que convertir al primero en un objeto de la clase QgsSimpleLineSymbolLayerV2. Esto se logra mediante el método ‘symbolLayer’ de QgsLineSymbolV2. Por tanto, si comprobamos también que symbol1 pasa a tener dos capas se tiene:

>>>layerSymbol2=symbol2.symbolLayer(0)
>>>symbol1.appendSymbolLayer(layerSymbol2.clone())
True
>>>symbol1.symbolLayerCount()
2

Para visualizar nuestra nueva simbología (symbol1) basta ejecutar lo siguiente para el shapefile route:

>>>route = iface.activeLayer()
>>>renderer = route.rendererV2()
>>>renderer.setSymbol(symbol1)
>>>route.triggerRepaint()
>>>iface.legendInterface().refreshLayerSymbology(route)

El resultado es la primera imagen del post.

Esta entrada fue publicada en Código Python, PyQGIS, SIG, Software Libre. Guarda el enlace permanente.

Una respuesta a Simbología multicapa en vectoriales de línea mediante PyQGIS

  1. Pingback: Simbología multicapa en vectoriales de l...

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s