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

2024-10-01 09:29:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个向量层,它有一个名为“type”的属性字段。我正在尝试删除“type”值不是“primary”的所有功能。这是我的小脚本,感谢herehere的回答:

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


Tags: fromcore功能脚本layerid属性here
1条回答
网友
1楼 · 发布于 2024-10-01 09:29:58

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

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

请参阅文档 Oficial Documentation

相关问题 更多 >