原文发布时间:2017/9/6 16:37:18
注意:如果你使用FME2015.1或更低版本,请查阅:
https://knowledge.safe.com/articles/21787/dynamic-workflows-20150-and-below-destination-sche.html
目标格式源自格式要素
这类工作流利用列表属性创建属性格式。列表属性是FME在单个属性中允许多个值的一种方式。动态模式下的写模块会检查每个要素类的第一个要素,判断其是否存在特定的列表属性。如果这个列表在第一个要素处被发现,那么,它会为写模块生成相应的格式。
在本文中,我们创建了一个处理城市公园信息的工作空间。目标是,把公园的数据转换成拥有新格式的MapInfo tab文件。这个新的格式只包含公园名的信息,而其他的内容将被移除。如果使用了一个标准的动态工作空间,那么输出的格式会借鉴输入的数据集,这不是本例中所需要的。
创建列表
从FME2015.1起,我们可以从FeatureReader的“Schema”端口获取格式列表。另外,转换器AttributePivoter,SchemaSetter以及读模块“Schema(any format)”都可以创建格式列表。
在这个简化的例子中,列表将由创建属性的转换器AttributeCreator和PythonCaller生成。
列表的元素格式如下:
列表名:attribute{}
列表的每个元素有两个成分:
l name:要包含在格式中的属性名称
l fme_data_type:属性的数据类型
比如:attribute{}.name和attribute{}.fme_data_type.
有效的FME数据类型包括:
使用特定格式类型的格式
如果你希望为属性使用特定格式的数据类型(也就是,非FME数据类型),再上述两个属性之外,还要再包含两个属性:
比如:
该结果是一个新的Geodatabase要素类,它包含一个“guid”类型的属性“myAttribute”。
添加几何:如果你想为每个输出的要素类(Shape,Geodatabase)指定特定的几何,那么,你需要定义该几何类型。可按如下方式完成:
比如:
可以为Geodatabase定义点类型的要素类。
分布说明
1、将Reader添加到工作空间
l 读模块格式:Autodesk MapGuide Enterprise SDF
l 源文件:<Tutorial Download>\resources\InteropolisDatabase.sdf
l 选择要素类:Default.CityParks
2、定义新的格式
利用AttributeCreator,定义新的格式。
3、设置模式映射
添加AttributeManager改变当前属性名,以匹配数据库格式。
4、添加动态写模块
添加写模块:
l 写模块格式:MapInfo TAB(MITAB)
l 数据集:<Tutorial Download>\output
l 格式定义:Dynamic(Advanced)
一旦写模块被添加到工作空间,将它连接到AttributeManager,并打开参数设置页面。将Schema Sources设置成"Schema From Schema Feature":
运行工作空间,查看结果。
高级示例1:使用FeatureReader
在接下来的示例中,在用FeatureReader将数据读入工作空间时,执行空间查询。输出的格式通过生成列表属性来实现,生成列表过程可直接在FeatureReader内实现。因为属性相关的信息在工作空间运行前是未知的,因此,列表属性是自定义输出格式的最好方式。从FME 2015.1开始,FeatureReader就包含一个实现该目的的模式输出端口。
查看完整示例:Extracting data within a clipping polygon
高级示例2:修改格式要素
这篇文章深入解析了格式要素以及如何在工作空间中编辑它。Modifying the Schema Feature
记录
如果在使用上述技术时,报错“Geometry Not Specified”;尝试设置下列属性:fme_geometry{0} = <fme_type>。这适用于shape文件以及一些其他的格式。了解更多<fme_type>内容,请看:FME Geometry Types