Я намагаюся отримати шари для оновлення автоматично, коли їх джерело даних змінюється. Я використовую R, щоб написати файл форми з атрибутом і розфарбувати відповідно до цього атрибуту в QGIS.
Я хочу написати новий файл форми з різними значеннями атрибутів і оновити кольори карти Qgis. Крок 1 запускає цей процес, крок 2 - це перезавантаження шару із зміненого файлу форми. Її крок 2 Я тут хвилююся.
Інші запитання / чат-лист розсилки згадує про використання triggerRepaint
на шарі - це не працює. Інші пропозиції включають setCacheImage(None)
і знову це не працює. Шар в кінцевому підсумку оновлюється, але я дійсно не бачу логіки, а іноді це відбувається зненацька після того, як я нічого не зробив. А може, я щось зробив дві хвилини тому.
Єдиний відтворюючий спосіб його оновлення - це дублювання шару з меню легенди - дублікат завжди отримує свої дані з поточного файлу форми, і оригінальний шар також оновлюється! Тож має бути якийсь спосіб це зробити.
Я думаю, що це працювало краще в 2,8, але це 2,10, тож, можливо, десь є нова помилка.
Пов’язано, але не працює для мене в 2.10:
Як автоматично перезавантажити растрові шари, якщо джерело змінено в QGIS?
Інші речі, які я спробував:
layer.dataProvider().dataChanged.emit()
- працював один раз, потім знову не на тому ж шарі
Я думаю, я простежив, чому працює дублювання шару - якщо я створюю новий шар, який викидається на основі оновленого шару, а потім викликаю .triggerRepaint()
оновлений шар, він оновлює на полотні карти:
QgsVectorLayer( layer.source(), "layer copy", layer.providerType() )
layer.triggerRepaint()
Якщо я використовую інше джерело шару, воно не працює, тому, здається, ви створюєте об'єкт шару на основі того ж джерела шару ...
Швидкий тест лише з растровим шаром (від GeoTIFF), і лише виклик, rlayer.triggerRepaint()
здається, надійно оновить вигляд растра на полотні карти.
layer.setCacheImage(None)
і layer.triggerRepaint()
?
triggerRepaint()
на вихідному шарі. v 2.10.1-Піза