I'm having troubles with a pyQGIS script. I'm trying to create a large number of maps showing NDVI in a certain area over the time. The script opens a raster file, applies a style, changes title and exports map.

I made a loop to do that and it doesn't work, the canvas doesn't refresh and many maps are from the same raster file. I Use solutions like How to refresh MapCanvas while PyQGIS-script is running? or Map on canvas renders after image saving [duplicate] with no success.

But, I'm looking a way to create dummy rasters/vectors prior to recreates pyQGIS problems. R have excellent guides, and this also can be applied to spatial data.

So, is there a way to create dummy rasters with random numbers to recreates problems like this?

By the way, the script is something like the code below. I'm looking a way to replaces files item into dummy rasters.

from qgis.core import QgsProject
from qgis.gui import *
from PyQt4.QtCore import QSettings, QTranslator, qVersion, QCoreApplication,QFileInfo,QSizeF,QTimer
from PyQt4.QtGui import QAction, QIcon, QPrinter,QPainter
import os
import glob

files = glob.glob(r'Path/to/monthly/NDVI/*.tif')

aaa = [some list]

n = 287 # 12 year

for i in range(0,n):
    project = QgsProject.instance()
    layer1 = QgsRasterLayer(files[i],'NDVI')
    uri = '/path/to/estilo.qml'
    root = QgsProject.instance().layerTreeRoot()
    group = root.findGroup('Raster')
    QgsMapLayerRegistry.instance().addMapLayer(layer1, False)
    group.insertChildNode(-1, QgsLayerTreeLayer(layer1))
    composers = iface.activeComposers()
    composers[0].items()[2].setText('Test' + str(files[i]))
    c = composers[0].composition()

    def ExP():
        imgOut = c.printPageAsRaster (0)

    QTimer.singleShot(2000, ExP)

    def ReM():
        QgsMapLayerRegistry.instance().removeMapLayer( layer1.id() )

    QTimer.singleShot(2000, ReM)


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.