代数运算

使用说明

代数运算是对一个或多个体元栅格数据进行数学运算和函数运算。同时运算的得到的结果数据的体元值是由一个或多个输入数据的同一位置的体元值通过代数运算得到的。

为了更好的实现体元栅格代数运算功能,SuperMap提供了丰富的运算符、函数和运算表达式,除了常用的算术运算(如加、减、乘、除和取整等)方法,还支持通过用户自定义的表达式,来进行体元栅格的算术运算、条件运算、逻辑运算、函数运算(包括常用函数、三角函数等)和复合运算,可以通过体元栅格代数运算实现多种体元栅格分析需求。

操作步骤

  1. 在“ 三维数据 ”选项卡“ 三维场数据 ”组内的“ 体元栅格 ”下拉菜单中,单击“ 代数运算 ”按钮,弹出“体元栅格代数运算”对话框。
  2. 设置相关参数后,单击“确定”按钮,即可执行体元栅格代数运算的操作。

参数说明

  1. 设置代数运算表达式:不同类型的代数运算表达式(包括数据集、数字、常量、运算符、函数等)将以不同的字体风格显示在表达式对话框中,便于用户区分。
  2. 此外,在表达式对话框内,可以通过单击鼠标右键,在弹出的右键菜单中选择相关编辑选项(包括“剪切”、“复制”、“粘贴”和“清除表达式”等)对已有表达式进行编辑,也可以使用 Windows 快捷键(如 Ctrl+X、Ctrl+C、Ctrl+V、Delete 等)实现编辑操作。在编辑代数运算表达式时,建议用户将一个表达式作为一个整体进行编辑,这样可以保留它们独有的字体风格。
  3. 代数运算表达式的组成应遵循如下规则:

    • 引用体元栅格数据集作为运算操作数时,其格式为[数据源名.数据集名],例如在数据源 BeijingDEM中的 Volumn数据集的引用为:[JingjinDEM.Volumn]。
    • 算术运算符的操作数可以是一个数据集、数字或者常量(如对一个数值的函数运算的结果)。
    • 数学函数的自变量可以是一个数值,也可以为某个数据集,或者是一个数据集或多个数据集的运算表达式。
    • 当负数作为操作数时,要加上小括号()。
    • 表达式中必须至少含有一个输入体元栅格数据集。
  4. 常用函数

    除了常用的运算符以外,SuperMap 还提供了21种常用的函数,包括算术运算函数、三角函数、指数/对数函数和其它函数四种,下面将详细介绍各类函数的内容。

常用函数使用说明


运算类型 说明 图示
算数函数 abs(x) 绝对值函数。
mod(x, y) 取模函数,即求出 x/y的余数,其输出值为整数值。当 y>x 时,mod(x, y) = x。
floor(x) 向下舍入函数,即获得距 x 最近的较小整数(如1.8下舍入为1.0,-2.2下舍入为-3.0),其输出值为浮点值。
三角函数 sin(x) 正弦函数
cos(x) 余弦函数
tan(x) 正切函数
cot(x) 余切函数
asin(x) 反正弦函数
acos(x) 反余弦函数
atan(x) 反正切函数
acot(x) 反余切函数
sinh(x) 双曲正弦函数
cosh(x) 双曲余弦函数
tanh(x) 双曲正切函数
指数/对数函数 exp(x) 以自然对数 e 为幂的函数。
pow(x, y) x 的 y 次方。
sqrt(x) 对 x 开方。
ln(x) 取自然对数。
log(x) 取以10为底的对数。
其它函数 Con(x, y, z) 条件判断函数。x 为条件表达式(或值),y、z 为提取值。如果函数满足条件 x,则提取 y 值,否则提取 z

值。
IsNull(x) | 检查表达式是否含无效值,如果x为 Null(即无效值)则返回值为1,否则返回值为0。
pick(n1,n2,n3,…,nn) | 更新体元栅格值。将指定的第一个体元栅格数据集的体元值作为对应位置,并根据后续输入的体元栅格数据集的体元值或输入的数值,给对应位置的体元赋值,最终生成一个新的体元栅格数据集。

  1. 常用运算符

