1. 读取 TIFF 格式文件(主要是GeoTiff)
from osgeo import gdal
data = gdal.Open("文件地址")
im_width = data.RasterXSize
im_height = data.RasterYSize
im_bands = data.RasterCount
"""
GeoTransform 的含义:
影像左上角横坐标:im_geotrans[0],对应经度
影像左上角纵坐标:im_geotrans[3],对应纬度
遥感图像的水平空间分辨率(纬度间隔):im_geotrans[5]
遥感图像的垂直空间分辨率(经度间隔):im_geotrans[1]
通常水平和垂直分辨率相等
如果遥感影像方向没有发生旋转,即上北下南,则 im_geotrans[2] 与 im_geotrans[4] 为 0
计算图像地理坐标:
若图像中某一点的行数和列数分别为 row 和 column,则该点的地理坐标为:
经度:xGeo = im_geotrans[0] + row * im_geotrans[1] + column * im_geotrans[2]
纬度:yGeo = im_geotrans[3] + row * im_geotrans[4] + column * im_geotrans[5]
"""
im_geotrans = data.GetGeoTransform()
im_proj = data.GetProjection()
"""
GetRasterBand(bandNum),选择要读取的波段数,bandNum 从 1 开始
ReadAsArray(xoff, yoff, xsize, ysize),一般就按照下面这么写,偏移量都是 0 ,返回 ndarray 数组
"""
im_data = data.GetRasterBand(1).ReadAsArray(xoff=0, yoff=0, xsize=im_width, ysize=im_height)
2. 写出GeoTiff文件
from osgeo import gdal
driver = gdal.GetDriverByName("GTiff")
output = driver.Create("文件地址", im_width, im_height, 1, gdal.GDT_Float32)
output.SetGeoTransform(im_geotrans)
output.SetProjection(im_proj)
output.GetRasterBand(1).WriteArray(array)
del output