Unione di livelli vettoriali tramite Python in QGIS 2.18.1


9

Attualmente sto usando il seguente codice per unire due livelli vettoriali:

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)

Questo sembra funzionare bene in QGIS 2.14, tuttavia non riesce in 2.18.1 con il seguente messaggio:

Error: Wrong number of parameters
ALGORITHM: Merge vector layers

C'è qualcosa che è cambiato tra 2.14 e 2.18? O mi sto perdendo qualcosa di veramente ovvio?

Risposte:


11

Sì, se si digita il seguente codice in Python Console , il parametro del livello di input ora incorpora più livelli :

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

Quindi un modo per risolverlo è aggiungere entrambi i livelli nel parametro di input e dividerli:

processing.tools.general.runalg("qgis:mergevectorlayers", layer1 + ";" + layer2, output)

Grazie, ha funzionato bene. Anche la procedura per 'runalg ("gdalogr: convertformat")' è cambiata? Su 2.14 funziona usando 'processing.tools.general.runalg (' gdalogr: convertformat ', layer, filetype, "", save_location)' ma su 2.18 non vengono segnalati errori ma non vengono creati nuovi file.
JamieTasker,

@JamieTasker - Benvenuto! No, dovrebbero essere gli stessi parametri. L'ho appena testato e funziona benissimo. In caso di problemi, è necessario porre una nuova domanda e includere tutti i dettagli come il tipo di livello di input, il tipo di livello di output, il codice ecc. :)
Joseph

@Joseph Ricevo lo stesso errore che Jochen ha descritto nella sua risposta. Sto usando la versione 2.18.16 console Python. Sarebbe interessante sapere da quale versione solo un elenco Python funziona come input del layer vettoriale.
Stefan

@Stefan - Credo che gli sviluppatori abbiano cambiato il modo in cui gli input dovrebbero essere usati. Nella prima versione 2.18, i livelli dovevano essere separati da un punto e virgola che alla fine fu modificato per consentire gli elenchi. C'era un post che chiedeva questo .
Joseph

4

Dal momento che provare sopra la risposta provoca un'eccezione ( l1e l2sono entrambi di tipo QgsVectorLayer, console Python QGIS 2.18.17) per me

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'

Ci ho provato

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

con successo.

Quindi passare <ParameterMultipleInput>come un elenco Python è una soluzione a questo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.