Criando nova camada virtual programaticamente no QGIS?

10

É possível criar uma camada virtual através de um script python. Por exemplo, tenho uma camada "road" e gostaria de executar o sql "SELECT * FROM road WHERE type = 'Expressway'"

Isso será possível? Existe algum exemplo ao qual eu possa me referir?

Cy T
fonte

Respostas:

8

Você pode usar algo como o seguinte:

from qgis.core import QgsVectorLayer, QgsMapLayerRegistry

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

Você pode encontrar exemplos de como usar camadas virtuais por meio de python no GitHub do autor:

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

Joseph
fonte
1
Eu tenho um erro no console Python: 'QgsMapLayerRegistry' is not defined. A instrução SQL funciona ao executar na caixa de diálogo 'Criar uma camada virtual'.
Eclipseed_by_the_moon
1
Você incluiu a linha 'from qgis.core import ...'? Qual versão você está usando?
Ndawson 6/02
@eclipsed_by_the_moon - Sim, você está correto. Editou a postagem para incluir as importações necessárias (obrigado ao usuário irritante por editar).
Joseph
1
@ Joseph Obrigado pelo link fornecido na sua resposta!
MGRI
@CyT - Muito bem-vindo! Fico feliz que funcionou =)
Joseph
7

Para o QGIS 3, use QgsProject:

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