Mesclando camadas vetoriais via python no QGIS 2.18.1

9

Atualmente, estou usando o código a seguir para mesclar duas camadas de vetor:

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)

Isso parece funcionar bem no QGIS 2.14, mas falha no 2.18.1 com a seguinte mensagem:

Error: Wrong number of parameters
ALGORITHM: Merge vector layers

Existe algo que mudou entre 2,14 e 2,18? Ou estou apenas perdendo algo realmente óbvio?

JamieTasker
fonte

Respostas:

11

Sim, se você digitar o seguinte código no Python Console , o parâmetro da camada de entrada agora incorpora várias camadas :

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

Portanto, uma maneira de resolver isso é adicionar as duas camadas no parâmetro de entrada e dividi-las:

processing.tools.general.runalg("qgis:mergevectorlayers", layer1 + ";" + layer2, output)
Joseph
fonte
Obrigado, isso funcionou bem. O procedimento para 'runalg ("gdalogr: convertformat") "também foi alterado? No 2.14, ele funciona usando 'processing.tools.general.runalg (' gdalogr: convertformat ', camada, tipo de arquivo, "", save_location) ", mas no 2.18, nenhum erro é sinalizado, mas novos arquivos não são criados.
precisa saber é o seguinte
@JamieTasker - Muito bem-vindo! Não, devem ser os mesmos parâmetros. Apenas testei e funciona bem. Se você tiver problemas, você deve fazer uma nova pergunta e incluir todos os detalhes, tais como o tipo de entrada camada, do tipo camada de saída, seu código etc :)
Joseph
@ Joseph, recebo o mesmo erro que Jochen descreveu em sua resposta. Estou usando a versão 2.18.16 do console Python. Seria interessante saber desde que versão apenas uma lista Python funciona como entrada da camada vetorial.
277 Stefan
@ Stefan - acredito que os desenvolvedores mudaram a maneira como as entradas devem ser usadas. Na versão 2.18, as camadas precisavam ser separadas por ponto-e-vírgula, o que acabou sendo alterado para permitir listas. Houve um post perguntando sobre isso .
Joseph
4

Como tentar a resposta acima causa uma exceção ( l1e l2são do tipo QgsVectorLayerQGIS 2.18.17 Python console) para mim

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'

Eu tenho tentado

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

com sucesso.

Portanto, passar <ParameterMultipleInput>como uma lista python é uma solução para isso.

Jochen Schwarze
fonte