Fusionar capas vectoriales a través de Python en QGIS 2.18.1

9

Actualmente estoy usando el siguiente código para fusionar dos capas vectoriales:

def append_layers(layer1, layer2, output):
    from processing.core.Processing import Processing
    Processing.initialize()
    import processing.tools
    processing.tools.general.runalg("qgis:mergevectorlayers", layer1, layer2, output)

append_layers(layer1.shp, layer2.shp, output.shp)

Esto parece funcionar bien en QGIS 2.14, sin embargo, falla en 2.18.1 con el siguiente mensaje:

Error: Wrong number of parameters
ALGORITHM: Merge vector layers

¿Hay algo que haya cambiado entre 2.14 y 2.18? ¿O me estoy perdiendo algo realmente obvio?

JamieTasker
fuente

Respuestas:

11

Sí, si escribe el siguiente código en la Consola Python , el parámetro de capa de entrada ahora incorpora varias capas :

>>>import processing
>>>processing.alghelp("qgis:mergevectorlayers")
ALGORITHM: Merge vector layers
    LAYERS <ParameterMultipleInput>
    OUTPUT <OutputVector>

Entonces, una forma de resolver esto es agregar ambas capas en el parámetro de entrada y dividirlas:

processing.tools.general.runalg("qgis:mergevectorlayers", layer1 + ";" + layer2, output)
José
fuente
Gracias, eso funcionó bien. ¿Ha cambiado también el procedimiento para 'runalg ("gdalogr: convertformat")? En 2.14 funciona usando 'processing.tools.general.runalg (' gdalogr: convertformat ', layer, filetype, "", save_location)' pero en 2.18 no se marcan errores pero no se crean nuevos archivos.
JamieTasker
@JamieTasker: ¡bienvenido! No, deben ser los mismos parámetros. Solo lo probé y funciona bien. Si tiene problemas, debe hacer una nueva pregunta e incluir todos los detalles, como el tipo de capa de entrada, el tipo de capa de salida, su código, etc. :)
Joseph
@Joseph Me sale el mismo error que Jochen ha descrito en su respuesta. Estoy usando la versión 2.18.16 de la consola de Python. Sería interesante saber desde qué versión solo una lista de Python funciona como entrada de capa vectorial.
Stefan
@Stefan: creo que los desarrolladores cambiaron la forma en que deberían usarse las entradas. En la versión 2.18 temprana, las capas debían estar separadas por un punto y coma que finalmente se cambió para permitir listas. Hubo una publicación preguntando sobre esto .
Joseph
4

Dado que intentar la respuesta anterior causa una excepción ( l1y l2ambos son de tipo QgsVectorLayer, QGIS 2.18.17 consola de Python) para mí

import processing
[...]
processing.runalg('qgis:mergevectorlayers', l1 + ";" + l2, None)
Traceback (most recent call last):
    File "<input>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'QgsVectorLayer' and 'str'

He estado intentando

>>> merged = processing.runalg('qgis:mergevectorlayers', [l1, l2], None)
>>> merged['OUTPUT']
u'C:\\Users\\Jochen\\AppData\\Local\\Temp\\processing30eee19448ef42a497403dd3660cafcf\\82e112158f194f59a53e18d5020a9a9d\\OUTPUT.shp'

exitosamente.

Entonces, pasar <ParameterMultipleInput>como una lista de Python es una solución para esto.

Jochen Schwarze
fuente