原文发布时间:2010-08-17
作者:毛毛虫
FeatureMerger转换器的功能是把一个要素的属性合并到另一个要素上。通过SUPPLIER端口进入到转换器的要素用来作为通过REQUESTOR端口输入的要素的新的属性。当连接属性具有相同的值时,REQUESTOR要素被连接到SUPPLIER要素。
当一个REQUESTOR找到一个SUPPLIER,来自SUPPLIER的属性被合并到REQUESTOR。如果REQUESTOR已经有了SUPPLIER的属性,保持REQUESTOR原有的属性。一个SUPPLIER可能用于多个REQUESTOR。
REQUESTOR找到一个SUPPLIER,并在COMPLETE端口输出。
REQUESTOR没有找到一个SUPPLIER,并在INCOMPLETE端口输出。
至少找到一个与REQUESTOR匹配的SUPPLIER在REFERENCED端口输出,没有跟任何一个REQUESTOR匹配的SUPPLIER在UNREFERENCED端口输出。
把属性/几何移动到另一个要素。包含了需要的属性/几何的要素可以通过SUPPLIER端口输入,接受属性/几何的要素通过REQUESTOR端口输入。
当Requestor端口找到一个Supplier端口匹配的要素,从Supplier端口的属性会被合并到Requestor的相应要素。如果Requestor已经有了Supplier端口要素相应的属性,Requestor的对这个属性的原始值会被保留。单个Supplier可能用于许多Requestors端口的要素。
当他们接受Join属性有相同的值是,Requestor 要素被连接到Supplier要素。各个端口的关系是:
REFERENCED+ UNREFERENCED+ DUPLICATE_SUPPLIER = Suppliers
COMPLETE+INCOMPLETE+EMPTY= REQUESTOR
转换器属性如下:
原始图形Suppliers端口(共七个图形,其中两个图形位于其他图形内部,是重叠但没有构成洞):
REQUESTOR端口的输入图形(共39个要素):
(图片已丢失)
当转换器设置如下时:
其中Suppliers的_count 值从0到6,REQUESTOR的_count从0到38,执行后的输出如下:



输出的REQUESTOR端口的输入的_count值为1的要素会包含所有SUPPLIER输入的要素的它自身没有的属性,如果与SUPPLIER输入的要素属性重复,则保留自身的属性。
当一个REQUESTOR对应多个SUPPLIER时,如果List Name设置了值,则输出一个含有所有SUPPLIER输入的要素属性的列表,并且不管Process Duplicate Suppliers是否设置了值,都自动按设置为Yes处理。
如果把Build Incomplete Requestors 设置为Yes,同时把Process Duplicate Suppliers设置为Yes,则输出如下图所示:
不管Requestor是否找到匹配要素,都在COMPLETE端口输出。
上面的设置是把与从Supplier端口输入的要素的属性添加到匹配的Requestor要素的属性上。
如果把Merge Type设置为Build Polygons或Build Aggregates,则在COMPLETE端口输出的几何图形变为与Requestor端口输入匹配的几何图形。如果REQUESTOR端口的输入一个要素与多个SUPPLIER输入的要素的属性匹配,并且Process Duplicate Suppliers设置为Yes,这两个Merge Type选项都会把COMPLETE端口输出的一对多的图形自动聚合。这两个选项的区别是:当设置为Build Polygons,会自动生成洞,如图:

当设置为Build Aggregates,则不会自动生成洞,保留原图形,如图:
把Merge Type设置为Build Incomplete Requestors,如果Supplier端口输入的是点,会在COMPLETE输出端口把匹配同一REQUESTOR要素的点连接成线。
如图:输入到Supplier的要素如下图:
COMPLETE输出端口的输出结果如下图:
Merge Type的下面几个Attributes and Geometry选项,是上面提到的Attributes 和Geometry的组合。
注意:如果在输入Supplier端口没有数据Join Attribute属性的要素不输出。