19 votos

¿Añadir banda a un GeoTiff existente mediante GDAL?

Parece que debería ser sencillo, pero no consigo entenderlo.

Dado un GeoTiff existente que contiene una sola banda, ¿cómo se puede añadir otra banda a ese GeoTiff? ¿La única manera de hacerlo es utilizar 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 se me ha ocurrido hasta ahora, pero parece que debería haber una forma sencilla de añadir una banda al conjunto de datos existente.

12voto

Mark H Puntos 2378

Para ampliar la respuesta de Luke y proporcionar un ejemplo concreto en Python, aquí hay un fragmento que añade una banda alfa a un raster de origen y lo 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 MEM en lugar de VRT ya que este último no admite WriteRaster() y WriteArray() (error "Writing through VRTSourcedRasterBand is not supported."). El uso del controlador vrt todavía podría ser posible a través de algunos otros métodos, supongo.

10voto

Lucas Puntos 128

La solución, si el controlador lo admite, es llamar a GDALOpen() con el acceso GA_Update, entonces utilice GDALAddBand o GDALDataset::AñadirBanda . Sin embargo, el controlador Geotiff no admite AddBand.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X