Как получить объекты по их атрибутам (аналогично Iqueryfilter в arcobjects) в Qgis с использованием python? Вместо того, чтобы получать все функции и фильтровать их вручную, есть ли возможность использовать предложение where для его фильтрации?
Пример: у меня есть имя поля под названием «Графства». Он имеет более пятидесяти тысяч функций. То есть невозможно получить все функции и отфильтровать их из-за большого количества времени. Таким образом, я могу запросить его, используя iqueryfilter.whereclause = 'Counties = Norwich' в arcobjects. Подобная вещь мне нужна в PyQgis.
Ответы:
Механизм выражений QGIS может сделать это, используя
QgsFeatureRequest.setFilterExpression( unicode )
метод (начиная с QGIS 2.2)Начиная с QGIS 2.10, даже возможно, что фильтрация таким способом даст вам дополнительную производительность по сравнению с другими типами фильтрации (например, реализациями на Python).
В основном это применимо, если выполняются следующие три условия:
Вы используете слой с провайдером postgis.На данный момент (2.16) это реализовано гораздо больше, чем просто провайдер postgis (пространственный, ogr, oracle ...).>
,=
,IN
,NOT NULL
... поддерживаются)С QGIS 3.0 даже можно просто сделать
источник
В этом посте, который можно считать ответом на дублирующий вопрос, подробно рассказывается, как извлечь все атрибуты из слоя. Автор описывает процесс, который вы ищете, как фильтрацию данных вручную после их возвращения. Это довольно полный справочник, и его ссылка действительно поможет вам.
источник
С помощью SQL-запроса это также легко возможно с
ogr
. Вы можете выполнить этот код, например, в консоли Python QGIS или в автономном скрипте.Пример :
источник
Задание фильтров SQL пока не поддерживается с использованием API QGIS начиная с версии 1.9.
Как я понял из этой статьи в списке рассылки , поддержка «SQL собственного провайдера» будет только в будущем выпуске.
источник