I'm trying to write a Python script in QGIS 2.18.16 to use zonal statistics of a multi-band raster (GeoTIFF) using a polygon shapefile.

QGIS crashes turning off so I can't get any error message to correct my code.

I'm working in Ubuntu 16.04 64 bit.

Am I doing something wrong or is there a bug in QGIS?

import processing 
vectorlayer = qgis.utils.iface.mapCanvas().layer(0)
rasterfile = qgis.utils.iface.mapCanvas().layer(1).source()

processing.runalg("qgis:zonalstatistics", rasterfile, 3, vectorlayer, "Zonal_", True, "/media/giacomo/4A48-5E67/prova/out.shp")
  • 2
    Did you type print vectorlayer and print rasterfile to ensure you're using the correct order of layers? – Joseph Jan 31 '18 at 15:12
  • Hi. Yes, it is a multiple bands raster. – ilFonta Feb 3 '18 at 11:53

I solved in this way.

from qgis.analysis import QgsZonalStatistics

pathFileRaster = "G:\\prova\\VHVV.tif"
pathFileVector = "G:\\prova\\ROI_polygons_Rothamsted_2014-2015\\ROI_polygons_Rothamsted_2014-2015.shp"

pathFileRasterQgs = QgsRasterLayer(pathFileRaster, "stack")
pathFileVectorQgs = QgsVectorLayer(pathFileVector, "ROI", 'ogr')

nBands = pathFileRasterQgs.bandCount()
listBands = range(1, (nBands+1))

for iBand in listBands:

    calc = QgsZonalStatistics(pathFileVectorQgs, \
    pathFileRaster , \
    'b_', \
    int(iBand), \
    QgsZonalStatistics.Mean #because I need only the mean)

| improve this answer | |

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.