【记录】python使用gdal将二维numpy数组转换为单波段tiff格式

import gdal
import numpy as np 

filename = 'LST_250_202108'
data = np.load(filename + '.npy')
print(data.shape)

# 创建tif文件
driver = gdal.GetDriverByName('GTiff')
# 维度和numpy数组相反
new_dataset = driver.Create(filename + '.tif', data.shape[1], data.shape[0], 1, gdal.GDT_Float32) 

# 读取之前的tif信息,为新生成的tif添加地理信息
# 如果不增加这一步,则生成的图片没有经纬度坐标、投影的信息
origin_dataset = gdal.Open('2019193_WGS.tif')
# 获取投影信息
origin_proj = origin_dataset.GetProjection()
new_dataset.SetProjection(origin_proj)
# 仿射矩阵
origin_geotrans = origin_dataset.GetGeoTransform()
new_dataset.SetGeoTransform(origin_geotrans)

band = new_dataset.GetRasterBand(1)
band.WriteArray(data)
print(new_dataset)
new_data = new_dataset.ReadAsArray()
print(new_data)

ReadAsArray()针对dataset和band有两种方式:
针对dataset:

ReadAsArray(xoff=0, yoff=0, xsize=None, ysize=None, buf_obj=None, buf_xsize=None, buf_ysize=None, buf_type=None, resample_alg=0, callback=None, callback_data=None, interleave='band')
# method of osgeo.gdal.Dataset instance
# Reading a chunk of a GDAL band into a numpy array.
# The optional (buf_xsize,buf_ysize,buf_type)
# parameters should generally not be specified if buf_obj is specified.

其中:
xoff, yoff: 指定想要读取的部分原点位置在整张图像中距离全图原点的位置(以像元为单位)
xsize, ysize: 指定要读取部分图像的矩形的长和宽(以像元为单位)
buf_xsize, buf_ysize: 可以在读取出一部分图像后进行缩放。那么就用这两个参数来定义缩放后图像最终的宽和高,gdal将帮你缩放到这个大小。
buf_type: 可以对读出的数据的类型进行转换(比如原图数据类型是short,你要把它们缩小成byte)。
band_list: 适应多波段的情况。可以指定要读取的波段。

针对band:

# Reading a chunk of a GDAL band into a numpy array.

ReadAsArray(self, xoff=0, yoff=0, win_xsize=None, win_ysize=None, buf_xsize=None, buf_ysize=None, buf_type=None, buf_obj=None, resample_alg = GRIORA_NearestNeighbour, callback = None, callback_data = None):

你可能感兴趣的:(Records,python,numpy)