上一篇我们讲解过ArcGIS棚格计算器中Con()和lsNull()函数的使用:详细讲解ArcGIS中栅格计算器常用函数的使用,今天我们来讲解SetNull()函数和lsNull()函数使用。
目录
一、 ArcGlS中栅格计算器简介
(一) 函数类型
(二) 栅格计算器位置及界面布局
二、 ArcGIS栅格计算器中SetNull()函数的使用
(一) SetNull()函数的用法
(二) ArcGIS 案例操作
三、 ArcGIS棚格计算器中lsNull()函数的使用
(一) IsNull()函数的用法
(二)ArcGIS 案例操作
一、ArcGlS中栅格计算器简介
栅格计算是对栅格数据进行空间分析和数据处理时最为常用的方法,它是建立复杂的应用数学模型的基本模块,有非常广泛的应用。ArcGIS提供了非常友好的图形化栅格计算器,利用栅格计算器,不仅可以便捷的完成基于数学运算符的栅格运算,以及基于数学函数的栅格运算,而且它还支持直接调用ArcGIS自带的栅格数据空间分析函数,并且可以便捷的实现多条语句的同时输入和运行。
以下便是ArcGIS栅格计算器中自带的栅格数据空间分析函数
(一)函数类型
1. 条件分析
Con、Pick、SetNull(设为空函数)
2. 数学分析
Abs(绝对值函数)、Exp (底数为e的指数函数)、Exp10 (底数为10的指数函数)、Exp2(底数为2的指数函数)、Float(浮点函数)、Int(整数函数)、Ln(底数为e的对数函数)、Log10(底数为10的对数函数)、Log2(底数为2的对数函数)、Mod(求余)、Power(返回给定图层的乘幂)、RoundDown(靠近零值,向下舍入数字)、RoundUp(远离零值,向上舍入数字)、Square(平方)、SquareRoot(平方根)
3. 三角函数
ACos(反余弦函数)、ACosH(反双曲线余弦值)、ASin(反正弦函数)、AsinH(反双曲线正弦值)、ATan(反正切函数)、ATan2(反正切函数)、ATanH(反双曲线正切值)、Cos(余弦函数)、CosH(双曲线余弦值)、Sin(正弦函数)、SinH(双曲线正弦值)、Tan(正切函数)、TanH(反双曲线正切值)
4. 其他函数
Diff、InList、IsNull(输入数据为空数据者以1输出,有数据者以0输出)、Over、Test
(二)栅格计算器位置及界面布局
Spatial Analyst tools → Map Algebra → Raster Calculator
栅格计算器的运算对象是栅格,可以把他看作一个“数字”对象。
二、ArcGIS栅格计算器中SetNull()函数的使用
(一)SetNull()函数的用法
SetNull()函数会根据指定条件将所识别的像元设置为NoData。如果指定条件评估为真,则返回 NoData;如果指定条件评估为假,则返回由另一个栅格指定的值。
1.SetNull(in_conditional_raster,in_false_raster_or_constant,{where_clause})
其中:
in_conditional_raster表示所需条件结果为真或为假的输入栅格,可以是整型或浮点型;
in_false_raster_or_constant表示指定条件为假时,其值作为输出像元的输入值;
{where_clause}表示决定输入像元为真或为假的逻辑表达式,不过它是一个可选参数。
(二)ArcGIS 案例操作
在此我们准备了两个实例:
SetNull(“Reclass_DEM”>=3,”DEM”)
SetNull(“Reclass_DEM”,”DEM”,”Value=1”)
接下来我们来看一下我们的演示过程:
首先我们先来了解一下我们的数据,下图呢分别是某地数字高程模型(DEM,左)及对该模型进行重分类分成五级后的影像(Reclass_DEM,右)。
然后我们打开栅格计算器,并在栅格计算器中输入如下公式:
1. SetNull("Reclass_DEM">=3,"DEM")
得到如下结果:
我们通过对比可以知道,图层中大于等于3的部分被赋予了空值,而小于3的部分被赋予了DEM的值:
然后当我们我们打开栅格计算器,并在栅格计算器中输入如下的公式时会得到什么样的结果呢:
1. SetNull(“Reclass_DEM”,”DEM”,”Value=1”)
我们先从字面上理解一下,这个SetNull()函数首先对于我们的第一个参数是一个用来确定位置的图层,后面是它的判断条件,就是将重分类后的影像里等一1的部分赋值为空,而不等于1的部分,也就是不满座条件的部分赋值为DEM的值,我们来看一下结果:
再次通过对比我们可以知道,该式子将原图层为1的部分赋予了空值,而不为1的部分赋予了DEM的值:
三、ArcGIS棚格计算器中lsNull()函数的使用
(一)IsNull()函数的用法
逐个确定输入栅格中的哪些像元的值为NoData。如果输入的值为NoData,则返回1,否则返回 0。
1. IsNull(in_raster)
其中:in_raster表示要进行检测以识别NoData(空)像元的输入栅格,输入栅格可以是整型,也可以是浮点型。
(二)ArcGIS 案例操作
在此我们准备了两个实例:
IsNull(example_1)
Con(IsNull(SetNull("DEM" <= 2000,"DEM")),"example_1","example_2")
在接下来的演示过程中所使用的数据延用探究SetNull()函数时所用到的函数。
首先为了我们方便理解,我们先使用一下IsNull()函数最基本都公式(example_1是我们之前输出的一个图层):
1. IsNull(example_1)
我们在栅格计算器中输入如下公式公式:
得到如下结果:
经过对比我们发现图层中有无数据的像元被区分开来,并将有数据的地方赋值为0,而没有数据的地方赋值为1
我们还可以通过属性表来查看图层中被赋值为0或1的像元的数量,由此我们可以知道如果当图幅比较大时要查看图幅中有无没有数据的像元就可以利用此方法。
然后接下来我们把IsNull()函数、SetNull()函数、Con()函数结合起来看一下是什么样的。我们将如下公式输入到栅格计算器中:
1. Con(IsNull(SetNull("DEM" <= 2000,"DEM")),"example_1","example_2")
在出结果之前我们先来一步步理解一下这个公式,首先我们从外往里看一下这个公式,它最外面是一个大的Con()函数,里面的条件函数部分是用一个IsNull()函数进行判断的,但IsNull()函数里面同时又有一个SetNull()函数,然后我们想要读懂这个公式就需要我们从里往外进行理解。
我们先来看一下SetNull("DEM" <= 2000,"DEM"),它将DEM图层中值小于等于2000的像元赋值为空值,而大于2000的像元保持原来的值不变(或者说将值大于2000的像元赋值为DEM图层对应像元的值),整体看来该函数只是修改了DEM图层中值小于等于2000的那些像元,在赋值完成后SetNull()函数就停止工作了。
接下来就是IsNull(SetNull("DEM" <= 2000,"DEM")),它在这个公式里面存在的意义就是用来判断SetNull()函数的结果,将值小于等于2000赋值为空值的那部分像元再次赋值为1,而将值大于2000的那部分像元统一赋值为0,所以公式中这一部分生成的结果就是由1和0组成的有两个色块区域的矩形的栅格。
最后在整个Con(IsNull(SetNull("DEM" <= 2000,"DEM")),"example_1","example_2")公式中IsNull(SetNull("DEM" <= 2000,"DEM"))只是一个条件函数,Con()函数会把IsNull(SetNull("DEM" <= 2000,"DEM"))生成的结果中为1的那一部分判定为真,赋值为example_1中对应位置的值,而0的那一部分判定为假,赋值为example_2中对应位置的值。
我们来看一下结果:
对于这个公式最后的呈现结果也是比较好理解的,就是把两个栅格图层进行了组合,只不过是把小于等于2000的部分赋值为example_1的值,而大于2000的部分赋值为example_2的值。其实要实现这一操作没有必要这么复杂,我们也可以通过其他的方式方法直接得到我们现在的结果,但是我们为了更好的了解IsNull()这个函数,做了一个相对复杂一点的公式,希望大家在理解了这个公式以后更够很好的运用IsNull()函数。