Personalizando simbología en vectoriales de línea mediante PyQGIS

Para personalizar la simbología en vectoriales de línea mediante PyQGIS hay que recurrir al método ‘createSimple’ de la clase QgsLineSymbolV2. Este método, al igual que QgsMarkerSymbolV2, usa keywords en un diccionario para definir la apariencia del nuevo símbolo (symbol). Las keywords para cada symbol son las siguientes:

    capstyle: ’square’, ’flat’, o ’round’.
    color: especificado usando cualquiera de los métodos de QColor.
    customdash: Longitud y espaciamiento de línea cortada separados por “punto y coma” (por ejemplo 8;4)
    customdash_unit: MM o MapUnit
    joinstyle: ’bevel’, ’miter’, o ’round’
    offset: Especificado como un float.
    offset_unit: MM o MapUnit
    penstyle: ’no’, ’solid’, ’dash’, ’dot’, ’dash dot’, ’dash dot dot’
    use_custom_dash: 1 para usar la línea cortada personalizada (custom_dash).
    width: valor entero.
    width_unit: MM o MapUnit.

El shapefile de línea con el cual voy a probar la simbología personalizada se despliega en la imagen de abajo; conjuntamente con un shapefile tipo malla como realce de fondo:

line

A diferencia del post pasado, voy a crear el objeto de QgsLineSymbolV2 empleando el método ‘createSimple’ con una opción mínima de diccionario que es la siguiente:

symbol = QgsLineSymbolV2.createSimple({'penstyle':'dash'})

Otras opciones se van a asignar a partir de los métodos de clase listados abajo (con dir):

['DataDefinedRotation', 'DataDefinedSizeScale', 'Fill', 'Line', 
'MM', 'MapUnit', 'Marker', 'Mixed', 'OutputUnit', 'RenderHint', 
'ScaleArea', 'ScaleDiameter', 'ScaleMethod', 'SymbolType', 
'__class__', '__delattr__', '__dict__', '__doc__', '__format__', 
'__getattribute__', '__hash__', '__init__', '__module__', '__new__', 
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', 
'__str__', '__subclasshook__', '__weakref__', 'alpha', 
'appendSymbolLayer', 'bigSymbolPreviewImage', 'changeSymbolLayer', 
'clone', 'cloneLayers', 'color', 'createSimple', 'defaultSymbol', 
'deleteSymbolLayer', 'drawPreviewIcon', 'dump', 'insertSymbolLayer', 
'isSymbolLayerCompatible', 'layer', 'outputUnit', 'renderHints', 
'renderPolyline', 'setAlpha', 'setColor', 'setLayer', 'setOutputUnit', 
'setRenderHints', 'setWidth', 'startRender', 'stopRender', 'symbolLayer', 
'symbolLayerCount', 'takeSymbolLayer', 'toSld', 'type', 'usedAttributes', 
'width']

Voy a establecer que sea de color naranja y de ancho 2. Por tanto, tendremos:

>>>from PyQt4.QtGui import *
>>>symbol.setColor(QColor('orange'))
>>>symbol.setWidth(2)
>>>route=iface.activeLayer()
>>>renderer=route.rendererV2()
>>>renderer.setSymbol(symbol)
>>>iface.mapCanvas().refresh()
>>>iface.legendInterface().refreshLayerSymbology(route)

siendo el resultado el siguiente:

line2

Si queremos probar una nueva simbología (symbol2) donde el estilo de dibujo sea de línea cortada-punto-punto, con bordes redondeados y de color magenta entonces, ya que la referencia al objeto y el renderer están establecidos, basta con hacer lo siguiente:

>>>symbol2=QgsLineSymbolV2.createSimple({'penstyle':'dash',
'capstyle':'round', 'color':'magenta', 'penstyle': 'dash dot dot',
'width':'3'})
>>>renderer.setSymbol(symbol2)
>>>iface.mapCanvas().refresh()
>>>iface.legendInterface().refreshLayerSymbology(route)

El resultado fue el siguiente:

line3

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

2 respuestas a Personalizando simbología en vectoriales de línea mediante PyQGIS

  1. Pingback: Personalizando simbología en vectoriales...

  2. Pingback: Simbología multicapa en vectoriales de línea mediante PyQGIS | El Blog de José Guerrero

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