实现复杂功能的FME模板使用大量转换器让人目不暇接,而转换器之间密密麻麻的连接线更是让人眼花缭乱。将所有转换器都编写在一个模板中,会使得模板可读性极差,即使是自己编写的模板时间久远后也很难想起之前的处理思路。此外,因FME中数据处理单元为要素(Feature),一条从输入写到输出的模板在功能实现上可能存在一定的限制。为此,需要对FME模板进行模块化组织。

提升FME模板的可读性的一种最简便、直接的做法是为转换器添加书签(Bookmark)和注解(Annotation)。为一些实现特定功能或关键步骤的转换器添加注解,详细描述这个注解实现的功能。对那些组合完成同一个功能的多个转换器,则可以添加书签将其收纳其中,并在书签标题详细描述功能模块。

当模板处理器规模较小时,以上处理方式足够解决问题。但若是模板功能较复杂、处理器数量较大,则需要考虑别的处理方式。

Custom Transformer

解决方案之一是使用自定义转换器(Custom Transformer)。

自定义转换器有点类似于编写代码时定义的函数(function),将模板中具备复用价值或者规模过大的的数据处理流程提取为单独的功能模块。我们在定义自定义转换器时,需要设计好数据处理流的起点和终点,确保功能完备简便易用,同时定义好转换器的输入输出。自定义转换器可以定义多个输入节点和多个输出节点。

自定义转换器的定义和使用包括以下几个步骤:

  1. 编写模板数据处理流;
  2. 自定义转换器,指定转换器输入、输出节点;
  3. 保存自定义转换器;
  4. 安装(install)自定义转换器
  5. FME Desktop中查阅调用自定义转换器

需要注意的一点是,当对自定义转换器做了修改后,需要升版/覆改原来的自定义转换器模板,同时,还需要安装新的自定义转换器。而原先使用过旧版自定义转换器的模板,需要同步更新。

自定义转换器定义完成后,它的使用就如同FME Desktop中普通转换器一样,直接键入关键字即可查阅调用,使用连接线连接其与前后转换器的输入输出节点。与平台自带的普通转换器一致,自定义处理转换器输入输出均是要素,它适用于逐行处理要素,这种特点使得它无法满足一些场景下需求,而下文即将介绍的工作空间运行器(WorkspaceRunner)正好可以弥补自定义转换器在这方面的不足。

WorkspaceRunner

FME中对它的描述:

Runs an additional FME Workbench workspace on the local computer by spawning a new FME process. This transformer is useful for batch processing, especially in conjunction with the Directory and File Reader.
通过在本地计算机生成新的FME进程来运行另外的FME模板工作空间。介个转换器在批处理中用处很大,与文件夹和文件读取器配合使用时尤甚。

说人话就是它可以在一个FME模板(主模板)中调用另一个FME模板(子模板),同时输出子模版执行状态。

我们来设想那么一个场景:我们需要读取一个目录下所有地理数据库,并将这些地理数据库复制到另一个指定文件夹,复制完成后对数据库中的要素做属性操作。

以上场景如果想要在单独一个FME中实现,你会发现有一些困难,因为FME中的FileCopy转换器没有输出节点,因此无法判断文件复制完成状态。那么如何才能实现这个功能?

我们可以转变思路,把复制文件的功能单独形成一个FME子模板(WorkspaceRunner),它接收主模板传入的文件路径,执行成功后将主模板后续处理流程接入WorkspaceRunnerSucceed节点之后。

WorkspaceRunner的使用流程如下:

  1. 插入WorkspaceRunner转换器;
  2. 指定子模板,配置输入参数;
  3. 将后续处理流程接入WorkspaceRunner

与自定义转换器不同,WorkspaceRunner封装的是一个更为独立、封闭的功能模块,除了必要的入参外不需要其他配置项,并且它的处理结果也并非由输出节点直接输出,它更适用于存在异步处理情况的处理流程中。

