Comment filtrer la couche QGIS à partir de python?

9

En utilisant la console python de QGIS 2.4, j'essaie d'afficher uniquement un sous-ensemble des fonctionnalités d'une couche. J'ai réussi à obtenir les fonctionnalités à la fois de la couche:

featuresIterator = layer.getFeatures(QgsFeatureRequest().setFilterExpression ( u'"field"=4'))

et du fournisseur de données:

featuresIterator = layer.dataProvider().getFeatures(QgsFeatureRequest().setFilterExpression ( u'"field"=4'))

(Je ne suis pas sûr de comprendre la différence).

Ce que je veux réaliser maintenant, c'est afficher uniquement ces fonctionnalités. De la même manière que l'on utiliserait le générateur de requêtes de l'interface graphique. Je ne sais pas si cela doit être géré au niveau du rendu (qui rendrait certaines fonctionnalités et pas d'autres), ou au niveau du fournisseur de données (qui ne fournirait à la couche qu'une vue sur les données contenant uniquement le sous-ensemble voulu), ou quelque part entre les deux.

Jean-Philippe
la source
La réponse de @Nathan est juste. Nous pouvons également obtenir ce qui est défini par setSubsetString () ou Query Builder en utilisant layer.subsetString (). S'il est vide, une chaîne vide '' est renvoyée.
Zac Wang

Réponses:

13

La méthode que vous recherchez s'appelle setSubsetString

layer.setSubsetString("field=4")
Nathan W
la source
Merci beaucoup. Le nom de la fonction n'est pas setSubString comme vous l'écrivez dans votre réponse, mais setSubsetString. Le lien pointe quand même vers la bonne fonction. J'ai modifié votre réponse pour référence future. Merci encore.
Jean-Philippe