GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。Python的GDAL库作为栅格数据的处理转换库,其支持几百种栅格数据格式,如常见的TIFF、ENVI、HFA、HDF4等。因为遥感影像大部分都是栅格数据,所以GDAL库非常适合处理遥感影像、如光谱指数计算、波段合成、批量下载等。

今天主要给大家介绍一下GDAL库中的Warp函数,这个函数非常强大。它可以实现裁剪、重采样、几何校正、转换格式、投影转换、查看处理进度等等操作。学习GDAL不得不好好学习一下Warp函数,了解其中的参数要求。

# -*- coding: utf-8 -*-"""@Time : 2023/8/14 9:31@Auth : RS迷途小书童@File :Introduction to Warp Function.py@IDE :PyCharm@Purpose :Warp函数介绍"""from osgeo import gdal,osr,ogr# --------------------------主函数--------------------------gdal.Warp(destNameOrDestDS, srcDSOrSrcDSTab, **kwargs)# destNameOrDestDS ---> 输出数据集路径或对象# srcDSOrSrcDSTab ---> 输入数据集对象或文件名的数组# 关键字参数是gdal.WarpOptions()的返回值,或者直接定义gdal.WarpOptions()# --------------------------参数介绍--------------------------gdal.WarpOptions(options=[], format='GTiff', outputBounds=None, outputBoundsSRS=one, xRes=None, yRes=None, targetAlignedPixels=False, width=0, height=0, srcSRS=None, dstSRS=None, srcAlpha=False, dstAlpha=False, warpOptions=None, errorThreshold=None, warpMemoryLimit=None, creationOptions=None, outputType=GDT_Unknown, workingType=GDT_Unknown, resampleAlg=None, srcNodata=None, dstNodata=None, multithread=False, tps=False, rpc=False, geoloc=False, polynomialOrder=None, transformerOptions=None, cutlineDSName=None, cutlineLayer=None, cutlineWhere=None, cutlineSQL=None, cutlineBlend=None, ropToCutline=False, copyMetadata=True, metadataConflictValue=None, setColorInterpretation=False, callback=None, callback_data=None):# options ---> 字符串数组, 字符串或者空值# format ---> 输出格式 ("GTiff", "HFA", "ENVI", etc...)# outputBounds ---> 结果在目标空间参考的边界范围(minX, minY, maxX, maxY)# outputBoundsSRS ---> 结果边界范围的空间参考, 如果在dstSRS中没有指定的话,采用此参数# xRes, yRes ---> 输出分辨率,即像素的大小# targetAlignedPixels ---> 是否强制输出边界是输出分辨率的倍数# width ---> 输出栅格的列数# height ---> 输出栅格的行数# srcSRS ---> 输入数据集的空间参考# dstSRS ---> 输出数据集的空间参考# srcAlpha ---> 是否将输入数据集的最后一个波段作为alpha波段# dstAlpha ---> 是否强制创建输出# outputType ---> 输出栅格的变量类型 (gdal.GDT_Byte, etc...)# workingType ---> working type (gdal.GDT_Byte, etc...)# warpOptions ---> list of warping options变形选项列表# errorThreshold ---> 近似转换的误差阈值(误差像素数目)# warpMemoryLimit ---> 工作内存限制 Bytes# resampleAlg ---> 重采样方法# creationOptions ---> list of creation options创建选项列表# srcNodata ---> 输入栅格的无效值(最好是0,可以忽略背景值)# dstNodata ---> 输出栅格的无效值# multithread ---> 是否多线程和I/O操作# tps ---> 是否使用Thin Plate Spline校正方法# rpc ---> 是否使用RPC校正# geoloc ---> 是否使用地理查找表校正# polynomialOrder ---> 几何多项式校正次数# transformerOptions ---> list of transformer options转换参数# cutlineDSName ---> cutline数据集名称(矢量数据)# cutlineLayer ---> cutline图层名称# cutlineWhere ---> cutline WHERE 子句# cutlineSQL ---> cutline SQL语句# cutlineBlend ---> 以像素为单位的剪切线混合距离# cropToCutline ---> 是否使用切割线(矢量)范围作为输出边界# copyMetadata ---> 是否复制元数据# metadataConflictValue ---> 元数据冲突值# setColorInterpretation ---> 是否强制将输入栅格颜色表给输出栅格# callback ---> 回调函数(用来返回执行进度)# callback_data ---> 回调的用户数据

本次博文主要分享了Warp函数的参数设置,同时后面都给了注释。括号部分是我自己实验后的小技巧,Warp函数总体来说非常强大,但有很多东西需要自己去尝试,只有不断的报错,不断地修复,编程能力才会提升!

如果大家在学习Python或者RS时有什么问题,可以随时留言交流!如果大家对批量处理有兴趣同样可以留言给博主,博主会分享相关代码以供学习!