Link: http://blog.163.com/antufme@126/blog/static/140492492201022545726452/?suggestedreading&wumii

关键词:动态扇出

FME2010 案例分析: 动态批量转换  

2010-04-22 14:20:16|  分类: FME应用案例 |  标签:扇出  |举报|字号 订阅

    
 

下载LOFTER客户端

 作者:walh

联系方式:mark.ireland@safe.com

整理:乱马

 这个案例是由一个用户在FMETalk用户组提出的问题引出的:

客户在一个目录下有大量的Shape格式的文件。所有这些文件都要被重投影到另一个坐标系。我们正考虑如何进行批量自动化的转换。可以预见的主要问题是,我不能就shape的属性结构进行统一。但是,转换不需要对属性做任何操作,只是将它们复制到目标文件。

能够处理未知属性对于FME2010的动态功能是一件容易的事情。然而,动态工作空间不会做的是重新创建目录结构。事实上,FME默认的行为把所有源数据合并成一个单一的输出数据集。

因此,本文介绍了如何在FME中集成动态和批处理工具。

 源数据

本案例采用了FME的标准样例数据FME Sample Dataset。

在默认安装目录C:FMEDataData中,包括了系列的shp格式的数据。我们将会把这些数据重投影到C:FMEDataReprojectedData目录中。

 创建工作空间

创建一个读取多源数据集的工作空间是非常简单的----同样容易的是,设置它来读取包含数目未知的数据集文件夹。

下图,创建工作空间:

首先设置源数据和目标数据(都是Shape格式),然后选择"添加目录"图标:十字叉形状

 在设置对话框中,通过选择所有子目录的选项,来选择所有源数据目录。

写数据集的参数并不重要- 而事实上它是可选的,所以我甚至不需要设置。最后,确认使用的是动态架构的工作流程,然后单击确定以创建工作空间。它看起来像这样

(下图):

 要注意的是,在目标要素上面没有任何属性,在动态工作空间中是不需要的。源数据要素类型合并了所有的属性到一个shape的数据集,这个对我们不重要。

 获取源数据文件夹

我们需要知道所有源数据来自哪个目录,能够在写到目标数据的时候,写入相同的相对路径。可以通过设置要素的fme_dataset属性来进行,因此首先需要打开工作空间中的源要素类的属性定义对话框,选择Format Attributes选项页,选择fme_dataset属性,如下图:

 现在这个fme_dataset属性已经可以用了,但是我们需要的是文件夹名称,而不是文件夹+文件名的全名。所以使用FilenamePartExtractor转换器进行文件夹的提取,如下图:

 这里我们提取fme_dataset的目录名称,放到一个新的属性new_fme_dataset。

 设置输出文件夹

在new_fme_data中,指向的目录为C:\FMEData\Data\xxxx,xxxx包含了源数据shp文件。首先需要替换"Data"到"ReprojectedData",同时还需要去掉"C:\",这个在下面将有描述。

使用StringReplacer转换器进行,如下图:

 
 

注意,在路径设置中,需要双斜杠,因为单斜杠是保留字符,因此需要使用转义字符来保留。现在new_fme_dataset指向了目录FMEData\ReprojectedData\xxxx。

 设置扇出

现在进行数据集的扇出设置,对于数据集的扇出需要采用一个属性进行分类,这里采用new_fme_dataset作为扇出属性。

在导航窗体,找到shape写模块的设置中的Fanout参数,并双击它,如下图:

在对话框中来设置:

 正如看到的所示,设置C盘根目录C:\为扇出目录(这就是为什么在上面移除C:\)。然后设置扇出的属性条件为new_fme_dataset。

 转换数据

所有设置完成后,就可以进行任何我们需要的转换了。案例中进行的是重投影变换。如果shape格式的数据带有一个工程prj,我们就不需要设置读模块的坐标系参数,只是需要设置写模块(目标数据集)。

 运行工作空间

进行转换,日志文件就会记录读入多少要素,写出多少要素,如下图:

 通过windows资源管理器,可以查看转换后的结果目录:

利用FME Viewer可以查看转换后的数据,属性没有任何变化,只是坐标系发生了改变:

 更多的考虑

能够从文件夹和子文件夹中读取一组数据集是非常有用,其中任何文件可以在任何目录位置。更重要的是,这个功能是动态的,在这个意义上讲,在运行时,它才去搜索数据集,不是在创建工作空间的时候。所以,你可以添加和删除任何文件,在转换开始前的准备阶段。扇出是另外一个方法对于多目标输出(或者批处理)。也可以在Worbench中使用菜单File->Batch Deploy的功能,或者组合使用FilePath Reader(文件路径读模块)和WorkspaceRunner函数来运行工作空间,并传递源数据参数到这个工作空间。

你所有的源数据越多,扇出的功能发挥的越好,因为所有的数据都会读入并缓存到一个单独的转换过程。采用其它的方法,你将会降低性能,因为每个源数据都是单独处理的。

 FME Server实施

尽管我们没有使用一个Web服务来运行数据转换,但是这个方案有可能利用FME Server来完成。因为FME Server的构架是可伸缩的,所以对于海量数据的处理效果会更好。

