क्यूजीआईएस 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

हां, यदि आप पायथन कंसोल में निम्न कोड टाइप करते हैं , तो इनपुट लेयर पैरामीटर अब कई लेयर को शामिल करता है :

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

तो इसे हल करने का एक तरीका इनपुट पैरामीटर में दोनों परतों को जोड़ना और उन्हें विभाजित करना है:

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

धन्यवाद, यह ठीक काम किया। क्या 'रनग्लग ("gdalogr: Convertformat") की प्रक्रिया भी बदल गई है? 2.14 पर यह 'processing.tools.general.runalg (' gdalogr: Convertformat ', layer, filetype, "", save_location) का उपयोग करके काम करता है, लेकिन 2.18 पर कोई त्रुटि नहीं दिखाई देती है - नई फ़ाइलें नहीं बनाई गई हैं।
जॅमीटैस्कर

@JamieTasker - सबसे स्वागत! नहीं, एक ही पैरामीटर होना चाहिए। बस इसका परीक्षण किया है और यह ठीक काम करता है। यदि आपको समस्या है, तो आपको एक नया प्रश्न पूछना चाहिए और सभी विवरणों को शामिल करना चाहिए जैसे कि इनपुट लेयर टाइप, आउटपुट लेयर टाइप, आपका कोड आदि :)
जोसेफ

@ जोसेफ को वही त्रुटि मिलती है जोचन ने अपने उत्तर में बताई है। मैं संस्करण 2.18.16 पायथन कंसोल का उपयोग कर रहा हूं। यह जानना दिलचस्प होगा कि कौन सा संस्करण केवल पायथन सूची वेक्टर परत इनपुट के रूप में काम करता है।
स्टीफन

@Stefan - मेरा मानना ​​है कि डेवलपर्स ने बदलाव किया कि इनपुट का उपयोग कैसे किया जाना चाहिए। 2.18 के शुरुआती संस्करण में, परतों को एक अर्ध-बृहदान्त्र द्वारा अलग करने की आवश्यकता थी जिसे अंततः सूचियों की अनुमति देने के लिए बदल दिया गया था। इस बारे में पूछने वाला एक पोस्ट था ।
जोसेफ

4

चूँकि उपरोक्त उत्तर की कोशिश मेरे लिए अपवाद है ( l1और l2दोनों प्रकार के हैं QgsVectorLayer, QGIS 2.18.17 पायथन कंसोल)

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>अजगर सूची के रूप में गुजरना इस का एक समाधान है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.