7 votos

¿Definir el "Archivo de estilo" del proceso de modelado de QGIS "Establecer estilo para la capa raster"?

Quiero añadir "Establecer estilo para la capa rasterizada" al modelador de procesamiento de QGIS, pero no tengo ni idea de cómo tengo que definir el campo "Archivo de estilo". Tengo un documento de estilo de capa y asumo que necesito definir una ruta allí. Sin embargo, añadir la ruta al directorio funciona tan poco como añadir sólo el nombre del archivo de estilo de la capa. Arrastrar y soltar tampoco funciona. Además no son los espacios en la ruta, lo he probado con una ruta sin espacios.

Siempre aparece el siguiente error en el registro:

enter image description here

6voto

Mue Puntos 2469

Creo que el algoritmo está buscando un Parámetro del archivo para cargar el archivo de estilo. Si añades esto a tu modelador, puedes conectar el parámetro del archivo con el Establecer el estilo de la capa de trama algoritmo:

Model

Cuando se ejecuta el modelo, se puede especificar qué estilo cargar:

Running model


Creo que hay un pequeño fallo en el algoritmo ya que al ejecutarlo se carga el estilo pero no se actualiza la capa. Tienes que ir a las propiedades de la capa y luego hacer clic en OK para el estilo a aplicar. Puedes hacer un arreglo sencillo editando el script que puedes encontrar en (por ejemplo):

C:/Program Files/QGIS 2.18/apps/qgis/python/plugins/processing/algs/qgis/SetRasterStyle.py

Y añade la siguiente línea:

layer.triggerRepaint()

al final del script, justo debajo iface.legendInterface().refreshLayerSymbology(layer) :

def processAlgorithm(self, progress):
    filename = self.getParameterValue(self.INPUT)
    layer = dataobjects.getObjectFromUri(filename)

    style = self.getParameterValue(self.STYLE)
    if layer is None:
        dataobjects.load(filename, os.path.basename(filename), style=style)
        self.getOutputFromName(self.OUTPUT).open = False
    else:
        with open(style) as f:
            xml = "".join(f.readlines())
        d = QDomDocument()
        d.setContent(xml)
        n = d.firstChild()
        layer.readSymbology(n, '')
        self.setOutputValue(self.OUTPUT, filename)            
        iface.mapCanvas().refresh()
        iface.legendInterface().refreshLayerSymbology(layer)
        layer.triggerRepaint()

A continuación, reinicie QGIS para actualizar el algoritmo.


Editar:

Si la entrada para el Set style for raster layer es la salida de otra herramienta y la capa de trama sigue sin actualizarse con el archivo de estilo, podría ser un error en cuyo caso debería considerar enviar una solicitud de error .

Una posible alternativa es sustituir el Set style for raster layer (y eliminar el File ) con un Personalizado script que carga el archivo de estilo y actualiza su simbología en la interfaz de la leyenda. Puedes añadir un script yendo a:

Processing Toolbox > Scripts > Tools > Create new script

Entonces usa algo como:

##Example=name
##input=raster

from qgis.utils import iface

layer = processing.getObject(input)

layer.loadNamedStyle('path/to/.qml')
layer.triggerRepaint()
iface.legendInterface().refreshLayerSymbology(layer)

Guárdalo en tu /.qgis2/processing/scripts/ y cárguelo en su modelo. Espero que esto funcione.

0 votos

Ok esto resolvió mi pregunta. Gracias de nuevo por esta increíble guía. He cambiado el algoritmo y he reiniciado QGIS. Pero la capa todavía no sigue la nueva configuración. ¿Quizás podrías decirme dónde tengo que añadir exactamente la herramienta "set style for raster layer"? Este no me ayudó realmente.

0 votos

@Kevin - Siento no haber respondido antes, ¿sigues teniendo problemas?

0 votos

No se preocupe. Sí, todavía no pude encontrarlo.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X