Gibt es eine Möglichkeit, die Funktion "Auswahl nach Attribut" in QGIS mit einem Python-Befehl zu verwenden? In meinem Plugin sollte der Benutzer einen Wert über eine GUI eingeben und dieser Wert sollte in einer Funktion verwendet werden, die alle Funktionen auswählt, die dieses Attribut aufweisen. Der Spaltenname ist im Code festgelegt, die Funktion sollte nur nach dem richtigen Wert suchen.
In meiner aktuellen Lösung verbindet die Funktion QGIS mit einer PostgreSQL-Datenbank und führt eine SQL-Anweisung aus. Dies erstellt eine Tabelle aus dem Ergebnis und die Tabelle wird in QGIS als Shapefile dargestellt.
Grundsätzlich genügt es, die Features zu markieren und kein neues Shapefile der Auswahl zu erstellen. Die Verwendung der Funktion "Auswahl nach Attribut" würde auch die unnötige Datenbankverbindung überspringen.
Gibt es eine Möglichkeit, die Funktion "Nach Attributen auswählen" in Python zu verwenden, damit die Features hervorgehoben werden? Wenn Sie die Funktion in QGIS verwenden, werden alle Funktionen, die nicht mit der Abfrage übereinstimmen, vorübergehend ausgeblendet, was ebenfalls in Ordnung wäre.
Antworten:
Ja. Sie können alle Attribute über die Python-Bindungen abrufen und zusätzliche Filter in Ihrem eigenen Plugin implementieren. In diesem PyQGIS Coobook-Auszug finden Sie einige Beispiele. Sie würden dann nur nicht übereinstimmende Ergebnisse aus dem zurückgegebenen Wörterbuch ausschließen.
In Bezug auf die Visualisierung müssen Sie wahrscheinlich noch eine weitere Ebene erstellen, da
select()
keine passenden Argumente vorhanden sind. Sie können eine Speicherebene verwenden, um zu vermeiden, dass physische Dateien erstellt werden müssen (mehr dazu im Kochbuch).bearbeiten:
Tatsächlich können Sie
selectedFeaturesIds()
mitsetSelectedFeatures(ids)
die Auswahl in die von Ihnen erstellte Teilmenge ändern. Die Implementierung direkt zitieren:quelle
Ab QGIS 2.2 wird dies auf sehr natürliche Weise unterstützt. Dies kann mit der
QgsFeatureRequest.setFilterExpression( unicode )
Methode über die QGIS Expression Engine erfolgen .Das Beste daran: Wenn Sie über eine aktuelle QGIS-Version (2.10 und höher) verfügen, wird diese direkt in der Datenbank gefiltert und ist so viel performanter als andere Lösungen, obwohl sie noch sehr gut lesbar ist.
quelle
sextante.runalg ('qgis: selectbylocation', "Pufferbereich", "Krankenhäuser", 1)
http://qgissextante.blogspot.in/2013/01/using-selection-algorithms.html
quelle