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?

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


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)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.