• 【FME】模板模块化组织思路


    实现复杂功能的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封装的是一个更为独立、封闭的功能模块,除了必要的入参外不需要其他配置项,并且它的处理结果也并非由输出节点直接输出,它更适用于存在异步处理情况的处理流程中。

    请添加图片描述

  • 相关阅读:
    NFT是什么?
    Java PipedOutputStream类简介说明
    Docker安装Nginx并修改Nginx配置文件
    入股合作协议要不要写章程
    电脑突然开机无反应,怎么办
    基于java+springmvc+mybatis+vue+mysql的水果食品果蔬生鲜商城销售系统
    java 多个 @Scheduled定时器不执行
    android自定义View: 饼状图绘制(四)
    【数据集】指针式圆形表计关键点数据集
    406. 根据身高重建队列
  • 原文地址:https://blog.csdn.net/baidu_26646129/article/details/126524214