gdal.Warp可以对栅格数据依据输入的矢量进行裁剪,还可以进行栅格重采样,重投影等操作,关键在于options的参数设置。Options的参数设置可以参见网址: https://gdal.org/python/ ,其中在左侧可以选择Warp和WarpOptions两个模块查看参数。
1. Warp参数解释
warp是扭曲或者变形的意思,该函数是对一个数据或者多个数据集进行变形,用法如下:
Warp(destNameOrDestDS, srcDSOrSrcDSTab, **kwargs)
参数包括:
关键字参数是:
如果选项是作为gdal.WarpOptions()对象提供的,则会忽略其他关键字。
2. WarpOptions参数解释(可以略过,直接看代码实例)
warp工具实现的关键在于参数options的设置, WarpOptions的功能即是创建一个可以传递给gdal.Warp()的WarpOptions()对象。下面分析WarpOptions参数,其参数较多,如下所示:
WarpOptions(options=None, format=None, outputBounds=None, outputBoundsSRS=None, xRes=None, yRes=None, targetAlignedPixels=False, width=0, height=0, srcSRS=None, dstSRS=None, coordinateOperation=None, srcAlpha=False, dstAlpha=False, warpOptions=None, errorThreshold=None, warpMemoryLimit=None, creationOptions=None, outputType=gdalconst.GDT_Unknown, workingType=gdalconst.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, cropToCutline=False, copyMetadata=True, metadataConflictValue=None, setColorInterpretation=False, overviewLevel='AUTO', callback=None, callback_data=None)
挨个对参数进行下解释。
3. 栅格数据矢量裁剪(批量)
在矢量裁剪中,主要用到的是cutline相关的参数,包括切割后的数据集(cutlineDSName),切割图层(cutlineLayer ),是否使用切割线范围作为输出边界(cropToCutline)等,下面展示实例代码。
from osgeo import gdal
ds = gdal.Warp(tif_out, tif_input, format='GTiff', cutlineDSName=shp_boundary, cropToCutline=True, dstNodata=0)
4. 遥感影像重投影
对坐标系进行重投影也很简单,主要是坐标系的设置,如果是非标准的自定义的坐标系,可以参见方法ESRI中WKT格式的空间投影坐标转换为GDAL中的Proj4格式转化为proj4的格式。具体实例代码如下:
from osgeo import gdal
ds = gdal.Warp(tif_out, tif_input, srcSRS='EPSG:4326', dstSRS=srs_proj4) # srs_proj4是自定义的坐标系
5. 遥感影像重采样(修改分辨率)
栅格数据或者说遥感影像的重采样也比较简单,重采样方法的确定在gdal中可以通过ReprojectImage()函数查看,参见https://gdal.org/python/。
采用Warp函数的话,主要修改的resampleAlg参数,默认的最近邻重采样方法,查看源码发现其他可选参数如下。具体重采样方法的差异不再赘述。
if resampleAlg is not None:
mapMethodToString = {
gdalconst.GRA_NearestNeighbour: 'near',
gdalconst.GRA_Bilinear: 'bilinear',
gdalconst.GRA_Cubic: 'cubic',
gdalconst.GRA_CubicSpline: 'cubicspline',
gdalconst.GRA_Lanczos: 'lanczos',
gdalconst.GRA_Average: 'average',
gdalconst.GRA_RMS: 'rms',
gdalconst.GRA_Mode: 'mode',
gdalconst.GRA_Max: 'max',
gdalconst.GRA_Min: 'min',
gdalconst.GRA_Med: 'med',
gdalconst.GRA_Q1: 'q1',
gdalconst.GRA_Q3: 'q3',
gdalconst.GRA_Sum: 'sum',
代码如下:
from osgeo import gdal