如何使用GDAL与Ubuntu Shell脚本批量处理多幅栅格影像?
GDAL多幅栅格影像处理Shell脚本优化
原脚本存在的问题
- 变量赋值直接使用
ls匹配文件名,存在多文件匹配时异常、空匹配报错的风险 - 条件判断语法错误:方括号
[]前后缺少必要空格,会触发命令不存在报错 - 遍历逻辑冗余:每匹配到一次PAN或MUX文件就会重复执行一次全量处理流程,重复计算浪费资源
- 变量输出语法错误:单引号包裹的内容不会解析Shell变量,无法输出实际文件名
- 未加异常判断:如果某一步gdal命令执行失败,后续步骤会继续执行,生成无效文件
修复后的完整脚本
# 启用glob匹配,空匹配时不返回通配符本身 shopt -s nullglob # 匹配PAN和MUX文件 pan_files=(*-PAN.tiff) mux_files=(*-MUX.tiff) # 检查文件是否存在 if [ ${#pan_files[@]} -eq 0 ] || [ ${#mux_files[@]} -eq 0 ]; then echo "未找到匹配的PAN或MUX影像文件" exit 1 fi # 逐对处理(支持多组影像,一组对应一个PAN和一个MUX) for idx in "${!pan_files[@]}"; do pan=${pan_files[$idx]} mux=${mux_files[$idx]} echo "开始处理配对影像:PAN=$pan, MUX=$mux" # 正射校正 gdalwarp -wo "SAMPLE_GRID=NO" -et 0 -rpc -to RPC_DEM=./DEM_30M.tif "$mux" "ortho_$mux" || { echo "MUX正射校正失败"; continue; } gdalwarp -wo "SAMPLE_GRID=NO" -et 0 -rpc -to RPC_DEM=./DEM_30M.tif "$pan" "ortho_$pan" || { echo "PAN正射校正失败"; continue; } # 投影转换为WGS84 gdalwarp -t_srs "EPSG:4326" -dstalpha "ortho_$pan" "of_$pan" || { echo "PAN投影转换失败"; continue; } echo "生成PAN投影文件:of_$pan" gdalwarp -t_srs "EPSG:4326" -dstalpha "ortho_$mux" "of_$mux" || { echo "MUX投影转换失败"; continue; } echo "生成MUX投影文件:of_$mux" # 全色锐化 gdal_pansharpen.py -b 1 -b 2 -b 3 "of_$pan" "of_$mux" "pansharpened_$pan" || { echo "全色锐化失败"; continue; } # 无效值处理 gdalwarp -t_srs "EPSG:4326" -dstnodata 0 -dstalpha -of Gtiff "pansharpened_$pan" "nob_pansharpened_$pan" || { echo "无效值处理失败"; continue; } echo "影像$pan处理完成" done
优化点说明
- 采用数组存储匹配到的文件名,支持多组PAN/MUX影像批量处理
- 增加文件存在校验、每步命令执行异常校验,避免无效执行
- 所有变量引用添加双引号包裹,避免文件名带空格时执行异常
- 去掉冗余的循环判断逻辑,配对文件只处理一次
内容的提问来源于stack exchange,提问作者Zuchi Selengemurun
相关产品推荐
相关产品推荐

