基于Python获取多张影像的重叠范围并对影像进行裁剪

from osgeo import gdal, ogr
import os

# 定义影像文件列表
input_images = [r'F:\Solar_Radiance\BSRN_SSR\MODIS\MOD04\AOD\MOD04_L2.A2022311.0200.061.2022335135041_Swath_3D_1_1_georef.dat.tif', 
                r'F:\Solar_Radiance\BSRN_SSR\MODIS\MOD07\TIFF\MOD07_L2.A2022311.0200.061.2022335040302_Swath_2D_1_georef.dat.tif', 
                r'F:\Solar_Radiance\BSRN_SSR\MODIS\MODATML2\TIFF\MODATML2.A2022311.0200.061.2022335140254_Swath_2D_1_georef.dat.tif']

# 打开第一张影像文件
ds = gdal.Open(input_images[0])

# 获取第一张影像文件的地理变换信息和投影信息
gt = ds.GetGeoTransform()
proj = ds.GetProjection()

# 获取第一张影像文件的范围
xmin = gt[0]
ymax = gt[3]
xmax = gt[0] + gt[1] * ds.RasterXSize
ymin = gt[3] + gt[5] * ds.RasterYSize

# 循环遍历所有影像文件,找到它们的交集
for i in range(1, len(input_images)):
    ds = gdal.Open(input_images[i])
    gt = ds.GetGeoTransform()

    # 计算影像文件的范围
    xmin = max(xmin, gt[0])
    ymax = min(ymax, gt[3])
    xmax = min(xmax, gt[0] + gt[1] * ds.RasterXSize)
    ymin = max(ymin, gt[3] + gt[5] * ds.RasterYSize)

# 定义裁剪区域
ulx = xmin
uly = ymax
lrx = xmax
lry = ymin

resample_alg = gdal.GRA_Bilinear
dst_root = r'F:\Solar_Radiance\BSRN_SSR\MODIS\Common_boundry\results'
# 循环遍历所有影像文件,对其进行裁剪
for i in range(len(input_images)):
    input_image = input_images[i]
    output_image = os.path.join(dst_root, "clipped_" + os.path.basename(input_image))
    
    ds = gdal.Open(input_image)
    gt = ds.GetGeoTransform()
    # 计算影像的空间分辨率
    xres_temp = gt[1]
    #判断影像的分辨率是否为5000,若是则不进行重采样,若不是则进行重采样
    if xres_temp != 5000 :
        gdal.Warp(output_image, ds, xRes=5000, yRes=5000, resampleAlg=resample_alg, outputBounds=[ulx, lry, lrx, uly], cropToCutline=True)
    else:
        gdal.Warp(output_image, ds, outputBounds=[ulx, lry, lrx, uly], cropToCutline=True)
    ds = None

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值