在这个案例中,你可以定义使用WorkspaceRunner方法(更多的情况下是FMEServerJobSubmitter方法),因为每个数据集,在批处理过程中,可以在单独的FME转换引擎(FME Engine)上运行,这样可以极大的提高性能和使用系统资源。

我们希望这个案例你能感兴趣,这个能说明动态工作空间为什么重要,同样演示了其他任务,比如批处理中使用扇出功能。

FME2010 案例分析: 动态批量转换的更多相关文章

  1. Oracle学习之路-- 案例分析实现行列转换的几种方式

    注:本文使用的数据库表为oracle自带scott用户下的emp,dept等表结构. 通过一个例子来说明行列转换: 需求:查询每个部门中各个职位的总工资 按我们最原始的思路可能会这么写:       ...

  2. makefile与动态链接库案例分析——动态库链接动态库

    http://blog.csdn.net/huqinwei987/article/details/50517780 背景:效率考虑,要重用把服务器主备机方案,以库Libmdpha(高可用)的形式加进主 ...

  3. 18.jvm调优工具及案例分析

    目标: Jmap.Jstack.Jinfo详解 JvisualVm调优工具实战 JVM内存或CPU飙高如何定位 JState命令预估JVM运行情况 系统频繁Full GC导致系统卡顿实战调优 内存泄漏 ...

  4. SQL性能优化案例分析

    这段时间做一个SQL性能优化的案例分析, 整理了一下过往的案例,发现一个比较有意思的,拿出来给大家分享. 这个项目是我在项目开展2期的时候才加入的, 之前一期是个金融内部信息门户, 里面有个功能是收集 ...

  5. 《深入理解Java虚拟机》-----第5章 jvm调优案例分析与实战

    案例分析 高性能硬件上的程序部署策略 例 如 ,一个15万PV/天左右的在线文档类型网站最近更换了硬件系统,新的硬件为4个CPU.16GB物理内存,操作系统为64位CentOS 5.4 , Resin ...

  6. (转)linux top命令中各cpu占用率含义及案例分析

    原文:https://blog.csdn.net/ydyang1126/article/details/72820349 linux top命令中各cpu占用率含义 0 性能监控介绍 1 确定应用类型 ...

  7. java 并发基础,及案例分析

    对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了,然而并发问题是令我们大多数程序员头疼的问题,但话又说回来了,既然逃避不掉,那我们就坦然面对吧~今天就让我们深入研 ...

  8. 软工案例分析之OJ

    项目 内容 这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 案例分析作业要求 我在这个课程的目标是 和我的团队开发一个真正的软件,一起提升开发与合作的能力 这 ...

  9. K米APP案例分析

    关于 K米 -- 的案例分析 产品 K米的APP (全国KTV点歌,手机直播,互动,交友,预订)的Android客户端 第一部分 调研,评测 评测: 软件的bug,功能评测,黑箱测试 • 下载并使用, ...

随机推荐

  1. 数据库链接池 durid 的配置参数详解

    这里我主要介绍druid 比较重要的参数解释,不做druid的使用介绍,druid虽然功能强大,但是如果对配置参数理解不到位,性能非但不能达到很优,而且会出现很多异常,所以使用druid之前一定要清楚 ...

  2. centos7下的防火墙

    在cengos7下的防火墙是交给systemctl来管理服务和程序,包括了service和chkconfig. 查看firewalld.service 是否启动 systemctl stop fire ...

  3. PHP迭代器的小坑

    使用PHP迭代器的时候,需要主要到很多迭代器是对内部迭代器的封装,当外部迭代器移动的时候,实际上也是在移动内部迭代器. 示例一:命令行 &"C:\wamp64\bin\php\php ...

  4. CS231n课程笔记翻译4:最优化笔记

    译者注:本文智能单元首发,译自斯坦福CS231n课程笔记Optimization Note,课程教师Andrej Karpathy授权翻译.本篇教程由杜客翻译完成,堃堃和李艺颖进行校对修改.译文含公式 ...

  5. Linux运维学习笔记-文件权限知识总结

    权限总结: 1. 可读r:表示具有读取\阅读文件内容的权限: 2. 可写w:表示具有新增.修改文件内容的权限: a. 若果没有r配合,那么vi编辑文件会提示无法编辑(但可以强制编辑),echo可以重定 ...

  6. .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换

    .NET/C# 程序从 Main 函数开始执行,基本上各种书籍资料都是这么写的.不过,我们可以写多个 Main 函数,然后在项目文件中设置应该选择哪一个 Main 函数. 你可能会觉得这样没有什么用, ...

  7. POJ3662电缆

    题目:http://poj.org/problem?id=3662 二分答案.然后边权>mid的边的边权2记为1,否则记为0.找一个边权2的最短路,看dis[n]是否<=K. 别忘了不能到 ...

  8. bzoj1013球形空间

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1013 根据距离式子,两个点的话,两边平方再消掉x^2之后有: a1^2 - 2*a1*x1 ...

  9. SQL Server中的事务与其隔离级别之脏读, 未提交读,不可重复读和幻读

    原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中 ...

  10. Android 查看Android版本的方法

    1.通过源码查看 Android 版本 路径:build/core/version_defaults.mk PLATFORM_VERSION := 2.通过编译时终端输出查看 ============ ...