从python控制台调用pyQGIS中的clip函数?


11

有没有办法从python控制台调用QQGIS中的clip函数?可在矢量菜单的地理处理工具下找到它。


好的,我先使用multiparts to singleparts函数修复了它。然后就可以了。
Toke

Answers:


10

确定您可以从处理工具箱中获取该功能。使用方法如下:按照http://docs.qgis.org/2.8/en/docs/user_manual/processing/console.html

从控制台中,您可以通过键入以下内容获取所有可用算法的列表,这些算法包含单词“ clip”:

import processing
processing.alglist("clip")

然后,您可以找出如何使用最合适的功能:

processing.alghelp("qgis:clip")

然后只需在脚本中使用算法,如下所示:

processing.runalg("qgis:clip",inputlayer,overlaylayer,"output_file.shp")

注意:该算法仅适用于选定的特征”

请注意,对于您可以执行的alglist示例,以上代码对于3.0+无效:

print([a.id() for a in gsApplication.processingRegistry().algorithms() if "clip" in a.id()])

对于alghelp示例,您可以执行以下操作:

processing.algorithmHelp("qgis:clip")

对于QGIS3,请参见以下问题:

QGIS 3.0处理中新的alglist和alghelp是什么?


抱歉,这个话题再次变得生动起来,但从未成功进行,现在我又需要它。在pyhton控制台中,我得到了Layer = qgis.utils.iface.activeLayer()和的两层InputLayer = qgis.utils.iface.activeLayer()。然后,我使用processing.runandload("qgis:clip",InputLayer,Layer,"output_file.shp"),并将新层添加到“层”菜单中,名称为Clipped。但是该层是空的。如果我在Qgis中将这两层与clip函数一起使用,则输出层将包含来自裁剪的线。谁会出错?我没有任何错误。
Toke

如果我使用两个多边形,则可以使用,但是我的一层是直线而不是多边形。它包含几行,我可以在Qgis中使用该层进行裁剪。
Toke

2
您需要选择要剪辑的功能。我已经编辑了答案以反映这一点。
紫色先生2014年

在没有实际创建shapefile的情况下如何做到这一点?我有一个要迭代的数百个圆盘形多边形的层,将每个多边形用作单点数据的覆盖。我可以以某种方式获取QgsFeature对象的列表吗?
J. Taylor

您应该单独提出一个问题
紫色先生

5

假设您有一个称为“ overlay”的图层,另一个名为“ layer_to_clip”的图层已加载。

# get the overlay layer in the console
overlay_layer = [x for x in iface.legendInterface().layers() if x.name() == 'overlay'][0]

# get the layer to clip in the console
layer_to_clip = [x for x in iface.legendInterface().layers() if x.name() == 'layer_to_clip'][0]

# run the algorithm and output the results in /tmp/output.shp

processing.runalg("qgis:clip", overlay_layer, layer_to_clip, "/tmp/output.shp")
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.