Wie filtere ich die QGIS-Ebene aus Python?

9

Mit der QGIS 2.4-Python-Konsole versuche ich, nur eine Teilmenge der Layer-Features anzuzeigen. Ich habe es geschafft, beide Funktionen von der Ebene zu erhalten:

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

und vom dataProvider:

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

(Ich bin nicht sicher, ob ich den Unterschied verstehe).

Was ich jetzt erreichen möchte, ist, nur diese Funktionen anzuzeigen. Genau so, wie man es mit dem Abfrage-Generator über die GUI tun würde. Ich weiß nicht, ob dies auf der Ebene des Renderns (das einige Features und andere nicht rendern würde) oder auf der Ebene des Datenanbieters (der der Ebene nur einen Überblick über die nur enthaltenen Daten geben würde) verwaltet werden muss die gewünschte Teilmenge) oder irgendwo dazwischen.

Jean-Philippe
quelle
Die Antwort von @Nathan ist richtig. Wir können auch festlegen, was mit setSubsetString () oder Query Builder mithilfe von layer.subsetString () festgelegt wird. Wenn es leer ist, wird eine leere Zeichenfolge '' zurückgegeben.
Zac Wang

Antworten:

13

Die gesuchte Methode heißt setSubsetString

layer.setSubsetString("field=4")
Nathan W.
quelle
Vielen Dank. Der Name der Funktion lautet nicht setSubString, während Sie Ihre Antwort in Ihre Antwort schreiben, sondern setSubsetString. Der Link verweist trotzdem auf die gute Funktion. Ich habe Ihre Antwort zum späteren Nachschlagen bearbeitet. Danke noch einmal.
Jean-Philippe