FME 2013应用例子:数据下载以及“File Copy(文件拷贝)”格式

 

 

原文发布时间:2013-10-12

翻译:小新

翻译文章地址:https://blog.safe.com/2013/07/fmeevangelist117/

这篇文章讲述FME中一个鲜为人知的写模块格式,以及它在FME Server数据下载服务中的应用。我将展示一个应用它的例子:从我们的网站下载标准FME样例数据。

 

数据下载培训

你知道吗?当你参加safe公司的在线培训课程时,你得到一个亚马逊网络服务虚拟机实例,在这个虚拟机上,已经提前装好了需要的数据。你只需要通过远程桌面连接访问,退出时断开链接即可。我们发现这是让用户进行在线培训最简单的方式。

     但是有时候用户希望可以在他们自己的电脑上开展课程,这种情况下,他们需要手动下载样例数据。

     然而,数据下载的能力并没有那么高效。数据是约200m的zip文件格式,用户需要完全下载该数据,不管他们参加的课程是否用到了全部的数据。

    即使Safe是FME Server的创始人,在FME Server中包含了数据下载服务,我也为尚未有一个很好的解决方案感到尴尬。

    那么,在2014中,我打算做到这一点。下面是如何来实现它。

 

FileCopy基础

      首先,我们介绍什么是FileCopy。

      FileCopy写模块是鲜为人知的一个FME功能,因为它的概念有些模糊,所以使用率没有它应该有的那么高。它不是一个数据格式,相反,每个进入它的要素将触发一个文件系统拷贝(或移除)命令:

      

像你看到的这样,写模块要素类中包含了格式属性,它们定义了源文件和目标文件。这些属性是:

·         filecopy_source_dataset

·         filecopy_dest_dataset

·         filecopy_dest_filename

我只是简单的设置一个格式属性为源文件/文件夹,另一个为目标文件夹/文件名。然后,在运行时,数据就从一个地方拷贝到另外一个地方。

一个例子是元数据文件的使用。例如,你有一个Shape写模块,创建文件myData.shp,接着你可能会使用一个FileCopy写模块,将myMetadataTemplate.xml 拷贝到myData.xml中。这样你可以通过拷贝已有的标准文件来自动创建元数据文件。

FileCopy还可以用于拷贝写模块的输出到不同的位置。例如,我输出一个Shape数据到本地文件系统中,并使用FileCopy自动拷贝该数据到远程文件系统的中心数据仓库,以便其他用户可以访问到这个数据。

但是我的计划是在FME Server上使用这个格式,这样将变得更加有趣。

 

FileCopy和数据下载( Data Download

为什么对于我而言,FileCopy是最好的方法?

在很多FME Server的数据下载服务中,我们希望可以让用户选择下载数据的格式(Generic Writer)、图层(Feature Types to Read)或坐标系(Reprojector转换器),像下面这样:

FileCopy写模块用来做这个事情是非常好的,因为数据已经存在于所需要的格式中了。我只需要简单的将选择的培训课程映射到一系列文件,并将他们输入到FileCopy中。在FME Server的数据下载服务中,FileCopy输出zip文件供下载。

这样用户可以获得准确的副本文件,无论我选择什么提供给他们。下一节将展示我如何进行设置的。

 

Training Downloads Workspace

培训下载工作空间

我的工作空间首先扫描我的培训文件系统(C:FMEDataData),并搜寻数据文件夹。我使用Directory and File Pathnames读模块来完成这个任务。它和FileCopy一样,是FME的另一个独特的功能,它将返回指定位置中的文件和文件夹列表。

 这点看上去很奇怪——难道我不知道有哪些文件夹存在吗?-但随着时间的推移,数据将发生变化,更多的文件夹会被添加。在这个方法中,我的过程是动态的。如果添加了新的文件夹,我不需要修改工作空间来处理它。

工作空间的下一个步骤是将选择的课程映射为一个数据文件夹列表。此刻,这个过程是硬编码的,但是我希望通过外部查找表来替代,使这个过程更加动态。

例如,Esri培训课程需要Parks,Zones,以及Airports数据文件夹,不需要Raster文件夹(该课程中没有使用这个数据)。

接着我用Tester转换器做一个简单的判断,检查我读取的文件夹是否包含在列表值中。

最终,FileCopy写模块将提供一个通过判断条件的数据文件夹列表: 

      

当我在Server上运行这个模板时,将询问我下载哪个课程的数据,接着数据会以zip文件的方式提供下载:

     

 几乎就是这么简单!

 

Final Workspace

最终的工作空间

实际上,最终的模板空间看起来是这样的,有一点复杂:

    

 因为一些原因,所以它变得更复杂。

首先,我要发布的内容包含的不仅仅是数据(粉色书签),还有工作空间示例(黄色书签)以及自述文件(绿色书签)。

其次,我希望一次可以处理多个课程。例如,我希望用户可以同时选择KML和Esri课程。

   

为了实现这个,我使用了FME列表。被选择的课程以逗号分隔符组成字符串,我将它分裂成一个列表,然后将列表打散为独立的要素。接着我将每个课程匹配后的文件列表作为独立的要素。DuplicateRemover转换器确保我不会将同样的文件夹发布两次,即使它在两个课程中都有使用到。

 

Examples

举例

我们已经有几个FME用户(我所知道的)以这样的方式使用FileCopy,所以这并不是一个纯理论的工程。

此外,你还可以在FMEpedia中找到一些例子。

这个例子演示了如何使用FileCopy将元数据包含进来作为数据下载服务中的一部分。

这个例子也更加有趣,说明了如何用它写数据到一个已有的Geodatabase文件中,并使用FileCopy将它添加到zip文件中。

这里需要的一个条件是将FileCopy写模块放到Esri写模块之前。

 

总结

总结一下,我希望在这里获得一些想法。

首先来看FileCopy写模块。你可能并不知道它,也不会在Desktop或Server的转换中使用它。

其次,如果你想通过数据下载服务(Data Download Service)传送数据,注意使用FileCopy意味着你可以简单的移动数据——并且将它插入到下载的zip文件中——无需去读/写它。

另外,我可以在FME云中使用它,它是一个FME云使用的完美例子。FME云是虚拟的,对FME Server有版本要求。我们正在进行beta版测试,网页上有公布价格。

总是,注意我的下一个邮件,我会让你先睹为快,看看FME云如何进行工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值