데이터 소스가 변경되면 레이어를 자동으로 업데이트하려고합니다. R을 사용하여 속성으로 shapefile을 작성하고 QGIS에서 해당 속성에 따라 색상을 지정합니다.
다른 속성 값으로 새 shapefile을 작성하고 Qgis 맵 색상을 업데이트하고 싶습니다. 1 단계는 해당 프로세스를 트리거하고 2 단계는 수정 된 모양 파일에서 레이어를 다시로드합니다. 그것의 2 단계 나는 여기서 걱정하고 있습니다.
다른 질문 / 메일 링리스트 채터 triggerRepaint
가 레이어에서 사용한다고 언급 했지만 작동하지 않습니다. 다른 제안으로는 setCacheImage(None)
작동하지 않는 것이 있습니다. 레이어는 결국 업데이트되지만 실제로 논리를 볼 수 없으며 때로는 아무것도하지 않은 후에 놀랍게 발생합니다. 아니면 2 분 전에 뭔가를했을 수도 있습니다.
그것을 업데이트 할 수있는 재현 가능한 방법 중 하나는 범례 메뉴에서 레이어를 복제하는 것입니다. 복제본은 항상 현재 모양 파일에서 데이터를 가져오고 원래 레이어도 자체적으로 업데이트됩니다! 따라서 어떤 방법이 있어야합니다.
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-Pisa