То, как я бы это сделал, просто создать новую копию растра шаблона с новыми значениями ... Если вы хотите избежать копий любой ценой, вы также можете перезаписать. Но создание копии менее подвержено ошибкам, и вы можете сохранить оригинал.
Эта функция предполагает, что у вас есть массив arr
, который имеет три полосы в третьем измерении (поэтому 2-я ось).
import gdal
def createRGB(template,arr,filename):
'''Creates a copy of a 3-band raster with values from array
Arguments:
template: Path to template raster
arr: Value array with dimensions (r,c,3)
filename: Output filename for new raster
'''
# Open template
t = gdal.Open(template)
# Get geotiff driver
driver = gdal.GetDriverByName('GTiff')
# Create new raster
r = driver.Create(filename, t.RasterXSize, t.RasterYSize, 3, gdal.GDT_Byte,['COMPRESS=LZW'])
# Set metadata
r.SetGeoTransform(t.GetGeoTransform())
r.SetProjection(t.GetProjection())
# loop through bands and write new values
for bix in range(3):
rb = self.raster.GetRasterBand(bix+1)
# Write array
rb.WriteArray(arr[...,bix])
# Close datasets
t = None
r = None
rb = None