Wie erhalte ich Features anhand ihrer Attribute (ähnlich wie bei Iqueryfilter in arcobjects) in Qgis mit Python? Gibt es eine Option, die WHERE-Klausel zum Herausfiltern zu verwenden, anstatt alle Features manuell abzurufen und zu filtern?
Beispiel: Ich habe einen Feldnamen namens 'Counties'. Es verfügt über mehr als fünfzigtausend Features. Aufgrund des Zeitaufwands ist es nicht möglich, alle Features abzurufen und zu filtern. So kann ich es mit iqueryfilter.whereclause = 'Counties = Norwich' in arcobjects abfragen. Ähnliches brauche ich in PyQgis.
Antworten:
Die QGIS-Expression-Engine kann dies mit der
QgsFeatureRequest.setFilterExpression( unicode )
Methode (seit QGIS 2.2) ausführen.Ab QGIS 2.10 ist es sogar möglich, dass das Filtern auf diese Weise gegenüber anderen Filtertypen (z. B. Python-Implementierungen) zusätzliche Leistung bringt.
Grundsätzlich gilt dies, wenn die folgenden drei Bedingungen erfüllt sind:
Sie verwenden eine Ebene mit dem Postgis-AnbieterZur Zeit (2.16) implementieren weit mehr als nur Postgis-Anbieter dies (Spatialite, Ogr, Orakel ...).>
,=
,IN
,NOT NULL
... werden unterstützt)Mit QGIS 3.0 ist das sogar einfach möglich
quelle
In diesem Beitrag, der als Antwort auf eine doppelte Frage betrachtet werden kann, wird beschrieben, wie alle Attribute aus einer Ebene abgerufen werden. Der Autor beschreibt den gewünschten Vorgang als manuelles Filtern der Daten, sobald diese zurückgegeben werden. Es ist eine ziemlich vollständige Referenz und ihr Link sollte Ihnen wirklich helfen.
quelle
Durch die Verwendung einer SQL-Abfrage ist dies auch problemlos mit möglich
ogr
. Sie können diesen Code beispielsweise in der QGIS-Python-Konsole oder in einem eigenständigen Skript ausführen.Beispiel :
quelle
Das Angeben von SQL-Filtern wird mit der QGIS-API ab Version 1.9 noch nicht unterstützt.
Wie ich aus diesem Mailinglisten-Artikel verstehe , wird die Unterstützung für "SQL des systemeigenen Anbieters" nur in einer zukünftigen Version angeboten.
quelle