文内模板下载链接
https://pan.baidu.com/s/1FADN2Jb2cicCLEMZYD8DYA
提取码:2021
前言
本文是五篇系列文章中的第四篇,主要介绍了如何在FME Workbench中使用PythonCaller转换器,并且分别列举了不同应用情景下使用函数或类的PythonCaller转换器的的三个示例。
介绍
除了脚本化参数外,FME中还提供了PythonCaller转换器同样可以通过编写Python脚本对要素或要素组进行操作。当然,通常情况下FME中的转换器已经足够我们完成我们想要的任务功能,所以一般情况下,我们建议优先使用FME自带的转换器,当确实没有转换器可以完成要执行的任务时再考虑使用PythonCaller转换器。
让我们来简单了解一下PythonCaller转换器。首先,PythonCaller转换器可以调用函数,您可以直接使用它来处理某一要素,也可以在一个类中调用该功能,以对一组要素进行处理。此外,PythonCaller可以使用完整的FME对象,包括许多方法和类。
PythonCaller可以通过两种不同的方式与Python脚本对接,一种是通过函数,一种是通过类。当我们打算一次处理一个要素时,请使用函数接口,而使用类接口可以提升程序处理的灵活性。
FME对象和Python
通过使用FME Objects Python API中的FME类和方法,可以在Python脚本中使用FME的许多核心功能。
示例1: 通过Python函数给要素添加属性
(示例模板:PythonCaller1.fmw)
同所有转换器一样,FME Workbench在“参数编辑器”窗口中包含了用于特定转换器的帮助按钮。在这里,我们将尝试使用帮助文档里“函数接口示例”部分下(如下图)包含的一部分示例代码为要素添加时间戳。当然,这并不是PythonCaller的理想用法,因为我们完全可以使用FME已有的 DateTimeStamper转换器完成此任务。不过,这确实可以简单直观地演示如何使用PythonCaller转换器。
这里您可以使用该示例代码通过创建自己的工作空间来进行练习,也可以查看我们提供地示例模板(PythonCaller1.fmw)来进行演示练习。
PythonCaller转换器帮助文档中的PythonCaller函数接口示例
下面让我们来具体实现一下。首先,让我们来找一下PythonCaller转换器的脚本编辑器。我们需要将PythonCaller转换器添加到我们的工作空间中并双击它。这时我们就可以看到位于弹出窗口左下方的“参数编辑器”按钮了,如果没有找到它,我们也可以从菜单栏中“视图”>“ Windows”>“参数编辑器”中将其打开(如下图)。
有关如何访问PythonCaller的Python脚本编辑器窗口的说明
接下来,单击如上图所示的“ Python脚本”参数右边的省略号以打开代码编辑器。需要注意的是,代码编辑器里已经有一个模板函数和类了,所以我们需要删除类模板,因为我们现在仅想使用一个函数。然后我们需要重命名函数为timestampFeature,并从PythonCaller帮助页面“函数接口示例”部分或下面的代码中复制代码到代码编辑器里。您可能需要在代码中添加一些换行符和缩进,使它看起来像下面这张图这样。(注意,缩进在Python中很重要):