Medias por fila de un ráster usando GDAL en ambiente de PyQGIS

En el post anterior se señaló la manera de leer los valores de un ráster usando el módulo GDAL en ambiente de PyQGIS y se ejemplifico que ello era posible mediante la obtención del promedio de todos los values del ráster. En este caso, vamos a modificar el script anterior para determinar, adicionalmente, los promedios por fila escribiéndolos a un arreglo. Se deja al lector la elección de escribir estos valores a un archivo de texto plano como mejor estrategia de visualización.

El código modificado es el siguiente:

from osgeo import gdal
import os
import struct

layer = iface.activeLayer()
provider = layer.dataProvider()

fmttypes = {'Byte':'B', 'UInt16':'H', 'Int16':'h', 'UInt32':'I', 'Int32':'i', 'Float32':'f', 'Float64':'d'}

path= provider.dataSourceUri()

(raiz, filename) = os.path.split(path)

dataset = gdal.Open(path)

band = dataset.GetRasterBand(1)
  
totHeight = 0
totFiles = 0

print "filas = %d columnas = %d" % (band.YSize, band.XSize)

BandType = gdal.GetDataTypeName(band.DataType)
  
print "Tipo de datos = ", BandType
 
print "Ejecutando estadisticas de %s" % filename
print "que se encuentra en %s" % raiz

medias_fila = []

for y in range(band.YSize):
  
    scanline = band.ReadRaster(0, y, band.XSize, 1, band.XSize, 1, band.DataType)
    values = struct.unpack(fmttypes[BandType] * band.XSize, scanline)
  
    for value in values:
        totHeight += value
        totFiles += value
          
    medias_fila.append(totFiles/float(band.XSize))
    totFiles = 0
    
average = totHeight / float((band.XSize * band.YSize))
(min,max) = band.ComputeRasterMinMax(1)
  
print "Promedio = %0.5f" % average
print "valor minimo = %.3f  valor maximo = %.3f" % (min,max)
 
dataset = None

donde también se incluye una línea (45) para computar los valores mínimos y máximos del ráster que se se visualizan en la Python Console a través de la línea de código número 48. El resultado de ejecución es el siguiente:

Python Console 
Use iface to access QGIS API interface or Type help(iface) for more info
execfile(u'/home/zeito/scriptspyqgis/gdal_read2.py'.encode('UTF-8'))
filas = 3630 columnas = 3603
Tipo de datos =  Int16
Ejecutando estadisticas de tiznados_canoa.tif
que se encuentra en /home/zeito
Promedio = 256.40911
valor minimo = 0.000  valor maximo = 1876.000

Mediante una imagen visualizamos en la Python Console (ejecutando medias_fila [Enter]) parte del arreglo de medias por fila y se comprueba que tiene una longitud que concuerda con el número de filas del ráster (3630 valores que son imposibles de visualizar simultáneamente por pantalla).

gdal_read2

Esta entrada fue publicada en GDAL, PyQGIS, QGIS, SIG, Software Libre. Guarda el enlace permanente.

2 respuestas a Medias por fila de un ráster usando GDAL en ambiente de PyQGIS

  1. Pingback: Medias por columna de un ráster usando GDAL en ambiente de PyQGIS | El Blog de José Guerrero

  2. Pingback: Subregiones ráster usando GDAL en ambiente de PyQGIS | El Blog de José Guerrero

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s