簡體   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