当前位置:   article > 正文

this.form.setfieldsvalue如果要设置数组怎么设置_FME中使用PythonCaller对数组进行处理(一)...

this.form.setfieldsvalue

写在博客之前

很久没有更新博客了,实在是因为我不知道该写什么。最近虽然有一些很有意思的处理模版,但是都是从别人那里看到的,自己改改随便拿来用,并没有形成自己的东西,不太好意思将别人的东西拿过来讲一遍,总有一种偷东西的感觉。

在FME使用过程中,有几个难以忍受的点,循环控制,数组处理。相信大家都很头痛,特别是要遍历一个数组的时候,用常规的FME方法非常繁琐,且难以实现。这个时候PythonCaller的优势就体现出来了。

本文不针对Python语法做过多的讲解,因为本次运用里面的语法真的很简单,没什么可讲的。仅仅讲解在FME使用过程中的一些基本设置。

这几个点,在safe官方的资料中比较松散,网络上也基本不见一个具体的讲解,大家讲PythonCaller的时候,基本上都是默认你已经会使用了,对FME及Python新手很不友好。所以,我想针对这块空白做一个补充。

1.运行环境

要运行Python代码首先需要设置代码的运行环境,

在FME的安装过程中,默认已经安装了Python的运行环境了。

值得注意的一点是,在FME2019版本以后,FME默认是不安装Python2.7的运行环境的,如果有需要2.7的运行环境,需要注意这一点。

本次讲解呢,为了与时俱进,我是使用的是Python3.5(其实基础语法没啥区别)

在导航栏里图下位置修改你的运行环境。为了偷懒,我就不不在文章中写了,看图就明白:

7fb47e761eb23adb00fb1fcec3c7b8ba.png

然后要使用PythonCaller,你需要掌握最基本的三点,怎么获取值?传递值?在哪里写代码?

c5e405e55f9382721aff3e0192996d5b.png

根据官方给出的解释,在上图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”。

设置代码如下:

efab1a7cb2ad86c28f1777a009911ace.png 133d447cb49b5e739f0a60e7271d7590.png

然后在PythonCaller的Output Attributes选项设置暴露参数c和d,运行模版,查看输出结果就可以看到,我们已经将属性a和参数b的值分别赋值给了c和d。

a1b75f92929512d182a31b0e7d0c1db4.png

好了,恭喜你,你已经学会了如何在PythonCaller中运行Python代码了,我已经没有什么可教的了,剩下的都是学语言的事情了.

下面就是结合实际的几个运用

3.PythonCaller创建数组

这个小案例主要是运用feature.setAttribute()去创建数组属性的方法,不多说,直接上代码:

99ac2bd850d7d0eb2ce94d442cd14d64.png

然后在Output Attributes选项设置暴露数组b,写法如下:

d33a74d0d0e570ace7418b0c44c4a2dd.png

查看运行结果:

65cd5b94373e34ea1b2625fb5d471e9d.png

4.在已有数组中添加新的值

还是feature.setAttribute()的用法

8ba4c2a7dd85b469ad0c74551bd6a466.png

运行结果如下:

a53b199d347aae1796906340b5d7b54e.png

可以看到,我已经在原本存在的数组后面增加了新的值,且该值不受数据类型限制。

4.暴露数组

这个案例主要是想说一下self.pyoutput(feature)的用法,每当self.pyoutput(feature)则会输出一次属性值。

cd2c25e4e197b61a853ad96a9f398050.png

查看运行结果,生成了13个要素,每个要素都有一个d属性,其值对应的该数组每一个要素的值。

bff825ebf7e3bc77e0a56f3c7c5c02fd.png

其实,排除掉python基本语法之后,PythonCaller在数组处理的基本知识。常用的就这么点。灵活的掌握for 循环和feature.setAttribute()与self.pyoutput(feature)可以将FME的大多数数组处理玩出花来。

本次文章仅仅讲解在基本用法,至于实际案例,下次我会讲几个比较有意思的运用案例。然后与纯FME操作进行对比,让大家有个直观的感受。

c276a03c430b0d12425f1dc05c2fa0f4.png

按国际惯例文章末尾要贴个公众号

不过我更新不一定能保证频率

算了,关不关注都一样

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/115496
推荐阅读
相关标签
  

闽ICP备14008679号