全茂林
(福建省測(cè)繪院,福建 福州 350003)
在現(xiàn)階段生產(chǎn)作業(yè)過程中,因數(shù)據(jù)格式轉(zhuǎn)換、投影變換等操作,生產(chǎn)的矢量數(shù)據(jù)會(huì)存在一些拓?fù)溴e(cuò)誤。常見的拓?fù)溴e(cuò)誤有面要素的縫隙、重疊和線要素的毛刺、偽結(jié)點(diǎn)、懸掛線等。此類拓?fù)溴e(cuò)誤往往很難通過肉眼發(fā)現(xiàn),若單單依靠人工處理,將會(huì)耗費(fèi)大量的時(shí)間,并且可能并不能完全消除此類錯(cuò)誤。對(duì)此,借助相應(yīng)功能的工具處理將是一個(gè)很好的選擇。本文探討的重點(diǎn)是如何設(shè)計(jì)制作一種能滿足所需要求的工具,筆者提出一種利用FME工程數(shù)據(jù)處理模板和ArcGIS數(shù)據(jù)互操作拓展模塊的方法來(lái)生成工具的方案。
FME(Feature Manipulate Engineering)是一個(gè)支持多元數(shù)據(jù)的提取、轉(zhuǎn)換、加載、處理的強(qiáng)大工具,它是完整的空間ETL解決方案[1]。FME工具庫(kù)中包含有400多種功能的轉(zhuǎn)換器,通過這些轉(zhuǎn)換器,可以實(shí)現(xiàn)數(shù)據(jù)的處理和轉(zhuǎn)換。此類轉(zhuǎn)換器可以單獨(dú)使用,也可組合應(yīng)用,組合應(yīng)用的方式是通過制作模板進(jìn)行的。其模板制作原理就是在FME工作空間(FME Workbench)中調(diào)用多種不同功能的轉(zhuǎn)換器和輸入輸出模塊,然后通過不同轉(zhuǎn)換器的組合來(lái)實(shí)現(xiàn)各種功能。
FMEWorkbench模塊是一個(gè)空間ETL(提取、轉(zhuǎn)換和加載)創(chuàng)作環(huán)境,可快速定義圖形化的流程,進(jìn)行數(shù)據(jù)轉(zhuǎn)換、變換和集成[2]。在FMEWorkbench可以完成柵格要素、幾何要素等多種類型數(shù)據(jù)轉(zhuǎn)換,也可進(jìn)行圖形、屬性等數(shù)據(jù)的操作,它是一種用于開發(fā)數(shù)據(jù)變換工具的可視化工作流編輯器,在啟用Data Interoperability擴(kuò)展模塊后,可以用該編輯器創(chuàng)建空間ETL工具[3],以用來(lái)配合其他軟件使用,其具有強(qiáng)大的功能。
ArcGIS數(shù)據(jù)互操作(ArcGISData Interoperability)是由ESRI公司和Safe公司共同開發(fā)的一款擴(kuò)展模塊,它可以直接讀取和使用100多種常見的GIS矢量數(shù)據(jù)格式,包括很多演化的GML規(guī)范。此外,可使用多種格式傳送GIS數(shù)據(jù)[3]。其原理是通過空間ETL工具(Spatial ETL Tools)調(diào)用FME模板,使其能在ArcGIS中兼容使用FME功能,使數(shù)據(jù)操作方法多樣化。使用空間ETL工具需另行安裝,然后在ArcGIS軟件中勾選自定義擴(kuò)展模塊的FMEExtension for ArcGIS選項(xiàng)。
本文進(jìn)行矢量數(shù)據(jù)預(yù)處理工具的制作,首先要分析其所需功能,其次根據(jù)需求設(shè)計(jì)數(shù)據(jù)處理流程圖,再次在FME工作空間中按照流程圖制作運(yùn)行模板,最后再在ArcGIS中引用制作拓展工具(ArcGIS ETL Tools),具體如下。
本工具的主要功能是處理矢量數(shù)據(jù)中的拓?fù)溴e(cuò)誤,其中拓?fù)溴e(cuò)誤包含縫隙、重疊、毛刺、偽結(jié)點(diǎn)、懸掛線等。這些拓?fù)溴e(cuò)誤的處理并不會(huì)相互影響,因此本工具的方案是對(duì)各個(gè)拓?fù)溴e(cuò)誤分步進(jìn)行處理。
本工具要實(shí)現(xiàn)面狀地物的縫隙、重疊處理和線狀地物的毛刺、偽結(jié)點(diǎn)、懸掛線處理,并且其中懸掛線類型又分為線未達(dá)邊、線超出邊和端點(diǎn)不接3種情況,處理步驟如下。
對(duì)于面要素,分別處理面要素的縫隙和重疊錯(cuò)誤,同時(shí)其另生成的輔助面用于后續(xù)線要素處理;對(duì)于線要素,分別對(duì)線要素進(jìn)行斷線連接、毛刺消除和去偽節(jié)點(diǎn)處理;最后對(duì)懸掛線的線未達(dá)邊、線超出邊和端點(diǎn)不接3種情況依次進(jìn)行處理,其結(jié)果就是轉(zhuǎn)換后的成果數(shù)據(jù)。具體流程如圖1所示。
圖1 模板設(shè)計(jì)流程圖
流程圖設(shè)計(jì)完成后,要在FME工作空間制作模板。FME的操作流程主要分為讀模塊、轉(zhuǎn)化器模塊和寫模塊3個(gè)部分[4]。具體為數(shù)據(jù)讀入、面縫隙處理、輔助面線生成、毛刺消除、偽節(jié)點(diǎn)清理、懸掛線處理和數(shù)據(jù)輸出。
2.3.1 數(shù)據(jù)讀入
需用到數(shù)據(jù)輸入模塊,其中面要素和線要素要分開輸入。因面狀要素要用來(lái)處理壓蓋、縫隙問題和提取輔助面,其輔助面要提供給后續(xù)線狀要素處理;而線狀要素用來(lái)處理毛刺、偽節(jié)點(diǎn)和懸掛線問題,可以延后進(jìn)行處理。
2.3.2 面縫隙和壓蓋處理
用到的轉(zhuǎn)換器是AreaGapAndOverlapCleaner(面間隙和重疊處理),它通過使用指定的公差從輸入?yún)^(qū)域構(gòu)造二維平面分區(qū)來(lái)清除間隙和重疊[3]。為保持圖形的主要特征,設(shè)置參數(shù)要以面積為標(biāo)準(zhǔn)優(yōu)先權(quán)保留邊。
2.3.3 輔助線、面生成
要得到輔助面要素和輔助線要素2組數(shù)據(jù),首先提取輔助面用到Dissolver(融合)轉(zhuǎn)換器,使之合并成融合面;之后提取輔助面邊界線要素,因輔助面中還包含有空洞的情況,所以要用到DonutHoleExtractor(環(huán)、洞提?。┖虶eometryCoercer(幾何類型轉(zhuǎn)換,面轉(zhuǎn)線)這2種轉(zhuǎn)換器。
2.3.4 斷線連接
對(duì)線圖層,為防止對(duì)后續(xù)操作的干擾,先要進(jìn)行斷線連接處理,斷線連接處理要分圖層進(jìn)行。首先建立記錄圖層的字段,然后使用Intersector(交叉點(diǎn)處理)和LineCombiner(線連接)轉(zhuǎn)換器對(duì)其進(jìn)行斷線連接處理。
2.3.5 毛刺、偽節(jié)處理
毛刺消除用到SpikeRemover(毛刺消除)轉(zhuǎn)換器,參數(shù)設(shè)置為最大尖銳角度為3、最大尖銳長(zhǎng)度為10;偽結(jié)點(diǎn)處理用到Generalizer(泛化)轉(zhuǎn)換器,設(shè)置算法為Thin(移除相鄰線距離小于容差的點(diǎn))。
2.3.6 懸掛線處理
懸掛線有3種類型,本文分3個(gè)步驟處理。
線未達(dá)邊:思路是找出未達(dá)邊的線,再讓其延伸捕捉到臨近邊上。用到步驟2.3.3中生成的輔助線和要處理的線,然后用AnchoredSnapper(鄰近捕捉)轉(zhuǎn)換器進(jìn)行捕捉處理,設(shè)置容差為30。
線超出邊:分2種情況處理。線超出輔助面邊界線,用步驟2.2.3生成的輔助面對(duì)其進(jìn)行裁切處理,用到Clipper(裁剪)轉(zhuǎn)換器;線自相交處超出邊,用到提取判定的方法,具體步驟是先提取自相交超出的微短線,用到 Intersector(交叉點(diǎn)處理)和LineOnLineOverlayer(線線重合打斷處理)轉(zhuǎn)換器,然后用AttributeRangeFilter(屬性值域判定)轉(zhuǎn)換器判定長(zhǎng)度屬性進(jìn)行篩選。最終FME模板如圖2所示。
圖2 FME模板成果
端點(diǎn)不接:用Snapper(節(jié)點(diǎn)捕捉)轉(zhuǎn)換器進(jìn)行處理。其原理是在容差范圍內(nèi)的臨近端點(diǎn)不接處進(jìn)行自動(dòng)捕捉處理。為防止捕捉錯(cuò)誤,筆者按照?qǐng)D層進(jìn)行分組處理。
FME模板完成后,要將其在ArcGIS中實(shí)現(xiàn),就要用到ArcGISETL模塊。首先在ArcGIS中新建工具箱,然后創(chuàng)建FMEETL Tool,導(dǎo)入FME模板,最后生成ArcGISETL工具。
該工具完成后,為驗(yàn)證其可靠性,要對(duì)其進(jìn)行測(cè)試:首先加載原始數(shù)據(jù)庫(kù)process.mdb和成果數(shù)據(jù)庫(kù)k1.mdb,然后點(diǎn)擊執(zhí)行,其圖形處理前后對(duì)比效果如圖3所示。
圖3 執(zhí)行前后圖形對(duì)比
從圖3中看出,元數(shù)據(jù)中超出面邊界部分已裁除,圖形中的要素也得到了簡(jiǎn)化,為更直觀地顯示出結(jié)果,對(duì)其數(shù)據(jù)前后指標(biāo)進(jìn)行統(tǒng)計(jì)對(duì)比,如圖4所示。
圖4 執(zhí)行前后數(shù)據(jù)對(duì)比
由圖4可知,記錄由2 328條減為1 131條。本工具共清除毛刺3處,偽節(jié)點(diǎn)0處。懸掛線的3種情況為:端點(diǎn)不接94處,線超出邊907處,線未達(dá)邊0處。
在本次測(cè)試中,工具運(yùn)行用時(shí)共35 s,而若隨著處理的數(shù)據(jù)量增加,其運(yùn)行時(shí)間將會(huì)成倍增長(zhǎng),因此對(duì)其優(yōu)化是很有必要的。本工具的優(yōu)化方案是在FME模板中設(shè)置使用CPU多核心并行處理,優(yōu)化后用時(shí)減少到8 s,工作效率加快了77%。
FME具有多種功能的轉(zhuǎn)換器,能夠應(yīng)對(duì)不同的功能需求,因此,在ArcGIS數(shù)據(jù)處理過程中,借助FME工具是十分有意義的,然而ArcGIS集成FME的功能還不夠全面,現(xiàn)階段還不能夠交互設(shè)計(jì)處理模塊。ArcGISETL擴(kuò)展模塊在數(shù)據(jù)處理工具制作方面還有很大的發(fā)展空間。
通過本文設(shè)計(jì)的矢量數(shù)據(jù)預(yù)處理工具,作業(yè)員只需對(duì)不同的項(xiàng)目修改FME模版,然后在ARCGIS中進(jìn)行ETL配置即可生成相應(yīng)的數(shù)據(jù)預(yù)處理工具。此方法可推廣至需要矢量數(shù)據(jù)預(yù)處理的項(xiàng)目。如全國(guó)第三次土地調(diào)查、全要素更新、地理國(guó)情監(jiān)測(cè)等,其具有很大的改進(jìn)應(yīng)用價(jià)值。