文章目录
- 前言
- 一、基本概念
- 二、常用函数
-
- [2.1 数学函数](#2.1 数学函数)
- [2.2 统计函数](#2.2 统计函数)
- [2.3 条件函数](#2.3 条件函数)
- [2.4 逻辑函数](#2.4 逻辑函数)
- [2.5 重分类函数](#2.5 重分类函数)
- [2.6 表面分析函数](#2.6 表面分析函数)
- [2.7 距离函数](#2.7 距离函数)
- [2.8 水文分析函数](#2.8 水文分析函数)
- [2.9 插值函数](#2.9 插值函数)
- 三、最佳实践建议
- 总结
前言
ArcGIS栅格计算器(Raster Calculator)是空间分析工具箱中的强大工具,用于对栅格数据进行数学运算和逻辑分析。
一、基本概念
- 作用
执行栅格数据的数学运算(加、减、乘、除等)
进行条件判断和逻辑运算
多个栅格数据的叠加分析
地图代数表达式计算 - 访问方式
ArcMap: 空间分析工具 → 地图代数 → 栅格计算器
: 通过arcpy.sa.RasterCalculator()调用 - 栅格引用方式
直接双击图层列表中的栅格名称
手动输入栅格名称(需加引号)
使用完整路径:"C:/data/dem.tif"
二、常用函数
2.1 数学函数
- 基本数学运算
python
# 绝对值
Abs("temperature_change")
#平方根
Sqrt("area")
#幂运算
Power("radius", 2) # 半径的平方
Square("distance") # 平方
#对数
Log("population") # 自然对数
Log10("light_value") # 以10为底的对数
Exp("growth_rate") # 指数函数
2 三角函数
python
#角度转弧度
("angle_degree" * 3.1415926535) / 180
#三角函数计算
Sin("slope_radians") # 正弦
Cos("aspect_radians") # 余弦
Tan("angle_radians") # 正切
#反三角函数
ASin("value") # 反正弦
ACos("value") # 反余弦
ATan("value") # 反正切
实例:计算日照强度
假设slope为坡度,aspect为坡向,latitude为纬度
slope_rad = ("slope" * 3.14159) / 180
aspect_rad = ("aspect" * 3.14159) / 180
lat_rad = (30 * 3.14159) / 180 # 北纬30度
#简化的日照强度计算
solar_radiation = Cos(slope_rad) * Cos(lat_rad) + Sin(slope_rad) * Sin(lat_rad) * Cos(aspect_rad)
2.2 统计函数
- 局部统计
python
#邻域统计
FocalStatistics("elevation", NbrRectangle(3, 3), "MEAN") # 3x3窗口均值
FocalStatistics("rainfall", NbrCircle(5, "CELL"), "MAX") # 5像元半径最大值
#块统计
BlockStatistics("ndvi", NbrRectangle(10, 10), "MEAN") # 10x10块统计
- 区域统计
python
#分区统计
ZonalStatistics("watershed", "VALUE", "slope", "MEAN") # 流域平均坡度
ZonalStatistics("landuse", "VALUE", "temperature", "RANGE") # 土地利用类型内温度范围
2.3 条件函数
- Con函数(最常用)
python
#基本语法
Con(condition, true_value, false_value)
Con(condition, true_value, false_value, where_clause)
#简单重分类
Con("elevation" > 1000, 1, 0) # 高于1000米为1,否则为0
#多条件重分类
Con("landuse" == 1, "耕地",
Con("landuse" == 2, "林地",
Con("landuse" == 3, "水域", "其他")))
- Pick函数
python
#根据位置索引选择值
Pick("index_raster", ["raster1", "raster2", "raster3"])
#实例:根据月份选择温度数据
month = "month_index" # 值从1到12
temperature = Pick(month,
["jan_temp", "feb_temp", "mar_temp", "apr_temp", "may_temp", "jun_temp",
"jul_temp", "aug_temp", "sep_temp", "oct_temp", "nov_temp", "dec_temp"])
2.4 逻辑函数
- 比较运算
python
#等于
"landuse" == 1
# 不等于
"slope" != 0
# 范围判断
("temperature" >= 10) & ("temperature" <= 30)
# 多个条件组合
("soil_type" == 3) & ("slope" < 15) & ("aspect" > 90) & ("aspect" < 270)
- 布尔运算
python
# 与运算
("rainfall" > 1000) & ("temperature" > 15)
# 或运算
("elevation" < 50) | ("distance_sea" < 10)
# 非运算
~("protected_area" == 1) # 非保护区
# 异或运算
("urban" == 1) ^ ("industrial" == 1) # 城市或工业区,但不是两者都是
2.5 重分类函数
- Reclassify函数
python
# 直接重分类(在ArcGIS Pro中)
Reclassify("slope",
RemapRange([[0,5,1], [5,15,2], [15,25,3], [25,90,4]]))
# 使用栅格计算器实现类似功能
slope_class = Con("slope" <= 5, 1,
Con("slope" <= 15, 2,
Con("slope" <= 25, 3, 4)))
- 自定义重分类
python
# 连续值离散化
temperature_class = Int(("temperature" + 10) / 5) # 每5度一个等级
# 归一化到0-1范围
normalized = ("value" - FocalStatistics("value", NbrRectangle(100,100), "MINIMUM")) /
(FocalStatistics("value", NbrRectangle(100,100), "MAXIMUM") -
FocalStatistics("value", NbrRectangle(100,100), "MINIMUM"))
2.6 表面分析函数
- 地形分析
python
# 坡度计算(需要Spatial Analyst扩展)
Slope("dem", "DEGREE") # 度为单位
Slope("dem", "PERCENT_RISE") # 百分比坡度
# 坡向计算
Aspect("dem")
# 曲率计算
Curvature("dem")
2.7 距离函数
- 欧氏距离
python
# 到最近道路的距离
EucDistance("roads")
# 成本距离
CostDistance("source", "cost_raster")
# 成本路径
CostPath("destination", "cost_distance", "backlink")
2.8 水文分析函数
- 基本水文分析
python
# 流向计算
flow_dir = FlowDirection("dem", "NORMAL")
# 汇流累积量
flow_acc = FlowAccumulation(flow_dir)
# 盆地(流域)划分
basin = Basin(flow_dir)
# 水流长度
flow_length = FlowLength(flow_dir, "DOWNSTREAM")
2.9 插值函数
- 空间插值
python
# IDW反距离权重插值
Idw("rain_gauges", "RAINFALL", 2000, 2)
# 克里金插值
Kriging("temperature_stations", "TEMP", "Spherical")
# 样条函数插值
Spline("elevation_points", "ELEVATION", "REGULARIZED")
三、最佳实践建议
表达式测试: 先在小型测试区域验证表达式
文档记录: 保存计算表达式和参数设置
中间结果: 复杂计算时保存中间结果
内存管理: 大文件计算时注意内存使用
验证检查: 使用统计工具验证计算结果
总结
ArcGIS栅格计算器是地理空间分析的核心工具,通过灵活的地图代数表达式,可以完成从简单数学运算到复杂空间模型的各类分析任务。掌握其语法规则和应用技巧,能显著提高GIS空间分析工作的效率和精度。