Usiłuję uzyskać automatyczne aktualizowanie warstw po zmianie źródła danych. Używam R do pisania pliku kształtu z atrybutem i kolorowania zgodnie z tym atrybutem w QGIS.
Chcę napisać nowy plik kształtu z różnymi wartościami atrybutów i zaktualizować kolory mapy Qgis. Krok 1 uruchamia ten proces, krok 2 powoduje ponowne załadowanie warstwy ze zmodyfikowanego pliku kształtu. Jego krok 2 Martwię się tutaj.
Inne pytania / rozmowy na liście mailowej wspominają używanie triggerRepaint
na warstwie - to nie działa. Inne sugestie obejmują setCacheImage(None)
i znowu to nie działa. Warstwa ostatecznie się aktualizuje, ale naprawdę nie widzę logiki, a czasem dzieje się to z zaskoczenia, gdy nic nie zrobiłem. A może zrobiłem coś dwie minuty temu.
Jedynym odtwarzalnym sposobem uzyskania aktualizacji jest skopiowanie warstwy z menu legendy - duplikat zawsze pobiera dane z bieżącego pliku kształtu, a oryginalna warstwa aktualizuje się sama! Więc musi być jakiś sposób na to.
Myślę, że działało to lepiej w 2.8, ale jest to 2.10, więc może gdzieś jest nowy błąd.
Powiązane, ale nie działa dla mnie w 2.10:
Jak automatycznie ponownie ładować warstwy rastrowe, jeśli źródło zostanie zmienione w QGIS?
Inne rzeczy, których próbowałem:
layer.dataProvider().dataChanged.emit()
- pracował raz, a potem nie na tej samej warstwie
Wydaje mi się, że wyśledziłem, dlaczego działa duplikacja warstwy - jeśli utworzę nową warstwę wysuwaną na podstawie zaktualizowanej warstwy, a następnie wywołam .triggerRepaint()
zaktualizowaną warstwę, nastąpi aktualizacja na kanwie mapy:
QgsVectorLayer( layer.source(), "layer copy", layer.providerType() )
layer.triggerRepaint()
Jeśli użyję innego źródła warstwy, to nie działa, więc wydaje się, że tak jest, jeśli utworzysz obiekt warstwy na podstawie tego samego źródła warstwy ...
Szybki test właśnie teraz z warstwą rastrową (z GeoTIFF) i samo wywołanie rlayer.triggerRepaint()
wydaje się niezawodnie aktualizować widok rastra na kanwie mapy.
layer.setCacheImage(None)
i layer.triggerRepaint()
?
triggerRepaint()
na oryginalnej warstwie. v 2.10.1-Piza