全茂林
(福建省測繪院,福建 福州 350003)
在現階段生產作業過程中,因數據格式轉換、投影變換等操作,生產的矢量數據會存在一些拓撲錯誤。常見的拓撲錯誤有面要素的縫隙、重疊和線要素的毛刺、偽結點、懸掛線等。此類拓撲錯誤往往很難通過肉眼發現,若單單依靠人工處理,將會耗費大量的時間,并且可能并不能完全消除此類錯誤。對此,借助相應功能的工具處理將是一個很好的選擇。本文探討的重點是如何設計制作一種能滿足所需要求的工具,筆者提出一種利用FME工程數據處理模板和ArcGIS數據互操作拓展模塊的方法來生成工具的方案。
FME(Feature Manipulate Engineering)是一個支持多元數據的提取、轉換、加載、處理的強大工具,它是完整的空間ETL解決方案[1]。FME工具庫中包含有400多種功能的轉換器,通過這些轉換器,可以實現數據的處理和轉換。此類轉換器可以單獨使用,也可組合應用,組合應用的方式是通過制作模板進行的。其模板制作原理就是在FME工作空間(FME Workbench)中調用多種不同功能的轉換器和輸入輸出模塊,然后通過不同轉換器的組合來實現各種功能。
FMEWorkbench模塊是一個空間ETL(提取、轉換和加載)創作環境,可快速定義圖形化的流程,進行數據轉換、變換和集成[2]。在FMEWorkbench可以完成柵格要素、幾何要素等多種類型數據轉換,也可進行圖形、屬性等數據的操作,它是一種用于開發數據變換工具的可視化工作流編輯器,在啟用Data Interoperability擴展模塊后,可以用該編輯器創建空間ETL工具[3],以用來配合其他軟件使用,其具有強大的功能。
ArcGIS數據互操作(ArcGISData Interoperability)是由ESRI公司和Safe公司共同開發的一款擴展模塊,它可以直接讀取和使用100多種常見的GIS矢量數據格式,包括很多演化的GML規范。此外,可使用多種格式傳送GIS數據[3]。其原理是通過空間ETL工具(Spatial ETL Tools)調用FME模板,使其能在ArcGIS中兼容使用FME功能,使數據操作方法多樣化。使用空間ETL工具需另行安裝,然后在ArcGIS軟件中勾選自定義擴展模塊的FMEExtension for ArcGIS選項。
本文進行矢量數據預處理工具的制作,首先要分析其所需功能,其次根據需求設計數據處理流程圖,再次在FME工作空間中按照流程圖制作運行模板,最后再在ArcGIS中引用制作拓展工具(ArcGIS ETL Tools),具體如下。
本工具的主要功能是處理矢量數據中的拓撲錯誤,其中拓撲錯誤包含縫隙、重疊、毛刺、偽結點、懸掛線等。這些拓撲錯誤的處理并不會相互影響,因此本工具的方案是對各個拓撲錯誤分步進行處理。
本工具要實現面狀地物的縫隙、重疊處理和線狀地物的毛刺、偽結點、懸掛線處理,并且其中懸掛線類型又分為線未達邊、線超出邊和端點不接3種情況,處理步驟如下。
對于面要素,分別處理面要素的縫隙和重疊錯誤,同時其另生成的輔助面用于后續線要素處理;對于線要素,分別對線要素進行斷線連接、毛刺消除和去偽節點處理;最后對懸掛線的線未達邊、線超出邊和端點不接3種情況依次進行處理,其結果就是轉換后的成果數據。具體流程如圖1所示。

