Créer une nouvelle couche virtuelle par programme dans QGIS?

10

Est-il possible de créer une couche virtuelle via un script python. Par exemple, j'ai une couche "road", et je voudrais effectuer sql "SELECT * FROM road WHERE type = 'Expressway'"

Est-ce que cela sera possible? Y a-t-il un exemple auquel je peux me référer?

Cy T
la source

Réponses:

8

Vous pouvez utiliser quelque chose comme ceci:

from qgis.core import QgsVectorLayer, QgsMapLayerRegistry

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

Vous pouvez trouver des exemples sur la façon d'utiliser des couches virtuelles via python dans le GitHub de l'auteur:

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

Joseph
la source
1
Je suis une erreur dans la console Python: 'QgsMapLayerRegistry' is not defined. L'instruction SQL fonctionne lors de l'exécution dans la boîte de dialogue «Créer une couche virtuelle».
eclipsed_by_the_moon
1
Avez-vous inclus la ligne 'from qgis.core import ...'? Quelle version utilisez-vous?
ndawson
@eclipsed_by_the_moon - Oui, vous avez raison. Modification du message pour inclure les importations nécessaires (merci à l'utilisateur ennuyeux pour l'édition).
Joseph
1
@Joseph Merci pour le lien fourni dans votre réponse!
mgri
@CyT - Bienvenue! Heureux que cela ait fonctionné =)
Joseph
7

Pour QGIS 3, utilisez plutôt QgsProject:

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