การผสานเลเยอร์เวกเตอร์ผ่าน python ใน QGIS 2.18.1


9

ฉันกำลังใช้รหัสต่อไปนี้เพื่อรวมเลเยอร์เวกเตอร์สองตัวเข้าด้วยกัน:

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)

ดูเหมือนว่าจะทำงานได้ดีใน QGIS 2.14 แต่ล้มเหลวใน 2.18.1 พร้อมกับข้อความต่อไปนี้:

Error: Wrong number of parameters
ALGORITHM: Merge vector layers

มีบางสิ่งที่เปลี่ยนแปลงระหว่าง 2.14 และ 2.18 หรือไม่ หรือฉันแค่คิดถึงบางสิ่งที่ชัดเจนจริงๆ?

คำตอบ:


11

ใช่ถ้าคุณพิมพ์รหัสต่อไปนี้ในPython Consoleตอนนี้พารามิเตอร์เลเยอร์อินพุตจะรวมหลายเลเยอร์ :

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

ดังนั้นวิธีหนึ่งในการแก้ไขปัญหานี้คือการเพิ่มเลเยอร์ทั้งสองเข้าไปในพารามิเตอร์อินพุตและแยกมัน:

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

ขอบคุณที่ใช้งานได้ดี ขั้นตอนสำหรับ 'runalg ("gdalogr: convertformat")' มีการเปลี่ยนแปลงด้วยหรือไม่? ใน 2.14 มันทำงานโดยใช้ 'processing.tools.general.runalg (' gdalogr: convertformat ', เลเยอร์, ​​ชนิดไฟล์, "", save_location)' แต่ใน 2.18 จะไม่มีข้อผิดพลาด แต่ไฟล์ใหม่จะไม่ถูกสร้างขึ้น
JamieTasker

@JamieTasker - ยินดีต้อนรับมากที่สุด! ไม่ควรเป็นพารามิเตอร์เดียวกัน เพิ่งทดสอบและใช้งานได้ดี หากคุณมีปัญหาคุณควรถามคำถามใหม่และรวมถึงรายละเอียดทั้งหมดเช่นการป้อนข้อมูลประเภทชั้นเอาท์พุทประเภทชั้น, รหัสของคุณ ฯลฯ :)
โจเซฟ

@ โจเซฟฉันได้รับข้อผิดพลาดเดียวกันโจเชนได้อธิบายไว้ในคำตอบของเขา ฉันใช้เวอร์ชั่น 2.18.16 Python console มันจะน่าสนใจที่จะรู้ตั้งแต่รุ่น Python เท่านั้นที่ทำงานเป็น input vector layer
Stefan

@Stefan - ฉันเชื่อว่านักพัฒนาเปลี่ยนวิธีการป้อนข้อมูลควรใช้ ในเวอร์ชัน 2.18 ต้น ๆ เลเยอร์จำเป็นต้องคั่นด้วยเซมิโคลอนซึ่งในที่สุดก็เปลี่ยนเป็นรายการอนุญาต มีก็โพสต์ถามเกี่ยวกับเรื่องนี้
Joseph

4

เนื่องจากการลองคำตอบข้างต้นทำให้เกิดข้อยกเว้น ( l1และl2เป็นทั้งสองประเภทQgsVectorLayerคอนโซล QGIS 2.18.17 Python) สำหรับฉัน

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'

ฉันพยายามแล้ว

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

ประสบความสำเร็จ

ดังนั้นการส่ง<ParameterMultipleInput>เป็นรายการหลามจึงเป็นวิธีแก้ปัญหานี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.