动态工作流:从多个源派生目标数据结构

 

原文地址:

https://knowledge.safe.com/articles/33838/dynamic-workflows-destination-schema-derived-from.html?smartspace=dynamic-workspaces

一、下载

DynamicWorkflows.zip

二、从多个源派生目标数据结构

动态工作空间指写模块数据结构不是来源于标准的工作空间中的定义,而是从已有的数据集结构中或列表属性构造的结构中获取。

多数情况下写模块数据结构来自一个数据源,但有时需要从多个源中构造一个写模块的数据结构。

这个示例使用列表属性构造写模块数据结构,但使用多个源获取执行此操作需要的信息。这是一种能够将不同数据集合并在一起并使用组合模式进行写出的方法——所有这些都是动态的。

具体来说,这里有一个转换公园数据集的工作空间。来自第二个数据集的属性需要添加到公园中并写出。因为事先不知道这些属性,所以有必要使用动态转换;并且由于具有多个数据结构源,所以必须使用列表属性的技术。

2.1 创建列表

如前面文章所述,创建动态数据结构需要的列表属性是attribute{}.name attribute{}.fme_data_type——这两个列表属性定义了写模块属性的名称和数据类型。

除了从头开始构建这些内容之外,还可以使用名为“SchemaAny Format的读模块格式直接从主数据集中提取这些内容,例如:

Attribute

Value

attribute{0}.fme_data_type

fme_int16

attribute{0}.name

ParkId

attribute{1}.fme_data_type

fme_int16

attribute{1}.name

RefParkId

attribute{2}.fme_data_type

fme_varchar(40)

attribute{2}.name

ParkName

 

类似的,可以从次要源数据中提取属性列表:

Attribute

Value

attribute{0}.fme_data_type

fme_varchar(30)

attribute{0}.name

ZoneName

attribute{1}.fme_data_type

fme_varchar(30)

attribute{1}.name

ZoneCategory

 

该工作空间需要解决的主要问题是将这两个列表合并到一起作为一个输出的数据结构定义。

三、工作空间

工作空间如下:

https://knowledge.safe.com/storage/attachments/4725-multisourcedynamic1.png

这里有三个读模块:

  • 主要(Primary)数据集读模块
  • 次要(Secondary)数据集读模块
  • Schema 读模块

Schema读模块从两个源数据集(主要和次要)中读取数据结构,因此得到两个要素。炸散属性列表,为每个属性创建一个要素,然后使用一个Aggregator转换器将它们合并到一个列表中。多余结构信息使用AttributeKeeper转换器删除。

https://knowledge.safe.com/storage/attachments/4721-multisourcedynamic2.png

读取主要和次要数据集——这里主要数据集是固定的,次要数据集是通用/动态的——且信息由次要数据集传输到主要数据集(这里使用SpatialFilter:

https://knowledge.safe.com/storage/attachments/4726-multisourcedynamic3.png

最终使用FeatureMerger转换器将数据结构列表属性挂接到主要要素上:

 

https://knowledge.safe.com/storage/attachments/4724-multisourcedynamic4.png

写模块要素类设置为dynamically (动态)并使用 Schema Feature as a schema source(模式要素作为模式源)。

四、输出

运行工作空间并检查输出。你会发现每个公园都具有公园所在开发区的信息。

关键的部分在于你可以更改zoning这个源数据集为其他数据(任何格式),将动态附加这些要素的属性并在输出中使用。

五、注意

  • 这里主要数据集读模块为固定模式且设置为MapInfo格式,但是其实并不需要这样做。类似的,写模块也可以设置为通用,以便写出任何数据格式。
  • 次要数据集读模块为Generic,可以为任何格式。
  • 次要数据集可以为任何数据结构,但是它需要包含与SpatialFilter中的公园重叠的要素
  • Schema读模块源数据集的参数共享主要和次要数据集,意味着相同数据集不必选择两次。

六、动手试一下

1. 添加读模块和数据结构

添加两个MITAB读模块,一个用于读取Zones数据,一个读取Parks数据,确保为两个读模块选择了Single Merger Feature Type(合并要素类)选项。然后添加一个Schema读模块。对Schema读模块,首先添加Zones.tab文件,然后点击Parameters(参数)。在Additional Attributes to Expose中,添加如下列表。然后点击OK添加读模块到工作空间。在导航窗口中,找到Zones[SCHEMA]读模块,点击它下方的Source Dataset参数,点击下拉列表,点击Select Mulltiple Files/Folders,添加Parks.tab文件。

  • 读模块格式: MapInfo TAB (MITAB)
  • 读模块数据集: <Tutorial>\Zoning\Zones.tab
  • 读模块格式: MapInfo TAB (MITAB)
  • 读模块数据集: <Tutorial>\Parks\Parks.tab
  • 读模块格式: Schema (Any Format)
  • 读模块数据集: <Tutorial>\Zoning\Zones.tab, <Tutorial>\Parks\Parks.tab
  • 参数: Additional Attributes to Expose(需要额外暴露的参数):
    • attribute{}.fme_data_type
    • attribute{}.name
    • attribute{}.native_data_type
    • fme_basename
    • fme_format_long_name
    • fme_format_short_name

https://knowledge.safe.com/storage/attachments/7898-ex8-1b.png

2. 设置 SpatialFilter

Zones读模块连接到SpatialFilter读模块的Filter输入端口,Parks读模块连接到Candidate输入端口。在参数中设置Spatial Predicates to Test(空间谓词测试):

  • Filter Contains Candidate
  • Filter Intersects Candidate
  • Filter is Within Candidate
  • Filter Touches Candidate

https://knowledge.safe.com/storage/attachments/7899-ex8-2b.png

3. ListExploder

Schema读模块添加ListExploder。在参数框中设置List Attributeattribute{}

4. Aggregator

ListExpolderElements输出端口添加一个Aggregator。设置Accumulation Mode Merge Incoming Attributes.。勾选Generate List,设置 List Name attributeSelected Attributes 中添加 fme_data_type name

https://knowledge.safe.com/storage/attachments/7900-ex8-4b.png

注意: 旧版本的FME没有Add to list Select Attributes 参数。如果你打开附件的模板,它也没有这两个参数,因为这个工作空间是用老版本创建的。我保留这个模板是考虑使用老版本的FME也可以打开并使用它,要获取这些参数,只需要简单的右键并选择Upgrade Transforder(升级转换器)即可。

5. AttributeKeeper

我们只想保留暴露的两个属性。在Aggregator后添加AttributeKeeper。在参数框的Lists to Keep中选择attribute{}.fme_data_type attribute{}.name

https://knowledge.safe.com/storage/attachments/7901-ex8-5.png

6. FeatureMerger

我们使用FeatureMerger把所有的合并到一起。把SpatialFilterPassedFailed输出端口连接到FeatureMergerRequestor输入端口,将AttributeKeepers输出端口连接到Supplier输入端口。在FeatureMerger参数框中,设置Requestor3Supplier3,其他保留为默认。

7. 写出到动态写模块dynamic writer

在工作空间中添加一个MITAB写模块,确保它设置为DynamicAdvanced)(动态)。把它连接到FeatureMergerMerged输出端口。一旦添加到工作空间,在参数框中设置Schema Sources“Schema From Schema Feature”。在Mergerd输出端口连接一个Inspector然后运行转换。

  • 写模块格式: MapInfo TAB (MITAB)
  • 写模块数据集<Tutorial>\Output
  • 表定义: Dynamic (Advanced)

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值