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?

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


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)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.