Comment obtenir des fonctionnalités par leurs attributs (similaires à Iqueryfilter dans les arcobjects) dans Qgis en utilisant python? Au lieu d'obtenir toutes les fonctionnalités et de les filtrer manuellement, existe-t-il une option pour utiliser la clause where pour les filtrer?
Exemple: J'ai un nom de champ appelé «Comtés». Il a plus de cinquante mille fonctionnalités. Il n'est pas possible de récupérer toutes les fonctionnalités et de les filtrer en raison du temps. Je peux donc l'interroger en utilisant iqueryfilter.whereclause = 'Counties = Norwich' dans les arcobjects. La même chose dont j'ai besoin dans PyQgis.
Réponses:
Le moteur d'expression QGIS est capable de le faire en utilisant la
QgsFeatureRequest.setFilterExpression( unicode )
méthode (depuis QGIS 2.2)À partir de QGIS 2.10, il est même possible que le filtrage de cette manière vous donne des performances supplémentaires par rapport à d'autres types de filtrage (comme les implémentations python).
Fondamentalement, cela s'applique si les trois conditions suivantes sont remplies:
Vous utilisez une couche avec le fournisseur de postgisÀ l'heure actuelle (2.16), bien plus qu'un simple fournisseur de postgis l'implémente (spatialite, ogr, oracle ...).>
,=
,IN
,NOT NULL
... sont pris en charge)Avec QGIS 3.0, il est même possible de faire simplement
la source
Ce message - qui pourrait être considéré comme une réponse à une question en double - détaille comment récupérer tous les attributs d'une couche. L'auteur décrit le processus que vous recherchez comme un filtrage manuel des données une fois qu'elles sont retournées. C'est une référence assez complète et leur lien devrait vraiment vous aider.
la source
En utilisant une requête SQL, il est également facilement possible avec
ogr
. Vous pouvez exécuter ce code par exemple dans la console python QGIS ou un script autonome.Exemple :
la source
La spécification des filtres SQL n'est pas encore prise en charge à l'aide de l'API QGIS à partir de la version 1.9.
Si je comprends bien cet article de la liste de diffusion , la prise en charge de "SQL du fournisseur natif" ne sera disponible que dans une future version.
la source