Friday, 6 November 2015

QGIS Zonal Stats Plugin - Python Console - compute one specific statistic


I think this is more of a syntax problem that I have here. But I am absolutely not able to figure it out. On a different Linux machine I got the following working:


zoneStat = QgsZonalStatistics (polygonLayer, rasterFilePath, 'pre-', 1, QgsZonalStatistics.Mean())
zoneStat.calculateStatistics(None)

to just calculate the mean and then append it to the .dbf file of the shapefile. The error I get is TypeError: 'Statistic' object is not callable. I see whats the problem, but even after studying the API I couldn't figure it out. What am I doing wrong here?



Answer



If you look at QgsZonalStatistics.Mean it's part of an enumeration - it's actually the integer 4. You're calling it as if it's a function.


Try removing the brackets:-



zoneStat = QgsZonalStatistics (polygonLayer, rasterFilePath, 'pre-', 1, QgsZonalStatistics.Mean)
zoneStat.calculateStatistics(None)

Note that these values are done as powers of two; to get a combination of several stats, you can sum them (or use a binary or)


e.g. to get maximum, minimum and mean use the python bitwise or (the 'pipe' character)


QgsZonalStatistics.Mean | QgsZonalStatistics.Max | QgsZonalStatistics.Min

so...


zoneStat = QgsZonalStatistics (polygonLayer, rasterFilePath, 'pre-', 1, QgsZonalStatistics.Mean | QgsZonalStatistics.Max | QgsZonalStatistics.Min)
zoneStat.calculateStatistics(None)

No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...