17. r.mapcalc的地图代数功能

[sec:mapcalc]

模块通过算术运算来操作、分析和生成栅格地图。它可以交互式地启动,也可以直接在命令行中使用。已有的栅格地图、常量(整型或浮点值)和要素都能使用。在GRASS中,“no values”和’0’值是不同的,如下所述:

NULL = no data

Zero = 0-data (如,摄氏度中的冰点)

使用的预备知识涉及影像格式、地图投影和正确设置项目区域的范围。在使用之前建议您先看看帮助,因为这个模块非常强大。

17.1. r.mapcalc的运算符

[sec:mapoper]

[H]

|p2cm|p5cm|p3cm|p3cm|

运算符& 意义& 类型& 优先级 & 指数 & 算术运算& 5 % & 比率(模运算) & 算术运算& 4 / & 除 & 算术运算& 4 & 乘 & 算术运算& 4 + & 加 & 算术运算& 3 - & 减 & 算术运算& 3 == & 等于 & 逻辑运算 & 2 != & 不等于& 逻辑运算 & 2 > & 大于 & 逻辑运算 & 2 >= & 大于等于 & 逻辑运算 & 2 < & 小于 & 逻辑运算 & 2 <= & 小于等于 & 逻辑运算 & 2 && & 且 & 逻辑运算 & 1 || & 或 & 逻辑运算 & 1 # & 预分隔符 & 算术运算& -

17.2. r.mapcalc的函数

[sec:mapfunkts]

[H]

|p4cm|p8cm|p1.5cm|

函数& 意义& 类型 abs(x) & 返回x的绝对值 &* [1] atan(x) & x的反正切值 (结果单位为度) &F [2] atan(x,y) & y/x的反正切值 (结果单位为度) & F cos(x) & x的余弦 (x的单位为度) &F double(x) & 将x转换为双精度浮点数 &F eval([x,y,...,]z) & 列出的表达式求和,结果传给z & exp(x) & x的指数函数 &F exp(x,y) & x的y次幂 &F float(x) & 将x转换为浮点数 &F graph(x,x1,y1[x2,y2..]) & 根据图中的点将x转换为y& F if & 条件分支: &* if(x) & 如果x不为0则返回1,否则返回0 & if(x,a) & 如果x不为0则返回a,否则返回0 & if(x,a,b) & 如果x不为0则返回a,否则返回b & if(x,a,b,c) & 如果x小于0则返回a,如果x等于0则返回b,如果x小于0则返回c & int(x) & 将x转换为整型 [ 截取 ] & isnull(x) & 检查x是否为NULL &I log(x) & x的自然对数 &F log(x,b) & 以b为底的x的对数 &F max(x,y[,z...]) & 返回这些值中最大的一个 & * median(x,y[,z...]) & 返回这些值的中值 & * min(x,y[,z...]) & 返回这些值中最小的一个 & * mode(x,y[,z...]) & 返回这些值的众数 & * not(x) & 如果x等于0则返回1,否则返回0& rand(a,b) & 返回a与b之间的随机数& round(x) & 将x四舍五入为整数 &I [3] sin(x) & x的正弦 (x的单位为度) &F sqrt(x) & x的平方根 &F tan(x) & x的正切值 (x的单位为度) &F

17.3. r.mapcalc的内部变量

[sec:mapvars]

[H]

|p5cm|p7cm|

变量& 意义 row() & 活动窗口的当前行 col() & 活动窗口的当前列 x() & 活动窗口的当前x坐标 y() & 活动窗口的当前y坐标 ewres() & 当前的东西向分辨率 nsres() & 当前的南北向分辨率 null() & NULL值

为了说明的不同解译,下面举出两个简单的例子:

# Raster map soils minus map reclass multiplied by 2
New map = soils-reclass * 2

# Raster map soils-reclass multiplied with 2
New map = "soils-reclass" * 2

17.4. 掩模

[sec:rmmask]

预先对影像的范围做掩模对于影像的分析很有帮助。可以用将已有的栅格地图作为掩模。为了将其作为掩模,地图必须命名为(大写字母)。所有非空的值(空值为,即NULL)被用作掩模值。分析中使用其它的值。

也可以通过来创建掩模:

# Simple copying of a map as mask:
r.mapcalc "MASK=map"

# More complex operations for creating a mask, only mask
# where category value 1 and 3 are present:
r.mapcalc "MASK=if(map==1 || map==3,null(),map)"

作为例子,我们将对spearfish数据集作一个基于栅格的分析,分析区域是地图中登记过业主的地方,业主信息在地图中。

# Create mask for areas in map fields:
r.mapcalc "mask_map=if(fields,1,null())"
g.copy rast=mask_map,MASK

# Control:
d.rast geology

现在只有在地图中存在业主信息的地理区域才会显示。

需要注意的是,设置一个掩模会应用到所有的栅格分析中 – 矢量分析不受影响。如果掩模不再使用,那么地图必须删除(请参阅 [rastmask])。如果设置了掩模,消息总会在命令行中提示您。

[1]如果常量是浮点值,那么返回值也是浮点值。
[2]结果是浮点值。
[3]结果是整数值。