楊 鵬 蔡紅濤
(黃河勘測規(guī)劃設(shè)計有限公司測繪信息工程院 河南 鄭州 450000)
目前各測繪單位常用的制圖軟件為CASS, 甲方一般會要求提交CAD 和SHP 兩套數(shù)據(jù)格式。 因作業(yè)員在實際作業(yè)過程中的一些失誤, 導(dǎo)致用ArcMap 對轉(zhuǎn)成后SHP 格式數(shù)據(jù)拓?fù)錂z查時發(fā)現(xiàn)大量的拓?fù)溴e誤, 需要對CAD 和SHP 格式數(shù)據(jù)進(jìn)行同步修改,以達(dá)到CAD 與SHP 數(shù)據(jù)的一致性。然而有些作業(yè)員對ArcGIS 的操作不夠熟悉,只能夠在CASS 下參照SHP 數(shù)據(jù)的拓?fù)溴e誤進(jìn)行數(shù)據(jù)編輯, 然后再轉(zhuǎn)為SHP,由于在ArcMap 中沒有一個很好的方法將SHP 數(shù)據(jù)的拓?fù)溴e誤導(dǎo)出,這給修改造成了很大的難度,對照著修改不僅速度慢,而且容易不徹底, 有時舊的問題沒處理好又造成了新的問題。 哪有沒有方法能把拓?fù)溴e誤導(dǎo)出為CAD 格式,在CASS中參照著修改,問題就迎刃而解了,通過摸索和實踐,我找出了一個實現(xiàn)的方法, 下面將我在唐景CAD 數(shù)據(jù)建庫項目中利用FME 將SHP 中的拓?fù)溴e誤輸出到CAD 的一點經(jīng)驗,與大家分享一下。
利用ArcMap 對轉(zhuǎn)換后的SHP 格式數(shù)據(jù)根據(jù)需要進(jìn)行點、線、面的拓?fù)錂z查。 建立的拓?fù)湟?guī)則如下:
(1) 所有圖層內(nèi)要素是否相互重疊。 例如:dltb 與 zd(must not overlap with);
(2)線圖層內(nèi)要素是否自相交。 例如:xzdw(must not intersect);
(3)線圖層內(nèi)要素是否存在偽節(jié)點。 例如:xzdw(must not have pseudos);
(4)線圖層內(nèi)要素是否存在懸掛線(一條線必須和同層內(nèi)的其它線端點相接,否則為懸掛線)。 例如:xzdw(must not have dangles);
(5)面圖層內(nèi)要素是否自相交。 例如:dltb(must not overlap);
(6)面圖層內(nèi)要素是否有縫隙(宗地層不允許有縫隙,但是房屋層允許) 。 例如:dltb(must not have gaps);
(7)面圖層內(nèi)要素是否有縫隙;
(8)面要素弧段是否相互重疊、是否自相交、是否有懸掛線、是否存在偽節(jié)點(重疊要素包含的頂點相同)。
(9)線層要素不能相交(行政區(qū)界線、地類界線、界址線要素不允許相交,但是線狀地物層要素允許要素相交);
(10)面層要素弧段和線層要素是否重疊。 例如宗地邊界和界址線是否重疊;
(11)線層要素節(jié)點是否是點層要素;
打開拓?fù)錂z查時生成的唐景.mdb 文件, 里面有很多表,我們只關(guān)注其中的 T_1_PointErrors、T_1_LineErrors 和T_1_PolyErrors 三張表,其中T_1_PointErrors 記錄了點拓?fù)溴e誤,T_1_LineErrors 記錄了線拓?fù)溴e誤, T_1_PolyErrors 記錄了面拓?fù)溴e誤。 以T_1_PolyErrors 為例, 打開后如下圖所示(見圖1)
圖1 T_1_PolyErrors 表內(nèi)容
其中的OriginID 和DestID 對應(yīng)的是SHP 中的FID,TopoRuleID 字段對應(yīng)的是添加拓?fù)湟?guī)則的順序, 此例為面相交, 從表中可看出:FID 為18 和45 面重疊,24 和134 重疊……知道了是哪些面相重疊,我們就可以按照下面的思路來實現(xiàn)我們需要的東西:
(1)面提取,分別從SHP 中把FID 字段與OriginID、DestID 字段中值相同的面提取出來。
圖2 FME 程序
(2) 利用FME 中的Clipper 函數(shù)用一方去切割另一方,CLIPPED_INSIDE 端口輸出的就是我們需要的拓?fù)溴e誤。
(3)將成果輸出到CAD。
因FME 中無法查看到SHP 數(shù)據(jù)的FID 字段, 首先要打開ArcMap,打開屬性表,新建一個字段,命名為“序號”,利用字段賦值(Field Calculator..),將FID 中的字段值賦給“序號”字段。
打開FME, 加載唐景.shp 和唐景.mdb 文件中的T_1_PolyErrors.dbf 文件,利用FeatureMerger 函數(shù)分別提出唐景.shp 中與OriginID、DestID 字段中值相同的面, 然后用Clipper 函數(shù)切割,得到公共面輸出CAD(見圖2)。
經(jīng)過實踐, 利用FME 可以很快捷方便的得到我們想要的拓?fù)溴e誤,有效的解決了ArcMap 中拓?fù)溴e誤不能輸出的到CAD 的問題,當(dāng)然,本文只是寫出了面重疊的CAD 輸出程序,依據(jù)上面的思想可以寫出導(dǎo)出不同拓?fù)溴e誤到CAD 的程序, 希望能對大家起到拋磚引玉的作用。
[1]施朗.如何把ArcGIS 中的拓?fù)洳殄e文件找出[Z].全國測繪科技信息網(wǎng)中南分網(wǎng)第二十一次學(xué)術(shù)信息交流會,2011:623-629.
[2] 毛毛蟲. FeatureMerger 函數(shù)使用介紹[OL].http://blog.163.com/antufme@126/blog/static/.