Menggabungkan layer vektor melalui python di QGIS 2.18.1

9

Saat ini saya menggunakan kode berikut untuk menggabungkan dua layer vektor bersama-sama:

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)

Ini sepertinya berfungsi dengan baik di QGIS 2.14, namun gagal di 2.18.1 dengan pesan berikut:

Error: Wrong number of parameters
ALGORITHM: Merge vector layers

Apakah ada sesuatu yang berubah antara 2,14 dan 2,18? Atau apakah saya hanya melewatkan sesuatu yang sangat jelas?

JamieTasker
sumber

Jawaban:

11

Ya, jika Anda mengetikkan kode berikut di Python Console , parameter layer input sekarang menggabungkan beberapa layer :

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

Jadi salah satu cara untuk menyelesaikan ini adalah dengan menambahkan kedua lapisan ke dalam parameter input dan membaginya:

processing.tools.general.runalg("qgis:mergevectorlayers", layer1 + ";" + layer2, output)
Yusuf
sumber
Terima kasih, itu berhasil. Apakah prosedur untuk 'runalg ("gdalogr: convertformat")' juga berubah? Pada 2.14 ini berfungsi menggunakan 'processing.tools.general.runalg (' gdalogr: convertformat ', layer, filetype, "", save_location)' tetapi pada 2.18 tidak ada kesalahan yang ditandai tetapi file baru tidak dibuat.
JamieTasker
@JamieTasker - Selamat datang! Tidak, seharusnya parameter yang sama. Hanya mengujinya dan berfungsi dengan baik. Jika Anda memiliki masalah, Anda harus mengajukan pertanyaan baru dan memasukkan semua detail seperti tipe layer input, tipe layer output, kode Anda dll :)
Joseph
@ Joseph saya mendapatkan kesalahan yang sama seperti yang dijelaskan Jochen dalam jawabannya. Saya menggunakan versi 2.18.16 Konsol Python. Akan menarik untuk mengetahui karena versi mana hanya daftar Python yang berfungsi sebagai input layer vektor.
Stefan
@Stefan - Saya percaya pengembang mengubah cara input harus digunakan. Pada versi 2.18 awal, layer perlu dipisahkan oleh titik koma yang akhirnya diubah untuk memungkinkan daftar. Ada posting yang menanyakan hal ini .
Joseph
4

Karena mencoba jawaban di atas menyebabkan pengecualian ( l1dan l2keduanya bertipe QgsVectorLayer, QGIS 2.18.17 konsol Python) untuk saya

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'

Saya sudah berusaha

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

berhasil.

Jadi lewat <ParameterMultipleInput>sebagai daftar python adalah solusi untuk ini.

Jochen Schwarze
sumber