Jak odfiltrować warstwę QGIS z Pythona?

9

Korzystając z konsoli python QGIS 2.4, próbuję wyświetlić tylko podzbiór funkcji warstwy. Udało mi się uzyskać funkcje zarówno z warstwy:

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

i od dataProvider:

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

(Nie jestem pewien, czy rozumiem różnicę).

Chcę teraz wyświetlić tylko te funkcje. Dokładnie tak samo, jak przy użyciu konstruktora zapytań z GUI. Nie wiem, czy trzeba to zarządzać na poziomie renderowania (który renderowałby niektóre funkcje, a nie inne), czy na poziomie dostawcy danych (który zapewniałby tej warstwie jedynie widok danych zawierających tylko poszukiwany podzbiór) lub gdzieś pomiędzy.

Jean-Philippe
źródło
Odpowiedź od @Nathan ma rację. Możemy również uzyskać to, co jest ustawione przez setSubsetString () lub Query Builder za pomocą layer.subsetString (). Jeśli jest pusty, zwracany jest pusty ciąg „”.
Zac

Odpowiedzi:

13

Metoda, której szukasz, nazywa się setSubsetString

layer.setSubsetString("field=4")
Nathan W.
źródło
Dzięki wielkie. Nazwą funkcji nie jest setSubString, gdy piszesz ją w swojej odpowiedzi, ale setSubsetString. Link i tak wskazuje na dobrą funkcję. Zredagowałem twoją odpowiedź na przyszłość. Dzięki jeszcze raz.
Jean-Philippe,