转换器ExpressionEvaluator的几点巧用
原文发布时间:2011-01-26
作者:跑
联系QQ:44295133
u 介绍
ExpressionEvaluator(表达式计算器),这个转换器允许你对现有字段或指定数值进行运算并返回结果。
对话框下方依次显示了属性字段、运算符、以及数学函数,其中属性框将列出输入端的所有字段。
关于ExpressionEvaluator的基本使用,可参照帮助文件FME Transformers。以下列出本人在使用过程中的一点心得,供大家讨论。
u 几点巧用
1) (嵌套)条件运算
上述功能描述中,x作为判断条件,凡符合的运算结果取值y,否则为z。相当于加上Tester分别进行AttributeSetter,从Best Practice角度看,它简化了工作空间。关于这点,fmepedia上有详例http://www.fmepedia.com/index.php/ExpressionEvaluator。
这里再举一个反三角转换器的例子。我们知道,acos要求输入值范围为[-1,1],计算结果范围为[0,π]。在计算线段斜率或倾斜角度的时候,我们考虑到实际角度范围值为0~360°,即[0,2π]。这样我们就需要根据⊿y(=y2-y1)的正、负进行判断
2) FME Functions扩展
在ExpressionEvaluator对话框中我们看到右下角列出了常用的数学函数,实际情况是FME Functions拥有近百个函数,详见帮助文件FME Functions and Factories。
这里列举一个比较常用的
@Coordinate((x|y|z),(<index>|END),[FLATTEN_AGGREGATE]),在(图2)中我们已经看见表达式中包含该转换器,在我们知道结点索引号的情况下,它可以直接调取坐标值,而不需要事先CoordinateExtractor。
u 续
我们知道,FME有两个关于度分秒、十进制度换算的计算类函数,它要求度分秒按三个属性字段存放,如图
而实际情况往往是12.345656(即12°34′56.56″)或12.34(即12°34′)这样的形式,不便于分别提取出相应字段。这时候,仍然可以通过ExpressionEvaluator进行换算