Cuando calculamos un índice vegetal, obtenemos una imagen con una sola banda. La representación con matplotlib es muy sencilla, está perfectamente preparado para mostrar ese tipo de matrices. Pero Leaflet no sabe representarlas, así que hemos de obtener el RGB para enviárselo con la representación que queremos usar.
TODO LO AQUÍ EXPLICADO QUEDA OBSOLETO TENIENDO RIO-TILER Y TITILER. MÁS INFO EN Petición Índice Vegetal.
comp_ndvi = ndvi(r_clipped[0], n_clipped[0])
plt.axis('off')
plt.savefig('foo.png', bbox_inches='tight', pad_inches=0.0)
Esta imagen es la figura representada quitándole todo margen, y luego le hemos de añadir el perfil de la imagen inicial de rasterio. Para guardar la transparencia como queremos también hemos de guardar el valor de la transparencia, porque si no guardar el valor máximo de la coficación que estemos gastando1.
with rasterio.open('/absolute/path/to/file.png', "w+", **profile | {'count': 4}) as dataset:
dataset.write(img_array[:, :, 0], 1)
dataset.write(img_array[:, :, 1], 2)
dataset.write(img_array[:, :, 2], 3)
dataset.write(img_array[:, :, 3], 4)
Las coordenadas son otro punto conflictivo.
Idealmente uint8. ↩︎