黃北生,盛盈盈
(江蘇省地質測繪院,江蘇 南京 211102)
AutoCAD是由美國Autodesk公司開發(fā)的一種通用計算機輔助設計軟件,功能強大且可定制性高,深受廣大測繪技術人員的喜愛,在測繪行業(yè)中有著廣泛的應用。AutoCAD默認的DWG數據格式已成為存儲地形圖成果數據的標準。AutoCAD通用性強,沒有針對測繪行業(yè)進行專業(yè)定制,致使眾多測繪單位根據內部生產流程與數據組織方式開發(fā)了基于AutoCAD的專用繪圖軟件,以提高測繪生產的效率與質量。
高程點和等高線是地形圖數據的重要組成部分,保證高程點與等高線之間關系的正確性是地形圖質量控制的一項重要工作。正常情況下,如果一個高程點位于兩根等高線之間,那么此高程點的高程值應介于兩根等高線的高程值之間。如果某個高程點的高程值不滿足上述條件,則將高程點與等高線產生的矛盾稱為高曲矛盾。在沒有高曲矛盾檢查軟件時,人工目視檢查是檢查高曲矛盾的主要方法,這種方法檢查效率低,而且容易導致漏查、錯查,因此需要設計一種通過軟件實現(xiàn)高曲矛盾自動檢查的工具,以提高檢查準確率及地形圖生產的效率。
文獻資料檢索結果表明,高曲矛盾自動化檢查雖受到了一定關注,但相關研究尚處于起步階段,胡現(xiàn)輝等[1]編制的高曲矛盾檢查工具能夠提高生產效率與產品質量,但難以判斷地形圖邊緣區(qū)域及復雜區(qū)域的高曲矛盾問題。武安狀等[2]基于放射線法開發(fā)了檢查高曲矛盾的工具,能夠極大減少檢查工作量,但需聯(lián)動ObjectARX、AutoCAD以及Visual Studio進行開發(fā),不便于二次實現(xiàn)。段文化等[3]基于FME平臺分別實現(xiàn)了構TIN法與放射線法的高曲矛盾檢查,且對比發(fā)現(xiàn)兩種檢查方法具有較高的正確率,但算法程序需按經驗預設合理參數,參數不合理會致使檢查結果出現(xiàn)差異。綜上,為降低開發(fā)難度以及提高高曲矛盾工具的適用性,本文基于構建TIN法,通過成熟的ArcEngine軟件提供的二次開發(fā)接口編制高曲矛盾的自動化檢查程序,在降低開發(fā)難度的同時,能極大提高質檢工作者的檢查效率。
在AutoCAD中,高程點一般使用屬性塊(Attribute Block)表示,等高線一般使用多段線(Polyline)表示。高曲矛盾檢查是默認在等高線高程值無錯的前提下進行的,若查詢存在高曲矛盾現(xiàn)象,則統(tǒng)一認為是高程點的高程值存在問題。進行高曲矛盾檢查時,首先從AutoCAD中將高程點及等高線分別提取到相應的高程數據文件中,然后調用ArcEngine提供的API讀取高程數據文件并對提取的高程點及等高線進行構TIN處理。構建TIN后,根據原高程點的平面坐標,查詢此位置構TIN后的高程值,再將原高程值與TIN中的高程值進行對比,以確定原高程值是否合理[3]。
確定原高程值是否合理,首先需要計算此點所在的高程區(qū)位值:
(1)
式中,Index為高程值所在的區(qū)位值;E′為通過位置與TIN計算出的高程值,單位為m;C為當前地形圖設置的基本等高距,單位為m;Floor為返回小于或等于指定數值的最大整數。
計算高程區(qū)位值后,再進行高程區(qū)間計算:
(2)
式中,Emin、Emax分別表示高程區(qū)間的最小值與最大值,單位為m。
得到某點的高程區(qū)間值后,如果點的實際高程值位于最小值與最大值之間,則認為此高程值是合理的,即沒有高曲矛盾,反之則存在高曲矛盾。
高曲矛盾檢查的基本流程是將提取的高程信息進行構TIN處理,然后進行高程值比較,以此得出是否存在高曲矛盾。高曲矛盾檢查工具主要功能為提取高程信息、構TIN檢查、日志查看。
高程信息由3個數據組成,分別為高程點的點位平面坐標和高程值、等高線的節(jié)點平面坐標和高程值、檢查范圍的節(jié)點平面坐標。其中,檢查范圍為可選數據,若沒有設置檢查范圍,可通過高程點與等高線的平面范圍進行凸包分析,從而得到檢查范圍。為提高檢查的可靠性,應提前繪制檢查范圍線。
高程點在AutoCAD中是以屬性塊的方式表示,即帶屬性的塊參照(Block Reference),提取高程點的高程信息時,首先通過Block Reference. Position屬性獲取點的平面坐標,然后從Block Reference. Attribute Collection屬性中讀取高程值。遍歷當前圖中參與檢查的高程點,將讀取到的每個高程信息以文件的方式進行保存[4]。
等高線在AutoCAD中是以多段線的方式表示,高程值保存于標高(Elevation)中。提取等高線的高程信息時,需通過Polyline.GetPoint2dat方法依次讀取每個節(jié)點的平面坐標,然后再從Polyline.Elevation屬性中讀取高程值。遍歷當前圖中參與檢查的等高線,將讀取到的每個高程信息以文件的方式進行保存。
檢查范圍在AutoCAD中也是以多段的方式表示,但不保存高程值。讀取檢查范圍的方式與讀取等高線的方式相同,限于篇幅,不再贅述。
高程信息提取后,可以調用ArcEngine提供的相關功能進行構TIN檢查。在ArcEngine中,構建TIN文件使用的核心方法為三維分析工具集中的CreateTin_3d方法[5],運行此方法需提供以下幾個參數:輸出TIN的路徑、空間參考、參與構TIN的要素及構TIN算法。本文中使用的構TIN算法為約束型Delaunay方法。參與TIN的參數準備完成后,使用地理處理工具GeoProcessor執(zhí)行此方法即可,調用方式如圖1所示[6]。
構TIN完成后,需對TIN數據進行加載檢查,進行加載前應創(chuàng)建一個TIN對象,再使用ITinAdvanced接口的Init方法加載TIN數據,實現(xiàn)方式如圖2所示[7]。
完成上述部分便可對每個高程點進行檢查。計算高程點高程時,使用ITinSurface接口的GetElevation方法。如果檢查出某個高程點存在高曲矛盾時,將此高程點的平面坐標、實際高程值、高程值區(qū)間寫入日志文件,主要代碼如圖3所示。
高程點與等高線存在高曲矛盾時,檢查日志中已經記錄了此高程點的平面坐標及高程信息。要想查看檢查結果是否合理并對高程點的高程值進行修正,必須通過點的平面坐標進行定位。在AutoCAD中將某個指定位置平移到可見視圖范圍內這一操作,實質是設置新的視圖。進行視圖更新時,首先應創(chuàng)建一個ViewTableRecord并設置中心點(CenterPoint),該點為日志中讀取的值,然后使用AutoCAD中Editor類的SetCurrentView方法設置當前視圖,主要代碼如圖4所示。
高曲矛盾檢查工具基于AutoCAD2010為開發(fā)框架,在Visual Studio 2013開發(fā)環(huán)境中,使用VisualBasic.NET作為開發(fā)語言,實現(xiàn)了以上全部功能[8]。
在Visual Studio 2013中創(chuàng)建一個新的類庫項目,依次引用acmgd.dll、acdbmgd.dll及ArcEngine的相關DLL后,修改acmgd.dll、acdbmgd.dll這兩個文件的本地的屬性為“否”。然后添加新的類文件并創(chuàng)建AutoCAD命令,主要內容如圖5所示。
CommandMethodAttribute類是AutoCAD二次開發(fā)環(huán)境提供的將方法暴露為AutoCAD命令的標識。
進行高曲矛盾檢查時,要經過高程信息提取、構TIN及檢查、日志查看這3個步驟。每個步驟作為一個獨立的模塊進行開發(fā),最后通過命令接口函數ElevationCheck統(tǒng)一調用。
高程信息提取模塊的主要功能就是將參與檢查的高程點與等高線提取出來,供ArcEngine構TIN及檢查。為保證后續(xù)模塊能夠正常讀取提取出的高程信息,需要對高程信息定制其數據結構,結構的主要內容如圖6所示。
構TIN及檢查模塊是基于ArcEngine進行開發(fā)的,由于ArcEngine只有32位模式,在進行此模塊開發(fā)時,如果AutoCAD為32位,則直接可以引用相關DLL進行開發(fā),如果AutoCAD為64位時,則需借助于進程間通訊的相關技術。檢查完成后,需將檢查日志輸出。為方便日志查看,模塊讀取日志信息及XML序列化保存,需定義一個日志數據結構,主要內容如圖7所示。
日志查看模塊的主要功能就是讀取日志信息并進行定位,以便于用戶進行交互修改。讀取日志信息可以通過XML反序列化方式獲取,然后再通過AutoCAD中的Editor類設置當前視圖方法進行圖形定位。
各模塊的代碼編寫完成后,即可對整個項目進行編譯。項目編譯后,會產生一個新的DLL文件,使用AutoCAD提供的netload命令可將此DLL文件加載到AutoCAD中,運行ElevationCheck ,選擇參與檢查的對象后進行高曲矛盾檢查,檢查日志會自動加載到當前圖面中。
圖8為某地形圖測量項目內業(yè)繪圖成果,測區(qū)范圍內山地與丘陵較多,等高線與高程點較為密集,通過人工目視檢查高曲矛盾時,效率較低,一幅地形圖需近一天時間才可檢查完畢,且易出現(xiàn)錯查、漏查的現(xiàn)象,此類項目的高曲矛盾檢查給質檢帶來很大困擾。
為解決此問題,筆者利用本文所述算法基于Visual Studio軟件開發(fā)了高曲矛盾檢查工具。將圖8所示的地形圖利用自編高曲矛盾軟件進行檢查,通過ElevationCheck命令進行高曲矛盾檢查時,約3 min的時間將檢查結果返回,檢查結果為圖9所示的日志查看工具。通過日志查看工具可以快速對有問題的高程點進行定位,此工具極大節(jié)約了質量檢查人員的檢查時間,同時也提升了檢查的質量。
本文通過對高曲矛盾檢查原理的分析,介紹了高曲矛盾檢查過程中每個步驟的實現(xiàn)方法,并以AutoCAD為開發(fā)框架,定制專用的高曲矛盾工具,降低了質量檢查人員工作強度,同時也提升了產品的質量。在對地形數據進行構TIN處理時,直接調用ArcEngine中二次開發(fā)的開發(fā)接口,不但降低了高曲矛盾開發(fā)的難度,同時加快了整個工具開發(fā)的進程。文中關于AutoCAD開發(fā)的設計思路及實現(xiàn)方法對開發(fā)其它基于AutoCAD的應用也有一定的借鑒意義。