基于GDAL的TIFF数据读取、保存与投影信息处理2

概要

在地理信息系统(GIS)和遥感领域中,TIFF(Tagged Image File Format)文件是一种常用的图像文件格式,它支持多种图像压缩,并包含丰富的地理空间信息。GDAL(Geospatial Data Abstraction Library)是一个强大的库,用于读写多种格式的地理空间数据。本文将介绍如何使用GDAL在Python中读取TIFF文件的数据和投影信息,并将数据保存为新的GeoTIFF文件。

读取TIFF文件的数据

首先,我们需要定义一个函数来读取TIFF文件中的数据。这个函数将打开TIFF文件,读取第一个波段的数据,并返回一个NumPy数组。

from osgeo import gdal  
  
def get_tif_array(tif_file):  
    """  
    读取TIFF文件的数据并返回为一个NumPy数组。  
  
    :param tif_file: TIFF文件的路径。  
    :return: TIFF文件第一个波段的数据(NumPy数组)或None(如果发生错误)。  
    """  
    try:  
        # 打开TIFF文件  
        dataset = gdal.Open(tif_file, gdal.GA_ReadOnly)  
  
        if dataset is None:  
            raise Exception("无法打开 TIFF 文件")  
  
        # 获取第一个波段的数据并存储在数组中  
        band = dataset.GetRasterBand(1)  
        band_data = band.ReadAsArray()  
  
        # 关闭数据集  
        del dataset  # 更优的做法是使用del来确保对象被正确释放  
  
        # 返回波段数据的NumPy数组  
        return band_data  
  
    except Exception as e:  
        print(f"获取 TIFF 数据数组时发生错误:{str(e)}")  
        return None

读取TIFF文件的投影和仿射信息

接下来,我们需要定义另一个函数来读取TIFF文件的投影和仿射变换信息。这些信息对于理解数据的地理位置和进行空间分析至关重要。

from osgeo import osr  
  
def get_tif_projection(file):  
    """  
    获取TIFF文件的投影和仿射信息。  
  
    :param file: TIFF文件的路径。  
    :return: 一个元组,包含投影信息(字符串)和仿射信息(元组)。  
    """  
    tifData = gdal.Open(file)  
    projection = tifData.GetProjection()  
    geotransform = tifData.GetGeoTransform()  
  
    # 关闭数据集  
    del tifData  
  
    return projection, geotransform

保存数据为GeoTIFF文件

最后,我们定义一个函数来将NumPy数组保存为GeoTIFF文件,并指定其投影和仿射信息。

def save_array_tif(tifArray, out_Path, projection_info, geotransform_info):  
    """  
    将NumPy数组保存为GeoTIFF文件,并指定其投影和仿射信息。  
  
    :param tifArray: 要保存的NumPy数组。  
    :param out_Path: 输出GeoTIFF文件的路径。  
    :param projection_info: 目标投影坐标系信息的Proj4字符串或WKT字符串。  
    :param geotransform_info: 仿射变换信息的元组(六个参数)。  
    :return: 输出文件的路径。  
    """  
    rows, cols = tifArray.shape  
    driver = gdal.GetDriverByName('GTiff')  
    dataset = driver.Create(out_Path, cols, rows, 1, gdal.GDT_Float32)  
  
    # 设置仿射变换信息  
    dataset.SetGeoTransform(geotransform_info)  
  
    # 设置投影信息  
    if 'PROJCS' in projection_info:  # 假设projection_info是WKT  
        dataset.SetProjection(projection_info)  
    else:  # 假设projection_info是Proj4字符串  
        srs = osr.SpatialReference()  
        srs.ImportFromProj4(projection_info)  
        dataset.SetProjection(srs.ExportToWkt())  
  
    # 将数组数据写入GeoTIFF文件  
    dataset.GetRasterBand(1).WriteArray(tifArray)  
  
    # 确保数据写入磁盘  
    dataset.FlushCache()  
  
    # 关闭数据集  
    del dataset  
  
    return out_Path

小结

以上三个函数展示了如何使用GDAL在Python中处理TIFF文件的基本操作:读取数据、读取投影和仿射信息、以及保存数据为新的GeoTIFF文件。这些函数可以轻松地集成到更复杂的GIS或遥感数据处理流程中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值