编写一个批量改投影并裁剪栅格数据的代码
时间: 2024-12-10 14:56:04 浏览: 21
gdal裁剪tif_tif遥感图像_GDAL裁剪_遥感影像_GDAL_gdal批量裁剪_
5星 · 资源好评率100%
批量修改投影并裁剪栅格数据通常是在地理信息系统(GIS)环境中进行的一项任务,比如使用Python的GDAL库。下面是一个简单的示例,演示如何使用GDAL库处理地理图像文件:
```python
import os
from osgeo import gdal
def process_raster(input_dir, output_dir, new_projection='WGS84', x_min=-180, y_min=-90, x_max=180, y_max=90):
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 获取输入目录下的所有栅格文件
raster_files = [os.path.join(input_dir, f) for f in os.listdir(input_dir) if f.endswith('.tif') or f.endswith('.img')]
for raster_file in raster_files:
# 打开栅格文件
ds = gdal.Open(raster_file)
# 检查投影
old_projection = ds.GetProjection()
if old_projection != new_projection:
# 如果投影不同,则转换
transform = gdal.Transformer(ds.GetSpatialRef(), 'EPSG:{}'.format(new_projection))
ds = transform.TransformDataset()
# 裁剪数据
x_size, y_size = ds.RasterXSize, ds.RasterYSize
gt = ds.GetGeoTransform()
min_x, min_y = gt[0] + x_min * gt[1], gt[3] + y_max * gt[5]
max_x, max_y = gt[0] + x_max * gt[1], gt[3] + y_min * gt[5]
dst_transform = (min_x, gt[1], 0, max_y, 0, -gt[5])
driver = gdal.GetDriverByName('GTiff')
out_filename = os.path.join(output_dir, os.path.basename(raster_file))
cropped_ds = driver.CreateCopy(out_filename, ds, options=['COMPRESS=LZW'], srcWin=(int(min_x), int(max_y), int(x_size), int(y_size)), transform=dst_transform)
# 关闭文件
ds = None
cropped_ds = None
print("完成处理 {} 中的所有栅格文件".format(input_dir))
# 使用函数
process_raster('/path/to/input/folder', '/path/to/output/folder', new_projection='EPSG:4326', x_min=-180, y_min=-90, x_max=180, y_max=90)
```
这个脚本会遍历指定输入目录下的所有.tif或.img文件,检查其投影,如果需要则转换,然后按给定的坐标范围进行裁剪,并保存到输出目录。
阅读全文