QGIS 2.18.1でPythonを介してベクターレイヤーをマージする


9

現在、次のコードを使用して2つのベクターレイヤーをマージしています:

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コンソールで次のコードを入力すると、入力レイヤーパラメータに複数のレイヤーが組み込まれます

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

したがって、これを解決する1つの方法は、両方のレイヤーを入力パラメーターに追加して分割することです。

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

ありがとうございました。'runalg( "gdalogr:convertformat")'の手順も変更されましたか?2.14では 'processing.tools.general.runalg(' gdalogr:convertformat '、layer、filetype、 ""、save_location)'を使用して機能しますが、2.18ではエラーは報告されませんが、新しいファイルは作成されません。
JamieTasker 2017年

@JamieTasker-大歓迎です!いいえ、同じパラメータでなければなりません。テストしただけで問題なく動作します。問題がある場合は、新しい質問をして、入力層のタイプ、出力層のタイプ、コードなどのすべての詳細を含める必要があります:)
Joseph

@Joseph Jochenが彼の回答で述べたのと同じエラーが発生します。バージョン2.18.16のPythonコンソールを使用しています。Pythonバージョンのみがベクターレイヤー入力として機能するため、知っておくと興味深いでしょう。
Stefan

@Stefan-開発者は入力の使用方法を変更したと思います。2.18の初期のバージョンでは、レイヤーをセミコロンで区切る必要がありましたが、最終的にリストを許可するように変更されました。これについて尋ねるポストがありました。
ジョセフ

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>、Pythonリストとして渡すことは、これに対する解決策です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.