Matcher轉換器的使用(一)

Matcher轉換器的使用(一)

原文釋出時間:2014-06-05

原創:小新

FME中有這樣幾個轉換器可以做資料比對,首先我們最常想到的可能是ChangeDetector,這個轉換器通過兩個輸入埠,可以直接把新增(Added)和刪除(Deleted)的要素分別從兩個埠輸出,使用起來非常方便;另外一個是Matcher,通過一個輸入埠接收要比對的要素,然後分為三個埠對比對結果進行輸出;第三個是隻能做屬性比對的轉換器DuplicateRemover,這個轉換器通過屬性比對,移除該屬性重複的要素。

最近在做一個資料比對的事情時,用Matcher比較多,也發現它的引數比ChangeDetector更豐富,個人感覺使用起來更靈活,所以本篇就Matcher的使用以及一些心得做一個簡單的說明。

一、Matcher引數說明

但是對於部分資料型別這個引數有特定的含義,比如柵格、點雲來說,選擇2D、3D時比對的具體資訊,請參考幫助。

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:這個引數控制屬性比對時,是否把屬性值Empty、Missing、NULL這三種情況作為相等的值。如果引數設定為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和多邊形B,A由點(0,0)(0.3111,0.5)(1,1)(1,1)(1,0)構成,B由點(0,0)(0,1)(1,1)(1,0)構成。

A比B多了一個頂點(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轉換器演示