¿Agregar banda a GeoTiff existente utilizando GDAL?

15

Parece que debería ser sencillo, pero no puedo por mi vida resolverlo.

Dado que un GeoTiff existente contiene una sola banda, ¿cómo se puede agregar otra banda a ese GeoTiff? ¿Es la única forma de hacer esto utilizando GDALCreate () para crear un nuevo archivo de salida con una banda adicional y luego copiar la banda existente del archivo original al nuevo archivo? Esa es la única solución que he encontrado hasta ahora, pero parece que debería haber una forma sencilla de agregar una banda al conjunto de datos existente.

    
pregunta TheOx 01.02.2013 - 00:30

2 respuestas

8

La solución, si el controlador lo soporta, es llamar a GDALOpen () con GA_Update access y luego usar < a href="http://www.gdal.org/gdal_8h.html#ab9f3202c4f0c4accefe6724e3a8829a8"> GDALAddBand o . Sin embargo, el controlador geotiff no es compatible con AddBand.

    
respondido por el Luke 01.02.2013 - 01:21
8

Para ampliar la respuesta de Luke y proporcionar un ejemplo concreto en Python, aquí hay un fragmento que agrega una banda alfa a un ráster de origen y la guarda como un PNG.

from osgeo import gdal

src_ds = gdal.OpenShared(input_path)
mask_ds = gdal.OpenShared(mask_path)
mask = mask_ds.GetRasterBand(1).ReadAsArray()

tmp_ds = gdal.GetDriverByName('MEM').CreateCopy('', src_ds, 0)
tmp_ds.AddBand()
tmp_ds.GetRasterBand(4).WriteArray(mask)

dst_ds = gdal.GetDriverByName('PNG').CreateCopy(output_path, tmp_ds, 0)
del dst_ds

Utilicé el controlador MEM en lugar de VRT ya que este último no admite WriteRaster() y WriteArray() (error "No se admite la escritura a través de VRTSourcedRasterBand."). El uso del controlador vrt podría seguir siendo posible a través de otros métodos, supongo.

    
respondido por el Martin Valgur 17.03.2016 - 16:56

Lea otras preguntas en las etiquetas