¿Crear nueva capa virtual mediante programación en QGIS?

10

¿Es posible crear una capa virtual a través de un script de Python? Por ejemplo, tengo una capa "road" y me gustaría realizar sql "SELECT * FROM road WHERE type = 'Expressway'"

¿Será esto posible? ¿Hay algún ejemplo al que me pueda referir?

Cy T
fuente

Respuestas:

8

Podría usar algo como lo siguiente:

from qgis.core import QgsVectorLayer, QgsMapLayerRegistry

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

Puede encontrar ejemplos sobre cómo usar capas virtuales a través de Python desde el GitHub del autor:

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

José
fuente
1
Tengo un error en la consola de Python: 'QgsMapLayerRegistry' is not defined. La instrucción SQL funciona cuando se ejecuta en el cuadro de diálogo 'Crear una capa virtual'.
eclipsed_by_the_moon
1
¿Incluyó la línea 'from qgis.core import ...'? Qué versión estás usando?
ndawson
@eclipsed_by_the_moon - Sí, estás en lo correcto. Se editó la publicación para incluir las importaciones necesarias (gracias a un usuario anónimo para editar).
Joseph
1
@Joseph ¡Gracias por el enlace proporcionado en tu respuesta!
mgri
@CyT: ¡bienvenido! Me alegro de que funcionó =)
Joseph
7

Para 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)
paseo
fuente