OpenClaw完成栅格擦除```python# -*- coding: utf-8 -*-"""使用矢量数据擦除栅格将矢量范围内的栅格值设置为 NoData"""import arcpyimport osfrom arcpy.sa import *# 检查 Spatial Analyst 扩展arcpy.CheckOutExtension("Spatial")# 设置环境变量arcpy.env.overwriteOutput = Truearcpy.env.workspace = r"E:\2026\Pro\data\data\chp13\栅格分析\栅格擦除.gdb"# 数据路径gdb_path = r"E:\2026\Pro\data\data\chp13\栅格分析\栅格擦除.gdb"vector_fc = os.path.join(gdb_path, r"m") # 矢量数据raster_ds = os.path.join(gdb_path, r"tt") # 栅格数据# 输出路径(先保存到 GDB,再复制为 TIF)output_dir = r"C:\Users\yl\Desktop\GIS"output_gdb = os.path.join(gdb_path, "result_temp")output_path = os.path.join(output_dir, "1.tif")# 创建输出目录if not os.path.exists(output_dir): os.makedirs(output_dir)print("矢量数据:", vector_fc)print("栅格数据:", raster_ds)print("输出路径:", output_path)# 检查数据if not arcpy.Exists(vector_fc): print("错误:矢量数据不存在") exit(1)if not arcpy.Exists(raster_ds): print("错误:栅格数据不存在") exit(1)# 获取原始栅格ras = Raster(raster_ds)# 设置环境arcpy.env.snapRaster = raster_dsarcpy.env.cellSize = ras.meanCellWidtharcpy.env.extent = raster_dsprint("原始栅格像元大小:", ras.meanCellWidth)# 方法:使用 ExtractByMask + Conprint("\n=== 擦除矢量范围内的栅格 ===")# 1. 使用 ExtractByMask 提取矢量范围内的栅格masked_ras = ExtractByMask(raster_ds, vector_fc)# 2. 使用 Con:如果 masked_ras 有值(在矢量内),输出 NoData;否则输出原始值result = Con(IsNull(masked_ras), ras)# 3. 先保存到 GDBresult.save(output_gdb)print("临时结果已保存:", output_gdb)# 4. 复制为 TIFarcpy.management.CopyRaster(output_gdb, output_path)print("最终结果已保存:", output_path)# 清理临时文件arcpy.management.Delete(output_gdb)# 查看结果print("\n=== 结果栅格信息 ===")desc = arcpy.Describe(output_path)print("格式:", desc.format)print("波段数:", desc.bandCount)# 统计信息ras_out = Raster(output_path)print("最小值:", ras_out.minimum)print("最大值:", ras_out.maximum)print("\n=== 完成 ===")```## 📝 核心逻辑说明**步骤 1**: `ExtractByMask(raster_ds, vector_fc)`- 提取矢量 `m` 范围内的栅格部分**步骤 2**: `Con(IsNull(masked_ras), ras)`- 条件判断:如果掩膜栅格为 Null(不在矢量内)→ 保留原始栅格值- 否则(在矢量内)→ 输出 NoData**步骤 3**: 保存结果- 先保存到 GDB(避免中文路径问题)- 再复制为 TIF 格式## 🔧 运行环境- ArcGIS Pro 3.x- Python 3.x (arcgispro-py3 环境)- 需要 Spatial Analyst 扩展**脚本位置**: `C:\Users\yl\.openclaw\workspace\raster_erase.py`