美文网首页
Python gdal warp函数 矢量裁剪 遥感影像投影变换

Python gdal warp函数 矢量裁剪 遥感影像投影变换

作者: 王叽叽的小心情 | 来源:发表于2022-05-23 11:25 被阅读0次

    gdal.Warp可以对栅格数据依据输入的矢量进行裁剪,还可以进行栅格重采样,重投影等操作,关键在于options的参数设置。Options的参数设置可以参见网址:https://gdal.org/python/,其中在左侧可以选择Warp和WarpOptions两个模块查看参数。

    1. Warp参数解释

    warp是扭曲或者变形的意思,该函数是对一个数据或者多个数据集进行变形,用法如下:

    Warp(destNameOrDestDS, srcDSOrSrcDSTab, **kwargs)

    参数包括:

    • destNameOrDestDS --- 输出数据集名称或对象
    • srcDSOrSrcDSTab --- 数据集对象或文件名的数组,或数据集对象或文件名的数组

    关键字参数是:

    • options --- 返回gdal.WarpOptions(),字符串或字符串数组
    • gdal.WarpOptions()的其他关键词参数

    如果选项是作为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)

    挨个对参数进行下解释。

    • options --- 可以是一个字符串数组,一个字符串或让空和填充从其他关键字。
    • format --- 输出格式(“GTiff”等)
    • outputBounds --- 在输出的空间参照系统中的输出边界(minX, minY, maxX, maxY)
    • outputBoundsSRS --- 表示输出边界的SRS以防它们没有在dstSRS中表示,其中SRS是spatial reference system的缩写,即空间参照系统
    • xRes, yRes --- 目标SRS的空间分辨率
    • targetAlignedPixels --- 是否强制输出边界为输出分辨率的倍数
    • width --- 输出光栅的像素宽度
    • height --- 输出光栅的像素高度
    • srcSRS --- 输入的 SRS
    • dstSRS --- 输出的 SRS
    • coordinateOperation -- 坐标操作是 PROJ string 或者是 WKT string
    • srcAlpha --- 是否强制将输入数据集的最后一个频带视为alpha频带
    • dstAlpha --- 是否强制创建输出波段
    • outputType --- 输出类型 (gdalconst.GDT_Byte, etc...)
    • workingType --- 操作类型 (gdalconst.GDT_Byte, etc...)
    • warpOptions --- warping options 列表
    • errorThreshold --- 近似转换器的误差阈值 (in pixels)
    • warpMemoryLimit --- 工作缓冲区的大小,以MB为单位
    • resampleAlg --- 重采样模式
    • creationOptions --- creation options 列表
    • srcNodata --- source nodata value(s)
    • dstNodata --- output nodata value(s)
    • multithread --- 是否多线程计算和I/O操作
    • tps --- 是否使用薄板样条GCP转换器
    • rpc --- 是否使用RPC转换器
    • geoloc --- 是否使用GeoLocation阵列转换器
    • polynomialOrder --- 多项式GCP插值阶
    • transformerOptions --- transformer options 列表
    • cutlineDSName --- 切割线的数据集的名称
    • cutlineLayer --- 切割线的图层名称
    • cutlineWhere --- 切割线的 WHERE 从句
    • cutlineSQL --- 切割线的 SQL 语句
    • cutlineBlend --- 以像素为单位的切割线混合距离
    • cropToCutline --- 是否使用切割线范围作为输出边界
    • copyMetadata --- 是否拷贝源元数据
    • metadataConflictValue --- 元数据数据冲突值
    • setColorInterpretation --- 是否强制输入波段的颜色解释到输出波段
    • overviewLevel --- 指定必须使用的源文件的概述级别
    • callback --- 回调函数
    • callback_data --- 用于回调的用户数据
    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
    
    ds = gdal.Warp(tif_out, tif_input, resampleAlg=gdalconst.GRA_NearestNeighbour, xRes=500, yRes=500)
    
    

    至此,栅格数据(如遥感影像)的裁剪、重投影、重采样都可以用Warp函数实现,而且可以在同一个函数下实现所有的操作,只需要把各个options放在一起即可。

    初次使用gdal完毕,撒花~

    相关文章

      网友评论

          本文标题:Python gdal warp函数 矢量裁剪 遥感影像投影变换

          本文链接:https://www.haomeiwen.com/subject/fglhprtx.html