Tạo lớp ảo mới theo chương trình trong QGIS?


10

Có thể tạo Lớp ảo thông qua tập lệnh python. Ví dụ: tôi có một lớp "đường" và tôi muốn thực hiện sql "CHỌN * TỪ đường WHERE loại = 'Đường cao tốc'"

Điều này sẽ có thể? Có ví dụ nào tôi có thể tham khảo?

Câu trả lời:


8

Bạn có thể sử dụng một cái gì đó như sau:

from qgis.core import QgsVectorLayer, QgsMapLayerRegistry

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

Bạn có thể tìm thấy các ví dụ về cách sử dụng các lớp ảo thông qua python từ GitHub của tác giả:

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


1
Tôi gặp lỗi trong bảng điều khiển Python : 'QgsMapLayerRegistry' is not defined. Câu lệnh SQL hoạt động khi chạy trong hộp thoại 'Tạo lớp ảo'.
lu mờ_by_the_moon

1
Bạn đã bao gồm dòng 'từ nhập qgis.core ...' chưa? Phiên bản nào bạn đang sử dụng?
ndawson

@eclipsed_by_the_moon - Vâng, bạn đã đúng. Đã chỉnh sửa bài đăng để bao gồm các mục nhập cần thiết (nhờ người dùng khó chịu để chỉnh sửa).
Joseph

1
@Joseph Cảm ơn liên kết được cung cấp trong câu trả lời của bạn!
mgri

@CyT - Chào mừng bạn! Vui mừng vì nó đã làm việc =)
Joseph

7

Đối với QGIS 3, thay vào đó, hãy sử dụng QssProject:

from qgis.core import QgsVectorLayer, QgsProject
vlayer = QgsVectorLayer( "?query=SELECT * FROM road WHERE type = 'Expressway'", "vlayer", "virtual" )
QgsProject.instance().addMapLayer(vlayer)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.