『GDAL』读写TIFF文件

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()  # 获取仿射矩阵,含有 6 个元素的元组

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)  # 1 是写死的,表示输出一个波段

output.SetGeoTransform(im_geotrans)  # 一般不用自己创建,读取文件里提取出来传入即可
output.SetProjection(im_proj)  # 一般不用自己创建,读取文件里提取出来传入即可
output.GetRasterBand(1).WriteArray(array)  # 选取第一个波段,将数据写入,这里array是二维数组

del output  # 刷新缓存

你可能感兴趣的:(python,gdal,tiff)