Estoy tratando de crear un archivo .tif usando GDAL en python. Está creando un archivo, pero diciendo "no hay vista previa disponible" cada vez que lo busco. En este momento, solo intento que haga una copia del archivo de entrada. Aquí está mi código:GDAL Raster Output
gdal.AllRegister()
inDs = gdal.Open("C:\\Documents and Settings\\patrick\\Desktop\\tiff elevation\\EBK1KM\\color_a2.tif")
if inDs is None:
print 'Could not open image file'
sys.exit(1)
else:
print "successfully opened input file"
rows = inDs.RasterYSize
cols = inDs.RasterXSize
myband = inDs.GetRasterBand(1)
elev_data = myband.ReadAsArray(0,0,cols,rows)
driver = inDs.GetDriver()
outDs = driver.Create('C:\\Documents and Settings\\patrick\\Desktop\\tiff elevation\\EBK1KM\\new.tif', cols, rows, 1, GDT_Int32)
if outDs is None:
print "couldn't open output file"
sys.exit(1)
outBand = outDs.GetRasterBand(1)
outData = numpy.zeros((rows,cols),numpy.int16)
outBand.WriteArray(elev_data)
outBand.FlushCache()
outBand.SetNoDataValue(-99)
outDs.SetGeoTransform(inDs.GetGeoTransform())
outDs.SetProjection(inDs.GetProjection())
del outData
actualización ============================ ====== ============================= hizo algunos descubrimientos ... He estudiado formas de convertir de un formato numérico a otro usando la normalización estadística. He procesado los datos de entrada y lo transformó a uint8 utilizando el siguiente algoritmo:
std = elev_data.std() #standard dev
avg = elev_data.mean()
arr = numpy.zeros((rows,cols),numpy.uint8)
for _i_ in _range_(_rows_):
for _j_ in _range_(_cols_):
arr[i,j] = (((out_elev[i,j]-avg)/std)*127)+128 #normalization formula
#this puts all vals in range 1 to 255 (uint8)
dr = gdal.GetDriverByName("GTiff")
outDs = dr.Create("name",cols,rows,3,GDT_Byte)
#creates and RGB file, accepts uint8 for input
outDs.GetRasterBand(1).WriteArray(arr) #write the output as shades of red
#this writes out a format viewable by microsoft products
la razón principal que quería copiar era demostrar que podía leer en, a continuación, escriba los datos actualizados sobre la base de cálculos.
¿Cuál podría ser una forma en que podría escribir los datos de salida utilizando una rampa de color, en lugar de tonos de un solo color?
Descubrí mi problema: no tenía un visor adecuado para el tipo de archivo de salida que estaba creando. Int16 no es compatible con productos de microsoft para su visualización. Descargué e instalé Brava Reader, y puedo ver la mayoría de las formas de salida que puedo generar. – Pat