Mínimos y Máximos de un ráster usando ‘dataProvider’ en PyQGIS

El procedimiento más expedito para determinar las estadísticas de un ráster en ambiente de PyQGIS es usar el método ‘dataProvider’ de QgsRasterLayer. Este los convierte en objetos de QgsRasterDataProvider cuyo método ‘bandStatistics’ permite realizar la tarea. Ello es así porque este último los transforma, a su vez, en objetos de la clase QgsRasterBandStats donde existen varios procedimientos para acceder a las estadísticas más comunes.

El método ‘bandStatistics’ acepta 4 argumentos: la banda, el tipo enumerado correspondiente a la estadística a obtener (‘All’ para todas; ver código siguiente), la extensión del ráster (objeto de la clase QgsRectangle) y el número aproximado de celdas que se desea computar en las estadísticas. Para evitar problemas y ambigüedades se pueden utilizar sólo los dos primeros argumentos porque si se omiten los restantes las estadísticas, por defecto, abarcarán todo el ráster.

En el código se emplearán solo las estadísticas correspondientes a la obtención de mínimos y máximos de un ráster RGB; el cual tiene tres bandas (rojo, verde y azul). Se puede bajar de aquí: natural_earth.tif y luce de esta manera:

world1

El código a continuación incluye dos listas por comprensión para almacenar las estadísticas del ráster.

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

bands = renderer.usesBands()

min = [provider.bandStatistics(band, QgsRasterBandStats.All).minimumValue 
            for band in bands]

max = [provider.bandStatistics(band, QgsRasterBandStats.All).maximumValue 
            for band in bands]

print min
print max

Su ejecución en la Python Console de QGIS resulta en:

world2

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

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