【FME】模板模块化组织思路相关推荐

  1. 以分割栅格为例实现FME模板的方案优化

    一.利用FME分割栅格 (一)问题的产生 对于FME使用者来说,利用FME完成栅格的批量分割是一件极为平常且容易的事情.只需要输入栅格和确定分割方案就可以实现利用FME对栅格数据的分割,再配合FME的 ...

  2. FME入门视频教程:第二节 FME模板的使用,视频讲解如何使用已经做好的FME模板工具

    ​教程简介 本教程为适合新手学习的FME软件入门级教程,对FME的功能概念.界面及常用设置.数据读取.数据输出.转换器的使用.参数的使用.自定义转换器等几个方面进行讲解,引领进入FME的精彩世界. 课 ...

  3. 驴妈妈客户端频道页模块化设计思路

    Hello ,iOSTips的读者朋友们大家好,我是来自驴妈妈的[傅说君],喜欢一本正经的傅说八道.由于老峰已经放假出去浪了,今天的文章由我来分享,Trust me,傅说君分享的都是干货,嗯比老峰的干 ...

  4. FME模板兴趣班第五期任务小结

    作者:欣欣 现在每次出模板兴趣班题目的时候,其实还蛮费脑筋的,一方面希望题目能够跟大家的工作相结合:其次还要考虑不同技术水平的人都能参与进来:然后还要考虑题目的通用性,是否对大部分人都有帮助.所以很感 ...

  5. FME模板兴趣班第十八期(面遮挡处理) 任务小结

    班长欣欣 一.题目说明 对面进行遮挡处理,处理要求如下: 多个面之间存在压盖,要求压盖区域用Level高的遮挡Level低的,并将压盖区域从Level低的面中擦除.如下图所示: 面1.面2.面3 的L ...

  6. Java实现模板写作系统,java+servlet+mysql实现的学生信息管理系统的毕设模板及指导思路...

    <p style="font-family:" font-size:16px;text-indent:2em;color:#666666;background-color:# ...

  7. 【地铁测量-车站】02 车站模板抄平思路

    这张图是我在北京地铁6号线二期时候的拍的照,当时施工队搭建好模板通知工程部,工程部下了交底让测量队去模板抄平, 车站跟房建那种不太一样,1米线打出来不好使,控制的不精确. 下面是老王测量上班记演讲的模 ...

  8. iOS 组件化,插件化,模块化设计思路分析

    iOS 组件化,插件化设计思路分析 前言 随着用户的需求越来越多,对App的用户体验也变的要求越来越高.为了更好的应对各种需求,开发人员从软件工程的角度,将App架构由原来简单的MVC变成MVVM,V ...

  9. 前端html页面模块,页面模块化实现的条件和基本实现思路 – WEB前端开发

    页面模块化实现的很大的受制于页面的结构和表现:一个统一的页面结构和表现能很好的实现页面的模块话. 比如一个"网友评论"模块这个会在很多地方使用到,比如日志,照片,等等,如果这个&q ...

最新文章

  1. JSP/Servlet实验室设备管理系统文档
  2. 推荐:微服务架构的深度解析!
  3. P1282 多米诺骨牌 (差值DP+背包)
  4. 后端Coder如何做好代码设计?
  5. noclassdeffounderror java,从终端运行Java文件时出现java.lang.NoClassDefFoundError
  6. 【Python CheckiO 题解】Secret Message
  7. 纽曼皮尔逊准则Matlab实现,纽曼-皮尔逊准则,Neyman Pearson Criterion,在线英语词典,英文翻译,专业英语...
  8. spark sql hbase java_Spark 读写 HBase 的两种方式(RDD、DataFrame)
  9. 图论 —— 图的连通性 —— Kosaraju 算法
  10. mac 使用 pf 做端口转发
  11. PAT 1103 Integer Factorization[难]
  12. 实习踩坑之路:利用Java8新特性实现不同范型List之间的相互转换
  13. Angular服务器端渲染
  14. (转)用纸笔解释比特币挖矿算法原理
  15. php实现ps修图,ps皮肤处理精修方法
  16. 2010年8月刊:精选热门微博
  17. sqlserver数据库如何快速查看表结构sql
  18. 出价成本计算机软件,关键词移动如何出价_移动出价比例设置的注意事项
  19. 什么是电商e-commerce
  20. 复现 MMDetection

热门文章

  1. 深圳 IT 男打人后疯狂凡尔赛,还教育民警,这回把 IT 人的脸都丢尽了……
  2. 操作系统(第四版)期末复习总结(上)
  3. 字符串根据字节长度进行截取并展示选中效果——js字符串获取字节长度
  4. Java 验证回文串
  5. 基于UE -Traffic_ SINR – Statistics — 手机在线视频流量对业务速率、小区容量影响分析
  6. 三言|格局决定结局 态度决定高度
  7. c语言字符串中字母降序数字升序,将字符串以ASCII码降序排列
  8. UE4-PostProcessVolume(后期处理盒子)
  9. 印度这事真的干的挺棒的! |
  10. 无需改动代码实现jasypt加密