You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 11:45:01