How to automatically reloaded raster layer if source is changed? (The path is the same but inside source file are changes)
I use:
qgis.utils.iface.mapCanvas().refresh()
but layer not refresh.
# # #
The maps are repainting but there are still the same image (source file is changed on disc)
I use:
layers = qgis.utils.iface.legendInterface().layers()
for layer in layers:
layer.triggerRepaint()
Answer
I suppose your question does not include change detection, as your sample only concerns QgsMapCanvas.refresh()
Instead you have to call QgsRasterLayer.triggerRepaint()
If your layer is called myLayer:
myLayer.setCacheImage( None )
myLayer.triggerRepaint()
The same method exists for vector layers as well.
For low overhead file change notification I'd propose looking into Qt's QFileSystemWatcher
, which makes use of inotify on linux and similar techniques on other platforms.
from PyQt4.QtCore import QFileSystemWatcher
def refreshLayer():
myLayer.setCacheImage( None )
myLayer.triggerRepaint()
watcher = QFileSystemWatcher()
watcher.addPath( '/path/to/your/raster' )
watcher.fileChanged.connect( refreshLayer )
Of course this can be combined with an MD5 check as proposed by nickves or a modification time check with os.stat
(Nathan W proposal).
No comments:
Post a Comment