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 cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.