Membuat Layer Virtual baru secara terprogram di QGIS?

10

Apakah mungkin untuk membuat Lapisan Virtual melalui skrip python. Sebagai contoh, saya memiliki layer "road", dan saya ingin melakukan sql "SELECT * FROM road WHERE type = 'Expressway'"

Apakah ini mungkin? Apakah ada contoh yang bisa saya lihat?

Cy T
sumber

Jawaban:

8

Anda dapat menggunakan sesuatu seperti berikut ini:

from qgis.core import QgsVectorLayer, QgsMapLayerRegistry

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

Anda dapat menemukan contoh tentang cara menggunakan lapisan virtual melalui python dari GitHub penulis:

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

Yusuf
sumber
1
Aku punya kesalahan dalam Python konsol: 'QgsMapLayerRegistry' is not defined. Pernyataan SQL berfungsi saat berjalan dalam dialog 'Buat lapisan virtual'.
eclipsed_by_the_moon
1
Apakah Anda memasukkan baris 'from qgis.core import ...'? Versi apa yang Anda gunakan?
ndawson
@eclipsed_by_the_moon - Ya, Anda benar. Mengedit posting untuk memasukkan impor yang diperlukan (terima kasih kepada pengguna yang mengganggu untuk mengedit).
Joseph
1
@ Joseph Terima kasih atas tautan yang disediakan dalam jawaban Anda!
mgri
@CyT - Sama-sama! Senang itu berhasil =)
Joseph
7

Untuk QGIS 3, gunakan QgsProject:

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