SuperMap 提供的常用运算符包括基本的算术运算符、关系运算符和逻辑运算符三类,如下图所示。单击运算符所在按钮即可在上方的表达式对话框中显示相应的运算符号。

operator


算术运算

常用的算术运算包括加法(+)、减法(-)、乘法(*)和除法(/),下表将详细介绍各种运算方法在进行栅格代数运算时是怎样使用的。

算术运算符使用说明


运算类型 说明
加法 体元栅格代数运算中的加法,是将两个输入体元栅格数据集中的体元值逐个体元相加的过程。
减法 体元栅格代数运算中的减法,用于两个体元栅格数据集相减,即逐个体元地从第一个体元栅格数据集中的体元值中减去第二个数据集中相应位置的体元值。使用减法运算时,输入体元栅格数据集的先后顺序很重要。若顺序不同,其结果通常也是不同的。
乘法 体元栅格代数运算中的乘法,是将两个输入体元栅格数据集中的栅格值逐个体元地相乘的过程。
除法 体元栅格代数运算中的除法,是将两个输入体元栅格数据集中的栅格值逐个体元地相除的过程。

逻辑运算

逻辑运算又称布尔运算,对输入栅格数据集中的像元值进行”真”或”假”的条件判断,并以二进制(1和0)的形式输出。其运算结果用1或0表示,1在逻辑上代表”真”,即满足代数运算表达式要求的体元;0在逻辑上代表”假”,即不满足代数运算表达式要求的体元。

常用的逻辑运算包括 And(与)、Or(或)、Not(非)和 Xor(异或),下面将详细介绍各逻辑运算方法。

逻辑运算符使用说明

  • And :表示逻辑“与”,在表达式对话框中用 & 表示。当且仅当体元栅格数据集的体元值同时满足两个代数运算表达式时,该体元值为真,并赋值为1,否则为假,赋值为0。
  • Or :表示逻辑“或”,在表达式对话框中用 | 表示。当体元栅格数据集的体元值至少满足两个代数运算表达式中的其中一个时,该体元值为真,并赋值为1;若体元栅格数据集的体元值均不满足这两个代数运算表达式,该体元值为假,赋值为0。
  • Not :表示逻辑“非”,在表达式对话框中用 Not( ) 表示。当体元栅格数据集的体元值不满足所列代数运算表达式时,该体元值为真,并赋值为1,否则为假,赋值为0。
  • Xor :表示逻辑“异或”,在表达式对话框中用 ^ 表示。当且仅当体元栅格数据集的体元值只满足两个代数运算表达式中的其中一个时,该体元值为真,并赋值为1;若栅格数据集的体元值同时满足(或同时不满足)这两个代数运算表达式时,该体元值为假,并赋值为0。
  • 结果数据
  • 数据源 :列出了当前工作空间下所有的数据源,选择结果数据集所要保存的数据源。
  • 数据集 :设置结果数据集的名称。

    • 像素格式 :设置结果数据集的像素格式,应用程序提供了提供了1位、4位、8位、16位、32位、64位、单精度浮点型和双精度浮点型等11种格式,每种格式的具体说明请参见栅格数据集像素类格式
  • 导入/导出代数运算的参数。用户可通过左下方的“导入/导出”按钮以配置文件的形式设置“体元栅格代数运算”的参数。
  • 导入 :单击“导入”按钮,将保存为 *.xml 格式的代数运算配置文件直接导入到“体元栅格代数运算”对话框中显示。
  • 导出 :单击“导出”按钮,可以将表达式对话框中的代数运算表达式及其它相关的参数设置以 *.xml 格式保存到文件中,便于以再次使用。

完成体元栅格代数运算相关参数的设置后,即可执行栅格代数运算操作。