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?

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


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)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.