在QGIS 2.18.1中通过python合并矢量层


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之间是否有变化?还是我只是缺少真正明显的东西?

Answers:


11

是的,如果您在Python控制台中输入以下代码,则输入图层参数现在包含多个图层

>>>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',layer,filetype,“”,save_location)'来工作,但在2.18上,不会标记任何错误,但不会创建新文件。
JamieTasker'1

@JamieTasker-非常欢迎!不,应该是相同的参数。刚刚测试,它工作正常。如果您有问题,则应该提出一个新问题,并包括所有详细信息,例如输入层类型,输出层类型,您的代码等:)
Joseph

@Joseph我得到了Jochen在回答中描述的相同错误。我正在使用2.18.16版的Python控制台。知道哪个版本只有Python列表可用作矢量层输入,这将很有趣。
Stefan,

@Stefan-我相信开发人员已经更改了输入的使用方式。在早期的2.18版本中,需要用分号分隔各层,最终将其更改为允许使用列表。有一则帖子问这个
约瑟夫

4

由于尝试上述答案会导致异常(l1并且l2均为QgsVectorLayerQGIS 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列表传递是一种解决方案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.