圖1 模板設計流程圖
流程圖設計完成后,要在FME工作空間制作模板。FME的操作流程主要分為讀模塊、轉化器模塊和寫模塊3個部分[4]。具體為數據讀入、面縫隙處理、輔助面線生成、毛刺消除、偽節點清理、懸掛線處理和數據輸出。
2.3.1 數據讀入
需用到數據輸入模塊,其中面要素和線要素要分開輸入。因面狀要素要用來處理壓蓋、縫隙問題和提取輔助面,其輔助面要提供給后續線狀要素處理;而線狀要素用來處理毛刺、偽節點和懸掛線問題,可以延后進行處理。
2.3.2 面縫隙和壓蓋處理
用到的轉換器是AreaGapAndOverlapCleaner(面間隙和重疊處理),它通過使用指定的公差從輸入區域構造二維平面分區來清除間隙和重疊[3]。為保持圖形的主要特征,設置參數要以面積為標準優先權保留邊。
2.3.3 輔助線、面生成
要得到輔助面要素和輔助線要素2組數據,首先提取輔助面用到Dissolver(融合)轉換器,使之合并成融合面;之后提取輔助面邊界線要素,因輔助面中還包含有空洞的情況,所以要用到DonutHoleExtractor(環、洞提取)和GeometryCoercer(幾何類型轉換,面轉線)這2種轉換器。
2.3.4 斷線連接
對線圖層,為防止對后續操作的干擾,先要進行斷線連接處理,斷線連接處理要分圖層進行。首先建立記錄圖層的字段,然后使用Intersector(交叉點處理)和LineCombiner(線連接)轉換器對其進行斷線連接處理。
2.3.5 毛刺、偽節處理
毛刺消除用到SpikeRemover(毛刺消除)轉換器,參數設置為最大尖銳角度為3、最大尖銳長度為10;偽結點處理用到Generalizer(泛化)轉換器,設置算法為Thin(移除相鄰線距離小于容差的點)。
2.3.6 懸掛線處理
懸掛線有3種類型,本文分3個步驟處理。
線未達邊:思路是找出未達邊的線,再讓其延伸捕捉到臨近邊上。用到步驟2.3.3中生成的輔助線和要處理的線,然后用AnchoredSnapper(鄰近捕捉)轉換器進行捕捉處理,設置容差為30。
線超出邊:分2種情況處理。線超出輔助面邊界線,用步驟2.2.3生成的輔助面對其進行裁切處理,用到Clipper(裁剪)轉換器;線自相交處超出邊,用到提取判定的方法,具體步驟是先提取自相交超出的微短線,用到 Intersector(交叉點處理)和LineOnLineOverlayer(線線重合打斷處理)轉換器,然后用AttributeRangeFilter(屬性值域判定)轉換器判定長度屬性進行篩選。最終FME模板如圖2所示。

圖2 FME模板成果
端點不接:用Snapper(節點捕捉)轉換器進行處理。其原理是在容差范圍內的臨近端點不接處進行自動捕捉處理。為防止捕捉錯誤,筆者按照圖層進行分組處理。
FME模板完成后,要將其在ArcGIS中實現,就要用到ArcGISETL模塊。首先在ArcGIS中新建工具箱,然后創建FMEETL Tool,導入FME模板,最后生成ArcGISETL工具。
該工具完成后,為驗證其可靠性,要對其進行測試:首先加載原始數據庫process.mdb和成果數據庫k1.mdb,然后點擊執行,其圖形處理前后對比效果如圖3所示。

圖3 執行前后圖形對比
從圖3中看出,元數據中超出面邊界部分已裁除,圖形中的要素也得到了簡化,為更直觀地顯示出結果,對其數據前后指標進行統計對比,如圖4所示。

圖4 執行前后數據對比
由圖4可知,記錄由2 328條減為1 131條。本工具共清除毛刺3處,偽節點0處。懸掛線的3種情況為:端點不接94處,線超出邊907處,線未達邊0處。
在本次測試中,工具運行用時共35 s,而若隨著處理的數據量增加,其運行時間將會成倍增長,因此對其優化是很有必要的。本工具的優化方案是在FME模板中設置使用CPU多核心并行處理,優化后用時減少到8 s,工作效率加快了77%。
FME具有多種功能的轉換器,能夠應對不同的功能需求,因此,在ArcGIS數據處理過程中,借助FME工具是十分有意義的,然而ArcGIS集成FME的功能還不夠全面,現階段還不能夠交互設計處理模塊。ArcGISETL擴展模塊在數據處理工具制作方面還有很大的發展空間。
通過本文設計的矢量數據預處理工具,作業員只需對不同的項目修改FME模版,然后在ARCGIS中進行ETL配置即可生成相應的數據預處理工具。此方法可推廣至需要矢量數據預處理的項目。如全國第三次土地調查、全要素更新、地理國情監測等,其具有很大的改進應用價值。