赞
踩
写在博客之前
很久没有更新博客了,实在是因为我不知道该写什么。最近虽然有一些很有意思的处理模版,但是都是从别人那里看到的,自己改改随便拿来用,并没有形成自己的东西,不太好意思将别人的东西拿过来讲一遍,总有一种偷东西的感觉。
在FME使用过程中,有几个难以忍受的点,循环控制,数组处理。相信大家都很头痛,特别是要遍历一个数组的时候,用常规的FME方法非常繁琐,且难以实现。这个时候PythonCaller的优势就体现出来了。
本文不针对Python语法做过多的讲解,因为本次运用里面的语法真的很简单,没什么可讲的。仅仅讲解在FME使用过程中的一些基本设置。
这几个点,在safe官方的资料中比较松散,网络上也基本不见一个具体的讲解,大家讲PythonCaller的时候,基本上都是默认你已经会使用了,对FME及Python新手很不友好。所以,我想针对这块空白做一个补充。
1.运行环境
要运行Python代码首先需要设置代码的运行环境,
在FME的安装过程中,默认已经安装了Python的运行环境了。
值得注意的一点是,在FME2019版本以后,FME默认是不安装Python2.7的运行环境的,如果有需要2.7的运行环境,需要注意这一点。
本次讲解呢,为了与时俱进,我是使用的是Python3.5(其实基础语法没啥区别)
在导航栏里图下位置修改你的运行环境。为了偷懒,我就不不在文章中写了,看图就明白:
然后要使用PythonCaller,你需要掌握最基本的三点,怎么获取值?传递值?在哪里写代码?
根据官方给出的解释,在上图3的位置是在处理比较复杂的逻辑时定义的方法区,4位置为代码运行区,(图片的文字描述不太行,我真的不知道该怎么去取名字。)本次博客的处理逻辑比较简单,基本上都是在4区书写。
2.从FME中获取值,设置值,及输出值的方法
在用PythonCaller对FME进行数据处理,我们是要根据PythonCaller前一个转换器输入的值进行处理,然后将我们需要的结果传递给下一个转换器,PythonCaller可以看作是我们封装的一个处理数据的自定义转换器。它并不是一个独立的代码区,就绕不开从FME中获取值,设置值,及输出值。
从FME中获取属性值的方法为“feature.getAttribute()”,
从FME中获取参数值的方法为“FME_MacroValues[]”,
设置要素的值为“feature.setAttribute('a',b)”,其中要素名称为a,值为b。
具体,我们可以看一个小例子
用Creator转换器链接一个PythonCaller,创建一个要素,属性名为“featureValue”,值为“0”;并且设置一个发布参数,名为“parmeterValue”,值为“1”。
设置代码如下:
然后在PythonCaller的Output Attributes选项设置暴露参数c和d,运行模版,查看输出结果就可以看到,我们已经将属性a和参数b的值分别赋值给了c和d。
好了,恭喜你,你已经学会了如何在PythonCaller中运行Python代码了,我已经没有什么可教的了,剩下的都是学语言的事情了.
下面就是结合实际的几个运用
3.PythonCaller创建数组
这个小案例主要是运用feature.setAttribute()去创建数组属性的方法,不多说,直接上代码:
然后在Output Attributes选项设置暴露数组b,写法如下:
查看运行结果:
4.在已有数组中添加新的值
还是feature.setAttribute()的用法
运行结果如下:
可以看到,我已经在原本存在的数组后面增加了新的值,且该值不受数据类型限制。
4.暴露数组
这个案例主要是想说一下self.pyoutput(feature)的用法,每当self.pyoutput(feature)则会输出一次属性值。
查看运行结果,生成了13个要素,每个要素都有一个d属性,其值对应的该数组每一个要素的值。
其实,排除掉python基本语法之后,PythonCaller在数组处理的基本知识。常用的就这么点。灵活的掌握for 循环和feature.setAttribute()与self.pyoutput(feature)可以将FME的大多数数组处理玩出花来。
本次文章仅仅讲解在基本用法,至于实际案例,下次我会讲几个比较有意思的运用案例。然后与纯FME操作进行对比,让大家有个直观的感受。
按国际惯例文章末尾要贴个公众号
不过我更新不一定能保证频率
算了,关不关注都一样
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。