在GIS领域,栅格计算是最基础也最强大的空间分析工具之一。作为Arctoolbox 3D Analyst模块的核心功能,栅格计算器(Raster Calculator)能够实现从简单代数运算到复杂空间建模的全套操作。本教程将聚焦三个进阶应用场景:基于DEM的地形因子计算、多源数据融合分析以及条件栅格的重分类技巧。
提示:本教程需要ArcGIS 10.x以上版本支持,所有操作均在Spatial Analyst扩展模块激活状态下完成。
栅格计算本质上是像素级的矩阵运算。当输入"DEM * 0.3048"这样的表达式时,系统会:
其数学表达为:
code复制Output(i,j) = Function(Input1(i,j), Input2(i,j),...)
其中(i,j)表示栅格行列坐标,Function可以是算术、逻辑或空间函数。
有效的栅格计算表达式需遵循以下语法规则:
典型错误示例:
code复制slope * 100 // 未加引号
DEM / 0 // 除零错误
坡度变率(Slope of Slope)反映地形曲率变化,是土壤侵蚀分析的重要指标。操作步骤:
首先生成坡度栅格:
python复制# ArcPy实现
out_slope = Slope("DEM", "DEGREE")
对坡度栅格二次求导:
code复制"slope" / 100 * 3.1415926 / 180 // 转为弧度
使用焦点统计计算邻域变化率:
python复制FocalStatistics("slope_rad", NbrRectangle(3,3), "STD")
注意:DEM分辨率直接影响计算结果,建议使用10m以下精度数据
TWI算法实现流程:
code复制Ln( ("flowacc" + 1) * 900 / Tan("slope_rad") )
关键参数说明:
结合NDVI与土地利用数据:
code复制Con("landuse" == 12, "ndvi" * 1.2,
Con("landuse" == 21, "ndvi" * 0.8,
"ndvi"))
其中:
典型场景:选址适宜性评价
code复制("slope" * 0.3 + "soil" * 0.2 + "transport" * 0.5) / 3
权重分配技巧:
使用Con函数处理NoData:
code复制Con(IsNull("input"), FocalMean("input", NbrCircle(5)), "input")
提取坡度大于25度的区域:
code复制SetNull("slope" < 25, "slope")
临时文件管理:
python复制arcpy.env.workspace = "in_memory"
分块处理大栅格:
python复制arcpy.env.compression = "LZ77"
arcpy.env.tileSize = "128 128"
表达式简化原则:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 输出全为空值 | 输入栅格坐标系不一致 | 使用Project Raster统一坐标系 |
| 计算结果异常 | 数据类型不匹配 | 使用Float()函数显式转换 |
| 执行速度极慢 | 未设置处理范围 | 在Environment中设置Processing Extent |
| 内存溢出 | 栅格分辨率过高 | 使用Resample降低分辨率 |
性能优化实测数据:
结合坡向、日照时数:
code复制("sunhour" / 24) * Cos("aspect" - 180)
基于DEM的简单淹没分析:
code复制Con("dem" < water_level, 1, 0)
将计算结果导入ArcScene: