字段计算

使用说明

字段计算通过由字段、运算符或函数组成的表达式来计算获得新字段的值。结果返回要素数据集(FeatureRDD)。

应用场景如当某商需要对房价进行综合定价,小区与地铁站的距离和房价呈某种函数关系,通过对距离字段进行计算来定义。

V1版本字段计算表达式目前支持数学运算符、数学函数、条件运算符、逻辑运算符和它们之间的混合运算;V2版本字段计算表达式功能更加灵活,支持更复杂的运算。

变更声明

新增【字段计算版本】参数,用于控制字段计算版本。 本文主要介绍了V1版本字段计算表达式,关于V2般的详细介绍,请参考SuperMap GPA 工具箱中字段计算V2升级版

表达方法:

1、数学运算符

运算符 说明 v1示例及结果
A + B A加B,A和B可以是数值、函数、字段名或表达式 “fieldname1 + 5”= 15.0
A – B A减B,A和B可以是数值、函数、字段名或表达式 “fieldname1-fieldname2”= 5.0
A * B A乘B,A和B可以是数值、函数、字段名或表达式 “(filedname1-5)*(filedname2+5)=50.0
A / B A除B,A和B可以是数值、函数、字段名或表达式 “abs(-filedname1) / filedname2=2.0

注:示例中假定fieldname1的值为10.0,filedname2的值为5.0

2、数学函数

运算符 说明 v1示例及结果
abs(a) a的绝对值,a可以是数值、函数、字段名或表达式 “abs(fieldname1) * 2”=20.0
sin(a) a的三角正弦函数,a可以是数值、函数、字段名或表达式 “sin(abs(fieldname1)+20) “=0.5
cos(a) a的三角余弦函数,a可以是数值、函数、字段名或表达式 “cos(filedname2 * 4+40)“=0.5
tan(a) a的正切值,a可以是数值、函数、字段名或表达式 “tan(filedname2 * 9)” =1.0
log(a) a的自然对数(以e为底),a可以是数值、函数、字段名或表达式 “log(1)“=0
sqrt(a) a的平方根,a可以是数值、函数、字段名或表达式 “sqrt(filedname1*(filedname2+5)) “=10
min(a,b) a和b的最小值,a和b可以是数值、函数、字段名或表达式 “min(10,filedname2))“=5.0
max(a,b) a和b的最大值,a和b可以是数值、函数、字段名或表达式 max(abs(filedname1),8)“=10.0

注:示例中假定fieldname1的值为-10.0,filedname2的值为5.0

3、条件运算符

运算符 说明 v1示例及结果
A > B A是否大于B,A和B可以是数值、函数、字段名或表达式 “abs(fieldname1)>filedname2” =1
A < B A是否小于B,A和B可以是数值、函数、字段名或表达式 “fieldname1 < fildname2”=0
A>= B A是否大于等于B,A和B可以是数值、函数、字段名或表达式 “-fieldname1>= filedname2*2”=1
A <= B A是否小于等于B,A和B可以是数值、函数、字段名或表达式 “(fieldname2+5)*2<=10”=0
A != B A是否不等于B,A和B可以是数值、函数、字段名或表达式 “5 != 10” = 1
A == B A是否等于B,A和B可以是数值、函数、字段名或表达式 “fieldname2+5 == max(10,5)“=1

注:示例中假定fieldname1的值为-10.0,filedname2的值为5.0

4、逻辑运算符

运算符 说明 v1示例及结果
A || B A或B,A和B为条件运算表达式 fieldname1>0 || filedname2 >0”=1
A && B A与B,A和B为条件运算表达式 “fieldname1>0 && filedname2 >0”=0

注:示例中假定fieldname1的值为-10.0,filedname2的值为5.0,结果0表示false,1表示true

5、优先级
括号”()“、负号(”-“)和函数 > 数学运算符乘(”*“)除(”/”)>数学运算符加(”+“)减(”-”)> 条件运算符>逻辑运算符

6、注意事项

  • 字段表达式负号只加在字段名前有效。
  • 条件运算符和逻辑运算符的优先级比较低,所以条件运算符和逻辑运算符前后的表达式不用加括号。 (fieldname1>0) || (filedname2 >0) :错误 , fieldname1>0 || filedname2 >0:正确
  • 字段表达式中可以在数值、字段名、运算符或表达式前后任意添加空格,计算结果不受影响。
  • 表达式支持多个函数的嵌套以及嵌套后进行混合运算。
  • 有效的字段名只能由字母、数字和下划线组成,且不能以数字开头。

应用场景

V2版本的字段计算表达式功能更加灵活,支持更复杂的运算。例如:现需要实现矢量数据的栅格化,通过对网格内的坡度、是否含有大型植被、水系、居民地进行分析,实现机降区域分析专题图的制作。栅格化功能要求为:

  • 机降区域分析专题图:(2种模式)
    A.可机降:坡度<10°,没有大型植被、无水系、无居民地;
    B.不可机降:坡度>10°,或者有植被、有水系、有居民地。

使用V1版本的字段计算无法得到这类复杂的运算要求,利用V2版本字段计算,输入表达式:
if(@[“HYDA”] == null /* 无水系线*/

&& @[“HYDL”] == null /* 无水系面*/

&& @[“RESA”] == null /* 无居民地*/

&& @[“VEGA”] == null /* 无植被*/

&& @[“slope”]<10 /* 坡度小于10*/
) {return “A”;}

else if ((@[“HYDA”] != null|| @[“HYDL”] != null )/* 有水系线或水系面*/

&& @[“RESA”] == null /* 有居民地*/

&& @[“VEGA”] == null /* 无植被*/

&& @[“slope”]>10 /* 坡度小于10*/
){return “B”;} else{return null;}

即可在新字段中得到A,B两种机降区域模式结果,进而用于绘制专题图。

参数说明

参数名 默认值 参数释义 参数类型
用于进行字段计算的数据集 用于进行计算字段的数据集,支持点、线、面或表数据集。 FeatureRDD
用于保存计算结果的字段名 用于保存计算结果的字段名 String
用于保存计算结果的字段类型 用于保存计算结果的字段类型 String
用于计算的表达式 用于计算的表达式,支持数学运算,比较运算,数学函数等 String
字段计算版本 v1 为保障字段计算兼容性问题,提供设置版本参数。v1表示老版本的字段计算,v2表示新版本的字段计算,相比于v1版本功能更加灵活。 JavaFieldCalculatorVersion