Programmgesteuert neue virtuelle Ebene in QGIS erstellen?

10

Ist es möglich, eine virtuelle Ebene über ein Python-Skript zu erstellen? Zum Beispiel habe ich eine Ebene "Straße" und möchte SQL "SELECT * FROM Straße WHERE Typ = 'Expressway'" ausführen.

Wird das möglich sein? Gibt es ein Beispiel, auf das ich mich beziehen kann?

Cy T.
quelle

Antworten:

8

Sie könnten Folgendes verwenden:

from qgis.core import QgsVectorLayer, QgsMapLayerRegistry

vlayer = QgsVectorLayer( "?query=SELECT * FROM road WHERE type = 'Expressway'", "vlayer", "virtual" )
QgsMapLayerRegistry.instance().addMapLayer(vlayer)

Beispiele zur Verwendung virtueller Ebenen über Python finden Sie im GitHub des Autors:

https://github.com/mhugo/qgis_vlayers/blob/master/README.md

Joseph
quelle
1
Ich habe einen Fehler in der Python-Konsole erhalten : 'QgsMapLayerRegistry' is not defined. Die SQL-Anweisung funktioniert, wenn sie im Dialogfeld "Virtuelle Ebene erstellen" ausgeführt wird.
eclipsed_by_the_moon
1
Haben Sie die Zeile 'from qgis.core import ...' eingefügt? Welche Version verwenden Sie?
Ndawson
@eclipsed_by_the_moon - Ja, du bist richtig. Der Beitrag wurde bearbeitet, um die erforderlichen Importe einzuschließen (danke an den nervigen Benutzer für die Bearbeitung).
Joseph
1
@ Joseph Danke für den Link in deiner Antwort!
Mgri
@CyT - Herzlich willkommen!
Joseph
7

Verwenden Sie für QGIS 3 stattdessen QgsProject:

from qgis.core import QgsVectorLayer, QgsProject
vlayer = QgsVectorLayer( "?query=SELECT * FROM road WHERE type = 'Expressway'", "vlayer", "virtual" )
QgsProject.instance().addMapLayer(vlayer)
Rwalk
quelle