Cómo grabar un ráster como imagen renderizada con PyQGIS

Cuando se carga, por ejemplo, un raster DEM a la Map View de QGIS observamos un renderizado basado en diferentes tonos de grises (del blanco al negro) porque este tipo de imagenes son ‘Single Band Gray’. Si en la propiedades de capa asignamos otro tipo de renderizado, como por ejemplo ‘Single Band Pseudocolor’ (rampa de color Spectral con 5 clases), éste persistirá en las imágenes grabadas sólo si seleccionamos en “Save As…” el modo de salida “Rendered Image” en lugar de “Raw data”.

Si se quiere reproducir este comportamiento usando la Python Console de QGIS, hay que usar un objeto de la clase QgsRasterPipe object (pipe) para clonar el renderer de la imagen correspondiente (establecida como capa activa) antes de emplear el método ‘writeRaster’ de la clase QgsRasterFileWriter. El código completo es el siguiente:

layer = iface.activeLayer()

extent = layer.extent()
width, height = layer.width(), layer.height()
renderer = layer.renderer()
provider=layer.dataProvider()
crs = layer.crs().toWkt()

pipe = QgsRasterPipe()
pipe.set(provider.clone())
pipe.set(renderer.clone())

file_writer = QgsRasterFileWriter('c:/pyqgis_scripts/output2.tif')

file_writer.writeRaster(pipe,
                        width,
                        height,
                        extent,
                        layer.crs())

Cargando nuestro DEM a la Map View de QGIS:

renderer3

Cuando establecemos el renderizado ‘Single Band Pseudocolor’ (rampa de color Spectral con 5 clases), se obtiene lo siguiente:

renderer4

Al ejecutar el código aquí propuesto en la Python Console se obtiene un archivo de salida, output2.tif, que es idéntico al original sample_dtm.tif. Esto ya se puede corroborar por anticipado observando las miniaturas de los rásteres en el cargador de la herramienta “Add Raster Layer” de la “Manager Layers Bar”; tal como se presenta en la imagen siguiente:

renderer2

Esta entrada fue publicada en Código Python, 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