python gdal 栅格影像拼接工具

先上代码

from osgeo import gdal, gdalconst, osr
import argparse
import os


if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        prog='raster files mosaic', description='对输入目录中的栅格影像进行拼接,要求这些影像具有相同的空间参考')
    parser.add_argument('inputDir', type=str, help='待拼接影像所在的栅格目录')
    parser.add_argument('destFile', type=str, help='拼接影像输出路径')
    parser.add_argument('--resampleAlg', type=int, default=0,
                        help='重采样方法:\n{}\n{}\n{}'.format('0:NearestNeighbour', '1:Bilinear', '2:Cubic'))
    parser.add_argument('--cutlineSHP', type=str, default='',
                        required=False, help='一个SHP文件用于裁剪拼接后的栅格影像')
    args = parser.parse_args()
    inputDir = args.inputDir
    destFile = args.destFile
    print(destFile)
    resampleAlg = args.resampleAlg
    cutlineSHP = args.cutlineSHP
    tifs = os.listdir(inputDir)
    tifs = list(filter(lambda fileName: fileName.endswith('.tif'), tifs))
    if len(tifs) == 0:
        print('栅格目录为空!')
        exit(0)
    tifs = [os.path.join(inputDir, tif) for tif in tifs]
    print(tifs)
    if cutlineSHP and os.path.exists(cutlineSHP) == False:
        print("裁剪SHP文件{}不存在!".format(cutlineSHP))
        exit()
    # 检查这些待拼接影像是否句有相同的空间参考
    gdal.AllRegister()
    osrs = []
    for tif in tifs:
        ds = gdal.Open(tif, gdalconst.GA_ReadOnly)
        osr_ = gdal.Dataset.GetSpatialRef(ds)
        osrs.append(osr_)
    osr_ = osrs[0]
    for osri in osrs:
        flag = osr.SpatialReference.IsSame(osr_, osri)
        if not(flag):
            print('待拼接的栅格影像必须有相同的空间参考!')
            exit(0)
    if resampleAlg == 0:
        resampleType = gdalconst.GRA_NearestNeighbour
    elif resampleAlg == 1:
        resampleType = gdalconst.GRA_Bilinear
    else:
        resampleType = gdalconst.GRA_Cubic
    if cutlineSHP:
        options = gdal.WarpOptions(
            srcSRS=osr_, dstSRS=osr_, format='GTiff', resampleAlg=resampleType, creationOptions=["COMPRESS=LZW"], cutlineDSName=cutlineSHP, cropToCutline=True)
    else:
        options = gdal.WarpOptions(
            srcSRS=osr_, dstSRS=osr_, format='GTiff', resampleAlg=resampleType, creationOptions=["COMPRESS=LZW"])
    gdal.Warp(destFile, tifs, options=options)
    print('处理完毕!')

使用说明

在这里插入图片描述
在这里插入图片描述

拼接处理结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值