Matcher转换器的使用(一)

原文发布时间:2014-06-05

原创:小新

FME中有这样几个转换器可以做数据比对,首先我们最常想到的可能是ChangeDetector,这个转换器通过两个输入端口,可以直接把新增(Added)和删除(Deleted)的要素分别从两个端口输出,使用起来非常方便;另外一个是Matcher,通过一个输入端口接收要比对的要素,然后分为三个端口对比对结果进行输出;第三个是只能做属性比对的转换器DuplicateRemover,这个转换器通过属性比对,移除该属性重复的要素。

最近在做一个数据比对的事情时,用Matcher比较多,也发现它的参数比ChangeDetector更丰富,个人感觉使用起来更灵活,所以本篇就Matcher的使用以及一些心得做一个简单的说明。

一、Matcher参数说明

但是对于部分数据类型这个参数有特定的含义,比如栅格、点云来说,选择2D3D时比对的具体信息,请参考帮助。

Match Geometry:控制比对要素时的几何信息。通常我们用来对矢量进行比对,这个参数就非常好理解。2D意味着匹配2维信息(即X,Y);3D意味着匹配3维信息(即X,Y,Z),FULL需要对3维信息、度量信息以及几何特征进行匹配;NULL则不匹配几何信息,可以根据“Attribute Matching Strategy”和“Selected Attributes”的设定对要素只做属性的匹配。(这样设定之后功能就类似DuplicateRemover了)。

Attribute Matching Strategy控制比对要素时的属性信息。三个选项的意思分别是“匹配选择的属性(Match            Selected Attributes)”、“匹配除了选择的属性外的其他所有属性(Match All Except Selected Attributes)”、“匹配所有属性(Match All Attributes),这里所有的属性指除了Attribute must Differ中设定属性以外的其他所有属性”。

通过该参数再结合“Select Attributes”以及“Attribute Must Differ”就能很好的控制比对要素比对时如何进行几何+属性一致的比对。

Differentiate Empty, Missing, and Null Attributes这个参数控制属性比对时,是否把属性值EmptyMissingNULL这三种情况作为相等的值。如果参数设置为YES,则比对的属性中属性值Empty=Missing=NULL,如果设置为NO,则三种情况不相等。

Lenient Geometry Matching:该参数决定是否进行严格的几何匹配。如果设置为YES,则匹配时构成线、面的点顺序将被忽略。反之如果设置为NO,则匹配时除了形状一致外,还要求线、面的点顺序一致。

注:1、对于面来说,这个顺序不仅包括起点和终点是否一致,还包括面的方向。

      2、这个参数只对节点数相同的线、面进行比较时有用。

如我们用(0,0)(0,1)(1,1)(1,0)四个点构三个多边形,其中:

a起点到终点顺序为(0,0)(0,1)(1,1)(1,0);

b起点到终点顺序为(0,1)(1,1)(1,0)(0,0);

c起点到终点顺序为(0,1)(0,0)(1,0)(1,1);

多边形a,b,c构成的形状一致,如下图所示。但是a,b为顺时针方向,c为逆时针方向。


当该参数设置为YES时,通过matcher后,三个多边形均从Matched端口输出,说明匹配时忽略了面的节点顺序以及面的方向;

当参数设置为NO时,通过matcher后,三个多边形均从NotMatched端口输出,说明匹配时要求面的节点顺序必须一致。

Interior Vertex Tolerance: 当要素的节点数相同时,两个节点可以匹配的容差值。节点的容差小于该容差值的时候,要素之间可以匹配。

如面a的坐标分别为(0,0)(0,1)(1,1)(1,0);

b的坐标分别为(0,0)(0,1.1)(1.1,1)(1,0);

如果把该参数设置为0.11(一个大于0.1的数),则通过matcher后,两个多边形均从Matched端口输出;

如果把该参数设置0,则通过matcher后,两个多边形将从NotMatched端口输出。

注:该参数只针对内部节点有效。

Extra Vertex Tolerance当要素的节点数不同时,任意一个多余节点到与之相邻的两个可以匹配的顶点连接线之间的距离容差。如果距离小于该参数,则要素可以匹配;如果距离大于该参数,则要素不能匹配;

这个还是用图来说明吧:

如下图的两个多边形A和多边形BA由点(0,0)(0.3111,0.5)(1,1)(1,1)(1,0)构成,B由点(0,0)(0,1)(1,1)(1,0)构成。

AB多了一个顶点(0.3111,0.5



A和B叠加显示如下图所示,红色箭头是A多出的顶点,且与之顶点相邻的两个可以匹配的顶点分别是(0,0)(0,1),z这两个顶点的连接线如下图所示:


该点(0.3111,0.5)到这个连接线的距离即它的X坐标值0.3111,我们把这个参数设置为0,两个面将从NotMatched端口输出,如果我们设置该为大于或等于距离值0.3111的任意值时,则会从Matched端口输出;

注:该参数必须将Lenient Geometry Matching:设置为YES才有效

Match ID Output Attribute可以匹配的要素将带上一个相同的ID值,并存储在该参数设置的属性字段中。这样再后续处理中如果需要对可以匹配的要素分组处理时,将变得非常方便。

总结:本文详细介绍了Matcher的常用参数,并举了一些例子说明部分参数的使用。当对每个参数都深入理解后,通过灵活的设置,单用Matcher就可以在变化检测中发挥挺大的作用。

关于更详细的应用案例,请期待Matcher转换器的使用(二)。

另有相关视频:Matcher转换器演示







猜你喜欢

转载自blog.csdn.net/fmechina/article/details/81036105