Выбор и управление несколькими объектами с помощью функции QgsFeatureRequest (). SetFilterExpression () в PyQGIS. - PullRequest
0 голосов
/ 29 января 2020

У меня есть векторный слой с полем атрибута, называемым «тип». Я пытаюсь удалить все функции, значение которых для "type" не является "primary". Вот мой маленький скрипт, который я сделал благодаря ответам здесь и здесь :

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()

Поскольку ошибок нет, я предполагаю, что выражение моего фильтра не отформатировано правильно. Это скорее всего так, или есть проблема с моим скриптом logi c? Я использую Python 3.7.0 на QGIS 3.4.12.

1 Ответ

0 голосов
/ 06 февраля 2020

Ваше выражение фильтра, кажется, работает правильно. Но вызовы deleteFeatures () действительны только для слоев, в которых редактирование было включено вызовом startEditing (). Изменения, внесенные в функции с использованием этого метода, не фиксируются в основном поставщике данных, пока не будет выполнен вызов commitChanges (). Любые неподтвержденные изменения могут быть отменены путем вызова rollBack ().

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

пожалуйста, обратитесь к документации Официальная документация

...