QGIS Carga múltiples estilos en una sola capa a la vez

10

Tengo un conjunto de archivos de estilo qml guardados que aplico a capas similares en múltiples proyectos. Un ejemplo sería una capa de archivo de forma de tipo lineal con aproximadamente una docena de estilos diferentes; actualmente tengo que repetir el proceso de agregar un nuevo estilo y cargar el archivo qml para cada uno de los diferentes estilos. Luego tengo que hacerlo varias veces más en ese proyecto y repetir todo nuevamente en el próximo proyecto.

¿Solo trato de ver si hay una manera de cargar múltiples archivos de estilo en la misma capa a la vez? Algo así como, en lugar de buscar un solo qml, ¿podría seleccionar varios archivos qml y cargarlos a la vez?

Ejemplo de múltiples estilos por capa

CEL-ma
fuente
1
¿Qué quieres decir con cargar varios estilos a la vez en la misma capa? ¿El último estilo cargado no anularía todos los estilos cargados anteriores? ¿O desea cargar muchos estilos en varias copias de la misma capa?
artwork21
Mi flujo de trabajo actual es abrir las propiedades de la capa; use el botón de estilo (abajo a la izquierda) para agregar un nuevo estilo, asigne un nombre y luego cargue un archivo .qml guardado, luego repita para cuantos estilos (10-20) use la capa. Actualmente, tengo que hacer esto uno por uno, para aproximadamente 7-8 capas, en> 25 proyectos. (datos repetitivos, capas y mapas, pero archivos de proyecto separados geográficamente por municipios; cada municipio es un cliente separado)
CEL-ma
Hay una pregunta similar aquí que quiere usar Python pero aún no hay respuesta, gis.stackexchange.com/questions/294016/…
artwork21

Respuestas:

3

Puede cargar varios estilos usando el script pyqgis (explicaciones en los comentarios):

import os
from qgis.core import QgsMapLayerStyle
from qgis.utils import iface

# set path to your styles here
qml_path = '/home/user/qml'

layer = iface.activeLayer()
style_manager = layer.styleManager()

# read valid style from layer
style = QgsMapLayerStyle()
style.readFromLayer(layer)

for qml_file in [f for f in os.listdir(qml_path)
                 if os.path.isfile(os.path.join(qml_path, f)) and
                 f.endswith('.qml')]:
    # get style name from file
    style_name = os.path.basename(qml_file).strip('.qml')
    # add style with new name
    style_manager.addStyle(style_name, style)
    # set new style as current
    style_manager.setCurrentStyle(style_name)
    # load qml to current style
    (message, success) = layer.loadNamedStyle(os.path.join(qml_path, qml_file))
    print message
    if not success:  # if style not loaded remove it
        style_manager.removeStyle(style_name)

Puede ejecutarlo en la consola de Python QGIS o adaptarse a un script de procesamiento.

(Probado en la versión actual de LTR QGIS 2.18)

Barteksch
fuente
1
¡Muchas gracias! Pude cargar con éxito varios estilos: recibí un mensaje de error "[Errno 9] Descriptor de archivo incorrecto" mientras ejecutaba el algoritmo, ¡pero aún así se completó con éxito! ¡Esto me ahorrará MUCHO trabajo!
CEL-ma
Para cualquier otra persona que lea esta publicación en el futuro; el mensaje de error "Archivo incorrecto" mencionado anteriormente se debió a que la ruta qml tenía capas de vector de línea y de nodo. Una vez separados, no más errores.
CEL-ma
¿Alguien puede ayudar a convertir ese código a Python 3 para que funcione en QGIS 3?
CEL-ma
0

Si te entiendo correctamente, ¿solo quieres poder aplicar estilos de geometría y no necesariamente reglas o expresiones a capas de forma rápida y fácil en cualquier proyecto que tengas abierto?

Si ese es el caso, ¿podría guardar sus estilos en la biblioteca de símbolos utilizando el administrador de estilos? Abra el panel de estilo de capa y haga clic en el botón "abrir biblioteca".

Phil Barlow
fuente
lo siento, sí, los estilos que me gustaría cargar por lotes están basados ​​en reglas.
CEL-ma