¿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?

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


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)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.