繁体   English   中英

使用 PyQGIS 中的 QgsFeatureRequest().setFilterExpression() 函数选择和操作多个特征

[英]Selecting and manipulating multiple features using the QgsFeatureRequest().setFilterExpression() function in PyQGIS

我有一个带有名为“type”的属性字段的矢量图层。 我正在尝试删除“类型”值不是“主要”的所有功能。 这是我的小脚本,感谢这里这里的答案:

from qgis.core import *
with edit(layer):
    request = QgsFeatureRequest().setFilterExpression("\"type\" != 'primary'")
    request.setSubsetOfAttributes([])
    request.setFlags(QgsFeatureRequest.NoGeometry)   
    selection = layer.getFeatures(request)
    layer.deleteFeatures([f.id() for f in selection])

但是,当我运行它时,没有任何反应。 我已经确定我使用了正确的图层

>>>layer.id()

由于没有错误,我假设我的过滤器表达式格式不正确。 可能是这种情况,还是我的脚本逻辑有问题? 我在 QGIS 3.4.12 上运行 Python 3.7.0。

您的过滤器表达式似乎工作正常。 但调用 deleteFeatures() 仅对通过调用 startEditing() 启用编辑的图层有效。 在进行 commitChanges() 调用之前,使用此方法对功能所做的更改不会提交给基础数据提供程序。 任何未提交的更改都可以通过调用 rollBack() 来丢弃。

layer.startEditing()
layer.deleteFeatures([f.id() for f in selection])
layer.commitChanges()

请参考文档官方文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM