当前位置:   article > 正文

『GDAL』读写TIFF文件_gdal读取tif

gdal读取tif

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

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  # 刷新缓存
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/329872
推荐阅读
相关标签
  

闽ICP备14008679号