01 栅格计算器在哪?
02 运算符说明
栅格计算器的表达式书写与Python语法一致(由于其为解释型语言并且语言简洁优美,因此简单上手),这里主要简单说明各个运算符即可使用栅格计算器构建地图代数表达式以输出要求的栅格图像。
首先我们先来了解一下算术运算符。
2.1 +(加)
(或许你会看到+左右两侧均有空格,这是python推荐的写法,但是并不强制,它可以使表达式更为优美简洁,我很喜欢Python)
2.2 -(减)
2.3 *(乘)
2.4 \(除)
接着我们来看一下关系运算符。
2.5 ==(相等)
其它>(大于) 、<(小于)、 >=(大于等于)、 <=(小于等于)、!=(不等于)均为类似用法,这里不再赘述。
接下来我们来看一下逻辑运算符
2.6 &(布尔与)
等价于数学中的取交集;
2.7 |(布尔或)
等价于数学中的取并集
2.8 ^(布尔异或)
2.9 ~(布尔非)
类似数学中的取逆,但是样本空间为{真, 假}.
03 函数
3.1 Con(condition, num1, num2)
实际为If函数,意为对每一个像元进行If判断,如果满足条件condition,那么赋值为num1,否则赋值为num2.
可以进行嵌套,例如,对某一DEM栅格图像dem.tif,我们想要对其进行属性值按照分类标准(<200的像元赋值为1,>= 200 但是 <500的像元赋值为2, 其它赋值为3)进行重新赋值(当然你也可以使用重分类进行)。那么表达式为:
Con("dem.tif" < 200, 1, Con("dem.tif" < 500, 2, 3))
# 或许你会这么写
Con("dem.tif" < 200, 1, Con(200 =< "dem.tif" < 500, 2, 3))
# 恭喜你python支持链式比较(当然你也可以使用& |都行),确实可以200 =< "dem.tif" < 500,
#但是明显不需要,因为已经第二个IF判断了,肯定是>= 200了;
3.2 Pick(Raster.tif, [num1, num2, num3...])
实际就是提取栅格图像中属性值为num1,num2, num3等的像元,其它没有被提取的像元设置为Nodata。
例如,我们现在有一幅土地利用图(栅格数据结构),其中属性值为1的像元表示城镇,属性值为5的像元表示为乡村,当然还有一些其它属性值也表示一些地物。那么我的需求即使将城镇和乡村的像元提取出来,实际底层执行的是:对逐个像元进行判断,若该像元的属性值在列表[num1, num2, num3...]中,那么该像元属性值不变,若是像元属性值不在列表中,那么该像元值设置为Nodata。
3.3 SetNull(condition, raster.tif/num)
其表示将满足条件consition的像元设置为Nodata,不满足条件的像元设置为raster.tif栅格图像(一般为condition条件中的图像意为不满足条件的属性值不变)对应的栅格属性值或者设置为值num。
例如,我们通过DEM栅格图像dem.tif寻找地形平坦的区域(认为高程小于200的均满足要求),为了后续其它空间分析的方便,这里需要将dem.tif进行栅格计算(当然你用重分类等操作也是可以的),那么我们可以写表达式为:
SetNull("dem.tif" >= 200, "dem.tif")
# 表示>=200的像元值设置为Nodata,其它设置为dem.tif对应的栅格像元值即不变
3.4 Float(raster.tif)和Int(raster.tif)
有时候栅格图像中的栅格属性值的数据类型不满足我们的计算要求,那么我们需要对其进行类型转换。
Float()是将栅格图像中的像元值类型转化为浮点型(当然,raster.tif * 1.0也是可以得到浮点数的raster.tif)
Int()是将栅格图像中的像元值类型转化为整型。
未完待续,如今后碰到其它函数在行补充。
如果有问题,欢迎一起探讨.
<p>炒茄子<p>