使用说明
字段计算通过由字段、运算符或函数组成的表达式来计算获得新字段的值。结果返回要素数据集(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 |