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时有什么问题,可以随时留言交流!如果大家对批量处理有兴趣同样可以留言给博主,博主会分享相关代码以供学习!