Есть ли способ использовать функцию «Выбрать по атрибуту» в QGIS с помощью команды python? В моем плагине пользователь должен ввести значение через графический интерфейс, и это значение должно использоваться в функции, которая выбирает все функции, которые имеют этот атрибут. Имя столбца фиксируется в коде, функция должна искать только правильное значение.
В моем текущем решении функция соединяет QGIS с базой данных PostgreSQL и выполняет оператор SQL. Это создает таблицу из результата, и таблица визуализируется как Shapefile в QGIS.
В принципе, этого было бы достаточно, чтобы выделить элементы, а не создавать новый шейп-файл выделения. Использование функции «Выбрать по атрибуту» также пропустит ненужное подключение к базе данных.
Есть ли способ использовать функцию «Выбрать по атрибуту» в Python, чтобы функции были выделены? Используя функцию в QGIS, все функции, которые не соответствуют запросу, временно отключены, что также будет нормально.
Ответы:
Да. Вы можете получить все атрибуты через привязки Python и реализовать дополнительную фильтрацию в своем собственном плагине. Смотрите этот отрывок из PyQGIS Coobook для краткого изложения и некоторых примеров. Затем вы просто исключили бы любые несоответствующие результаты из возвращенного словаря.
Что касается визуализации, вам, вероятно, все равно придется создать еще один слой, поскольку
select()
он не имеет подходящих аргументов. Вы можете использовать слой памяти, чтобы избежать необходимости создавать физические файлы (подробнее об этом в кулинарной книге).редактировать:
На самом деле, вы можете использовать
selectedFeaturesIds()
с,setSelectedFeatures(ids)
чтобы изменить выбор на подмножество, которое вы создали. Цитируя реализацию напрямую:источник
Начиная с QGIS 2.2 это поддерживается очень естественным образом. Это можно сделать с помощью механизма выражений QGIS, используя
QgsFeatureRequest.setFilterExpression( unicode )
метод.Лучшее в этом: если у вас последняя версия QGIS (2.10 и более поздние), она будет отфильтрована непосредственно в базе данных, намного более производительной, чем другие решения, и при этом будет очень удобочитаемой.
источник
sextante.runalg ('qgis: selectbylocation', "bufferarea", "больницы", 1)
http://qgissextante.blogspot.in/2013/01/using-selection-algorithms.html
источник