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
基于Python获取多张影像的重叠范围并对影像进行裁剪
最新推荐文章于 2024-09-17 23:15:58 发布