原文发布时间:2014-10-13

作者:一辉

相关文章:

自定义转换器1

自定义转换器2

自定义转换器1对自定义转换器进行了基础内容的介绍,自定义转换器2介绍了FME中自定义转换器内部属性和外部工作空间属性的关联。

本文主要介绍FME中自定义转换器的循环和扩展。

1. 循环

FME中使用循环来做一些重复性或者动态的事,也是老生常谈了,前面有不少博文提到过,比如毛毛虫的这两篇,大家也可以先阅读下:

http://blog.163.com/[email protected]/blog/static/14049249220110582411146/

http://blog.163.com/[email protected]/blog/static/14049249220110584818988/

本文就以一个简单的例子介绍如何制作循环自定义转换器:

功能:实现数字累加

自定义转换器3

                                        图1 自定义转换器循环

思路是创建两个属性变量:1)i用来记录当前累加到哪一个数字2)leijia 用来记录当前累加结果,然后以条件i<50来进行循环,最终得到结果。

                         自定义转换器3

                                                图2 使用自定义转换器

会用到FME的工具有:

                            自定义转换器3

                                                  图3 用到的FME菜单项

其中Transformer Input是为自定义转换器增加一个入口,如我们图1 的Input_2就是通过该菜单项添加的;Tranformer Loop则是为转换器添加一个循环出口,该出口需要指定一个入口即循环到那个位置,此处我们设置为Input_2。

2.转换器的扩展

本文将转换器的扩展主要是使用已有的转换器PythonCaller来制作的自定义转换器,当然更高级的开发可以通过C#或者Plugin,这种方式我从未尝试过也未见到过别人尝试过,所以此处无法作介绍。

FME提供了对脚本语言PYTHON和TCL的支持,主要通过PythonCaller和TCLCaller来执行脚本,我们可以通过脚本语言来制作自定义转换器,扩展FME的功能,本文也只是介绍使用Python作为脚本语言。

FME自身类库的位置:位于FME的安装路径下
“D:/apps/FME2014sp2/fmeobjects/python/apidoc/index.html”

自定义转换器3

                                       图4 PythonCaller类库

比如我们在Indices下搜索“getattributee”

自定义转换器3

                                               图5 类库搜索

就可以找到获取要素属性的方法getAttribute()。

下面仍以累加的例子使用脚本实现:用while循环做累加,更加简单,当然中间用到两个fmeobject的方法分别是getAttribute()获取属性值setAttribute()新建属性并指定值。

脚本如下:红色斜体是我添加的。

import fmeobjects

# Template Function interface:

def processFeature(feature):

    pass

 

# Template Class Interface:

class FeatureProcessor(object):

    def __init__(self):

        pass

    def input(self,feature):

        _max = feature.getAttribute('_MAX')

        i = 0

        leijia = 0

        while i <= int(_max):

            leijia += i

            i += 1

        feature.setAttribute('leijia',leijia)        

        self.pyoutput(feature)

    def close(self):

        pass

自定制转换器如下:

自定义转换器3

                                          图6 自定义转换器

自定义转换器的使用同上:

自定义转换器3

                                           图7 使用自定义转化器

3.总结

FME本身的功能以足够强大,其实使用循环和脚本扩展的时候并不多,但fmeobjects提供了大量的方法,当大家在使用过程中感觉遇到瓶颈的时候不妨看下这些方法,或许会有帮助。

最近关于FME自定义转换器的总结就到这结束了,当然还会有很多未曾提到的地方,毕竟作者水平有限,大家可尽情补充。

 

相关文章: