Existe uma maneira de usar a função "Selecionar por atributo" no QGIS usando um comando python? No meu plugin, o usuário deve inserir um valor por meio de uma GUI e esse valor deve ser usado em uma função que seleciona todos os recursos que possuem esse atributo. O nome da coluna é fixo no código, a função deve procurar apenas o valor correto.
Na minha solução atual, a função conecta o QGIS a um banco de dados PostgreSQL e executa uma instrução SQL. Isso cria uma tabela a partir do resultado e a tabela é visualizada como Shapefile no QGIS.
Em princípio, seria suficiente destacar os recursos e não criar um novo Shapefile da seleção. O uso da função "Selecionar por atributo" também ignoraria a conexão desnecessária ao banco de dados.
Existe uma maneira de usar a função "Selecionar por atributo" em python para que os recursos sejam destacados? Usando a função no QGIS, todos os recursos que não correspondem à consulta são apagados temporariamente, o que também seria aceitável.
Respostas:
Sim. Você pode obter todos os atributos através das ligações python e implementar filtragem extra em seu próprio plugin. Veja este trecho do PyQGIS Coobook para o resumo e alguns exemplos. Você excluiria todos os resultados não correspondentes do dicionário retornado.
Quanto à visualização, você provavelmente ainda precisará criar outra camada, pois
select()
não possui argumentos adequados. Você pode usar uma camada de memória para evitar a necessidade de criar arquivos físicos (mais sobre isso no livro de receitas).editar:
Na verdade, você pode usar
selectedFeaturesIds()
comsetSelectedFeatures(ids)
para alterar a seleção para o subconjunto que você criou. Citando a implementação diretamente:fonte
A partir do QGIS 2.2, isso é suportado de uma maneira muito natural. Isso pode ser feito através do mecanismo de expressão QGIS usando o
QgsFeatureRequest.setFilterExpression( unicode )
métodoA melhor coisa: se você possui uma versão recente do QGIS (2.10 e posterior), ela será filtrada diretamente no banco de dados com muito mais desempenho do que outras soluções e ainda assim sendo muito legível.
fonte
sextante.runalg ('qgis: selectbylocation', "bufferarea", "hospitais", 1)
http://qgissextante.blogspot.in/2013/01/using-selection-algorithms.html
fonte