Tôi đang cố gắng để các lớp cập nhật tự động khi nguồn dữ liệu của chúng thay đổi. Tôi đang sử dụng R để viết một shapefile với một thuộc tính và tô màu theo thuộc tính đó trong QGIS.
Tôi muốn viết một shapefile mới với các giá trị thuộc tính khác nhau và cập nhật màu sắc bản đồ Qgis. Bước 1 đang kích hoạt quá trình đó, bước 2 là tạo lớp tải lại từ shapefile đã sửa đổi. Bước 2 của nó tôi đang lo lắng về đây.
Các câu hỏi / danh sách gửi thư khác đề cập đến việc sử dụng triggerRepaint
trên lớp - không hoạt động. Các đề xuất khác bao gồm setCacheImage(None)
và một lần nữa không hoạt động. Lớp cuối cùng sẽ cập nhật, nhưng tôi thực sự không thể thấy logic và đôi khi nó xảy ra một cách bất ngờ sau khi tôi không làm gì cả. Hoặc có lẽ tôi đã làm một cái gì đó hai phút trước.
Cách tái tạo để cập nhật nó là sao chép lớp từ menu chú thích - bản sao luôn lấy dữ liệu từ shapefile hiện tại và lớp gốc cũng tự cập nhật! Vì vậy, phải có một số cách làm nó.
Tôi nghĩ rằng nó đã hoạt động tốt hơn trong 2.8, nhưng đây là 2.10 nên có thể có một lỗi mới ở đâu đó.
Liên quan, nhưng không hoạt động với tôi trong 2.10:
Làm cách nào để tự động tải lại các lớp raster nếu nguồn được thay đổi trong QGIS?
Những thứ khác tôi đã thử:
layer.dataProvider().dataChanged.emit()
- làm việc một lần, sau đó không lặp lại trên cùng một lớp
Tôi nghĩ rằng tôi đã theo dõi lý do tại sao sao chép lớp hoạt động - nếu tôi tạo một lớp ném mới dựa trên lớp được cập nhật và sau đó gọi .triggerRepaint()
lớp được cập nhật, nó sẽ cập nhật trên khung bản đồ:
QgsVectorLayer( layer.source(), "layer copy", layer.providerType() )
layer.triggerRepaint()
Nếu tôi sử dụng một nguồn lớp khác thì nó không hoạt động, vì vậy có vẻ như là nếu bạn tạo một đối tượng lớp dựa trên cùng một nguồn lớp ...
Một thử nghiệm nhanh ngay bây giờ với lớp raster (từ GeoTIFF) và chỉ cần gọi rlayer.triggerRepaint()
có vẻ cập nhật đáng tin cậy chế độ xem của raster trong khung vẽ bản đồ.
layer.setCacheImage(None)
và layer.triggerRepaint()
?
triggerRepaint()
trên lớp ban đầu. v 2.10.1-Pisa