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?

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


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)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.