Como obter recursos por seus atributos (semelhantes ao Iqueryfilter em arcobjects) no Qgis usando python? Em vez de obter todos os recursos e filtrá-lo manualmente, existe alguma opção para usar a cláusula where para filtrá-lo?
Exemplo: Eu tenho um nome de campo chamado 'Condados'. Ele possui mais de cinquenta mil recursos. Não é possível buscar todos os recursos e filtrá-lo por causa do tempo gasto. Para que eu possa consultá-lo usando iqueryfilter.whereclause = 'Counties = Norwich' em objetos de arcada. Coisa semelhante que eu preciso no PyQgis.
Respostas:
O mecanismo de expressão QGIS é capaz de fazer isso usando o
QgsFeatureRequest.setFilterExpression( unicode )
método (Desde o QGIS 2.2)A partir do QGIS 2.10, é possível que a filtragem dessa maneira ofereça um desempenho extra em relação a outros tipos de filtragem (como implementações em python).
Basicamente, isso se aplica se as três condições a seguir forem atendidas:
Você está usando uma camada com o provedor postgisNo momento (2.16), muito mais do que o provedor postgis implementa isso (spatialite, ogr, oracle ...).>
,=
,IN
,NOT NULL
... são suportados)Com o QGIS 3.0, é ainda possível simplesmente fazer
fonte
Esta postagem - que pode ser considerada uma resposta a uma pergunta duplicada - detalha como buscar todos os atributos de uma camada. O autor descreve o processo que você está procurando como filtrando os dados manualmente depois que eles são retornados. É uma referência bastante completa e o link deles realmente deve ajudá-lo.
fonte
Usando uma consulta sql, também é possível com facilidade
ogr
. Você pode executar esse código, por exemplo, no console python do QGIS ou em um script independente.Exemplo :
fonte
A especificação de filtros SQL ainda não é suportada usando a API QGIS a partir da versão 1.9.
Pelo que entendi neste artigo da lista de discussão , o suporte ao "SQL do provedor nativo" seria apenas em uma versão futura.
fonte