3 votos

Problema con el cálculo de QGIS Zonal Statistics MEAN

Necesito calcular algunas estadísticas zonales a partir de archivos raster para algunos polígonos en un shapefile. Estoy utilizando el siguiente código que funciona:

    eligibleLayer = QgsVectorLayer("/home/usr/Desktop/polygons.shp", "polygons", "ogr")
    for raster in findRasters(windMapsDirectory, '*.tif'):
        (infilepath, infilename) = os.path.split(raster) 
        windMapName = infilename
        list1 = re.split('\W+',windMapName)
        list2 = re.split("_", list1[0])
        list3 = list2[2]
        string1 = ''.join(list3)
        if string1 == 'K':
            zoneStat = QgsZonalStatistics(eligibleLayer, windMapName, 'K_', 1)
            zoneStat.calculateStatistics(None)

El problema es que sólo necesito la media de las estadísticas zonales (sin recuento ni suma). He intentado utilizar:

        if string1 == 'K':
            zoneStat = QgsZonalStatistics(eligibleLayer, windMapName, 'K_', 1, QgsZonalStatistics.Mean)

Sin embargo, obtengo el siguiente error: el objeto de tipo 'QgsZonalStatistics' no tiene el atributo 'Mean' . Estoy utilizando QGIS 2.8.6.

0 votos

¿Has probado a llamar a otros atributos con este método?

0 votos

¿Qué ocurre si sustituye QgsZonalStatistics.Mean con zoneStat.Mean ?

0 votos

Si sustituyo QgsZonalStatistics.Mean por zoneStat.Mean, obtengo: el nombre 'zoneStat' no está definido. También si intento llamar a QgsZonalStatistics.Sum, obtengo: type object 'QgsZonalStatistics' has no attribute 'Sum'.

3voto

Yada Puntos 9489

Por alguna razón su código no está produciendo un QgsZonalStatistics objeto. Imprima 'zoneStats' para corroborarlo. Se debe observar algo similar a:

<qgis._analysis.QgsZonalStatistics object at 0x9fc316ec>

He probado el siguiente código:

from qgis.analysis import QgsZonalStatistics

mapcanvas = iface.mapCanvas()

layers = mapcanvas.layers()
provider = layers[1].dataProvider()

path = provider.dataSourceUri()

zoneStat = QgsZonalStatistics(layers[0], path,"", 1, QgsZonalStatistics.Mean)

print zoneStat

zoneStat.calculateStatistics(None)

para esta situación:

enter image description here

y, tras ejecutar el script, se ha añadido sólo el valor medio; como se puede observar en la siguiente imagen:

enter image description here

A mí me funciona perfectamente.

0 votos

Traté de imprimir zoneStat después de mi primera condición con la cadena K y me sale: <qgis._analysis.QgsZonalStatistics objeto en 0x7fc3fc785a68> <qgis._analysis.QgsZonalStatistics objeto en 0x7fc3fc785b00> <qgis._analysis. QgsZonalStatistics objeto en 0x7fc3fc785b00> <qgis._analysis.QgsZonalStatistics objeto en 0x7fc3fc785a68> <qgis._analysis.QgsZonalStatistics objeto en 0x7fc3fc785b00>

0 votos

También he comparado mi resultado (con el script python) con el plugin Zonal statistics y obtengo los mismos números para mis polígonos...

0voto

ArMoraer Puntos 338

Un poco tarde, pero acabo de tener el mismo problema usando QGIS 2.14 ( type object 'QgsZonalStatistics' has no attribute 'Mean' , con un QgsZonalStatistics objeto).

Resulta que funciona bien con QGIS 2.18, así que probablemente hubo algún cambio en la API de QGIS que no está documentado, o un error que fue corregido.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X