我试图让图层在其数据源更改时自动更新。我正在使用R编写具有属性的shapefile,并根据QGIS中的该属性进行着色。
我想编写一个具有不同属性值的新shapefile,并更新Qgis贴图颜色。第1步触发该过程,第2步从修改后的shapefile重新加载图层。我在这里担心它的第2步。
其他问题/邮件列表聊天者提到triggerRepaint
了在图层上使用的内容-不起作用。其他建议包括setCacheImage(None)
一遍又一遍不起作用。该层确实会最终更新,但是我真的看不到逻辑,有时在我什么都不做之后会意外地发生。或者也许我在两分钟前做了一些事情。
一种可更新的更新方式是从图例菜单中复制图层-副本始终从当前shapefile获取其数据,而原始图层也将自行更新!因此,必须有某种方法可以做到这一点。
我认为它在2.8中工作得更好,但这是2.10,因此也许某个地方存在一个新的错误。
相关,但在2.10中不适用于我:
我尝试过的其他方法:
layer.dataProvider().dataChanged.emit()
-工作一次,然后不在同一层上工作
我想我已经找到了为什么要复制图层的原因-如果我基于更新的图层创建一个新的一次性图层,然后调用.triggerRepaint()
更新的图层,它将在地图画布上更新:
QgsVectorLayer( layer.source(), "layer copy", layer.providerType() )
layer.triggerRepaint()
如果我使用不同的图层源,它将无法正常工作,因此似乎是基于相同图层源创建图层对象的。
现在,使用栅格图层(来自GeoTIFF)进行快速测试,并且只需调用rlayer.triggerRepaint()
即可可靠地更新地图画布中栅格的视图。
layer.setCacheImage(None)
和layer.triggerRepaint()
?
triggerRepaint()
在原始图层上创建一个新的一次性图层对象。v