Hợp nhất các lớp vectơ qua python trong QGIS 2.18.1


9

Tôi hiện đang sử dụng đoạn mã sau để hợp nhất hai lớp vectơ lại với nhau:

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)

Điều này dường như hoạt động tốt trong QGIS 2.14, tuy nhiên nó thất bại trong 2.18.1 với thông báo sau:

Error: Wrong number of parameters
ALGORITHM: Merge vector layers

Có điều gì đó đã thay đổi giữa 2,14 và 2,18? Hay tôi chỉ thiếu một cái gì đó thực sự rõ ràng?

Câu trả lời:


11

Có, nếu bạn nhập mã sau vào Bảng điều khiển Python , tham số lớp đầu vào hiện kết hợp nhiều lớp :

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

Vì vậy, một cách để giải quyết điều này là thêm cả hai lớp vào tham số đầu vào và tách chúng:

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

Cảm ơn bạn, điều đó đã làm việc tốt. Có phải thủ tục cho 'runache ("gdalogr: convertformat")' cũng đã thay đổi? Trên 2.14, nó hoạt động bằng cách sử dụng 'process.tools.general.runache (' gdalogr: convertformat ', layer, filetype, "", save_location)' nhưng trên 2.18 không có lỗi nào được gắn cờ nhưng các tệp mới không được tạo.
JamieTasker

@JamieTasker - Chào mừng bạn nhất! Không, nên là các tham số tương tự. Chỉ cần thử nghiệm và nó hoạt động tốt. Nếu bạn gặp vấn đề, bạn nên đặt câu hỏi mới và bao gồm tất cả các chi tiết như loại lớp đầu vào, loại lớp đầu ra, mã của bạn, v.v. :)
Joseph

@Joseph Tôi nhận được lỗi tương tự Jochen đã mô tả trong câu trả lời của anh ấy. Tôi đang sử dụng phiên bản 2.18.16 Bảng điều khiển Python. Sẽ rất thú vị khi biết phiên bản nào chỉ có một danh sách Python hoạt động như đầu vào lớp vector.
Stefan

@Stefan - Tôi tin rằng các nhà phát triển đã thay đổi cách sử dụng đầu vào. Trong phiên bản 2.18 đầu tiên, các lớp cần được phân tách bằng dấu chấm phẩy cuối cùng đã được thay đổi để cho phép danh sách. Có một bài hỏi về điều này .
Joseph

4

Vì việc thử câu trả lời ở trên gây ra một ngoại lệ ( l1l2cả hai đều thuộc loại QgsVectorLayer, bảng điều khiển PythonIS 2.18.17) đối với tôi

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'

tôi đã cố gắng

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

thành công

Vì vậy, vượt qua <ParameterMultipleInput>như một danh sách python là một giải pháp cho điều này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.