def writeTiff(im_data, im_geotrans, im_proj, path):
'''
保存tif文件函数
'''
if 'int8' in im_data.dtype.name:
datatype = gdal.GDT_Byte
elif 'int16' in im_data.dtype.name:
datatype = gdal.GDT_Int16
else:
datatype = gdal.GDT_Float32
if len(im_data.shape) == 3:
im_bands, im_height, im_width = im_data.shape
elif len(im_data.shape) == 2:
im_data = np.array([im_data])
im_bands, im_height, im_width = im_data.shape
# 创建文件
# dat格式需要将GTiff改成ENVI,保存文件名直接命名为dat
driver = gdal.GetDriverByName("ENVI")
dataset = driver.Create(path, int(im_width), int(
im_height), int(1), datatype) # 写入波段数:此时定义为1[W波段只用不保存]
if(dataset != None):
dataset.SetGeoTransform(im_geotrans) # 写入仿射变换参数
dataset.SetProjection(im_proj) # 写入投影
for i in range(im_bands):
dataset.GetRasterBand(i+1).WriteArray(im_data[i])
del dataset
if __name__=='__main__':
tifNameList = os.listdir(tifFolder)
tifPath = tifFolder + "/" + tifNameList[0]
# 试读入第一个tif,为获取tif的基本信息
dataset = readTif(tifPath)
width = dataset.RasterXSize # 栅格矩阵的列数
height = dataset.RasterYSize # 栅格矩阵的行数
Tif_geotrans = dataset.GetGeoTransform()
Tif_proj = dataset.GetProjection()
# 数据波段
for i in range(len(tifNameList)):
tifPath = tifFolder + "/" + tifNameList[i]
dataset = readTif(tifPath)
ndvi_band = dataset.GetRasterBand(1) # 数据波段
ndvi = ndvi_band.ReadAsArray(0, 0, width, height)
SavePath = "./data/modis_dat/" + \
os.path.splitext(tifNameList[i])[0]+".dat"
writeTiff(ndvi, Tif_geotrans, Tif_proj, SavePath)
del tifPath, dataset, ndvi_band
python gdal迭代写为ENVI的dat格式
最新推荐文章于 2023-11-07 19:19:30 发布