Existe-t-il un moyen d'utiliser la fonction "Sélectionner par attribut" dans QGIS en utilisant une commande python? Dans mon plugin, l'utilisateur doit entrer une valeur via une interface graphique et cette valeur doit être utilisée dans une fonction qui sélectionne toutes les fonctionnalités qui ont cet attribut. Le nom de la colonne est fixe dans le code, la fonction ne doit rechercher que la valeur correcte.
Dans ma solution actuelle, la fonction connecte QGIS à une base de données PostgreSQL et exécute une instruction SQL. Cela crée une table à partir du résultat et la table est visualisée comme Shapefile dans QGIS.
En principe, il suffirait de mettre en évidence les fonctionnalités et non de créer un nouveau Shapefile de la sélection. L'utilisation de la fonction "Sélectionner par attribut" ignorerait également la connexion de base de données inutile.
Existe-t-il un moyen d'utiliser la fonction "Sélectionner par attribut" en python pour que les fonctionnalités soient mises en évidence? En utilisant la fonction dans QGIS, toutes les fonctionnalités qui ne correspondent pas à la requête sont supprimées temporairement, ce qui serait bien aussi.
Réponses:
Oui. Vous pouvez obtenir tous les attributs via les liaisons python et implémenter un filtrage supplémentaire dans votre propre plugin. Voir cet extrait de CoQook PyQGIS pour le récapitulatif et quelques exemples. Vous excluriez alors tout résultat non correspondant du dictionnaire renvoyé.
En ce qui concerne la visualisation, vous devrez probablement encore créer une autre couche, car elle
select()
n'a pas d'arguments appropriés. Vous pouvez utiliser une couche mémoire pour éviter d'avoir à créer des fichiers physiques (plus à ce sujet dans le livre de recettes).Éditer:
En fait, vous pouvez utiliser
selectedFeaturesIds()
avecsetSelectedFeatures(ids)
pour modifier la sélection dans le sous-ensemble que vous avez créé. Citant directement la mise en œuvre:la source
À partir de QGIS 2.2, cela est pris en charge de manière très naturelle. Cela peut être fait via le moteur d'expression QGIS en utilisant la
QgsFeatureRequest.setFilterExpression( unicode )
méthode.La meilleure chose à ce sujet: si vous avez une version récente de QGIS (2.10 et ultérieure), celle-ci sera filtrée directement dans la base de données tellement plus performante que les autres solutions tout en étant très lisible.
la source
sextante.runalg ('qgis: selectbylocation', "bufferarea", "hôpitaux", 1)
http://qgissextante.blogspot.in/2013/01/using-selection-algorithms.html
la source