陳 強,王紅林,趙海峰
(江蘇省地質(zhì)測繪院,江蘇 南京 211102)
基礎(chǔ)地理信息數(shù)據(jù)是政府基礎(chǔ)測繪部門生產(chǎn)的權(quán)威數(shù)據(jù),由于其精度高、要素全、可靠性強,所以被廣泛應(yīng)用于政府決策、經(jīng)濟建設(shè)和社會發(fā)展的各個領(lǐng)域[1]。為加強鹽城市基礎(chǔ)測繪工作,提升鹽城市基礎(chǔ)地理信息數(shù)據(jù)為社會經(jīng)濟建設(shè)服務(wù)水平,更新數(shù)字鹽城地理空間框架建設(shè)項目成果,為智慧鹽城時空大數(shù)據(jù)與云平臺建設(shè)奠定扎實的空間數(shù)據(jù)基礎(chǔ),鹽城市政府啟動了大比例尺地形圖測繪項目的工作。
鹽城市自然資源和規(guī)劃局規(guī)定此項目最終成果格式為EDB格式,所以在項目開展過程中需要把CAD數(shù)據(jù)轉(zhuǎn)換到“清華山維EPS”軟件中。然而,由于“清華山維EPS”軟件符號化生成斜坡方向線時需要人工逐個指定斜坡面的轉(zhuǎn)點,造成大量重復(fù)工作,降低了生產(chǎn)效率。針對這一問題,本文提出了利用斜坡上坎邊線自動為斜坡面賦值轉(zhuǎn)點位置的方法。依托鹽城市區(qū)大比例尺地形圖測繪項目和本單位2020年度科研項目(項目編號:SDCKY202005),通過工程項目驗證,該方法效率高、精度好,滿足項目要求。
ObjectARX編程是一種動態(tài)鏈接庫(DLL)編程,能夠?qū)utoCAD所有事務(wù)進行完整、先進、面向?qū)ο蟮脑O(shè)計與開發(fā)。ObjectARX開發(fā)的應(yīng)用程序速度更快、集成度更高、穩(wěn)定性更強,并且與AutoCAD應(yīng)用程序共享地址空間,可以直接訪問AutoCAD的圖形數(shù)據(jù)庫[2-3]。利用ObjectARX對AutoCAD進行二次開發(fā),能更加方便地運用AutoCAD實現(xiàn)圖形與數(shù)據(jù)相互轉(zhuǎn)換、圖形批量編輯以及空間數(shù)據(jù)處理等功能[4]。
VBS(全稱是Microsoft's Visual Basic Scripting Edition)是一種強大的解釋型腳本語言,它可以用于包括客戶端和服務(wù)端的多種環(huán)境下。VBScript是一種腳本語言,不是程序設(shè)計語言。而腳本語言最主要的優(yōu)勢為其代碼是文本,具有良好的平臺覆蓋,能夠在多種環(huán)境中運行并且可以方便地嵌入到其他代碼中[5]。EPS腳本語言遵循VBScript語言標準,支持用戶二次開發(fā),主要實現(xiàn)EPS平臺數(shù)據(jù)整理、數(shù)據(jù)轉(zhuǎn)換等功能。
本文算法的主要思路是通過斜坡上坎線起點位置信息和終點位置信息判斷出斜坡面轉(zhuǎn)點位置信息。
2.1.1 確保斜坡上坎線起點與斜坡面起點重合
分別獲得斜坡上坎線起點(pt1)和斜坡面起點(pt2)的坐標信息XY1和XY2,計算XY1與XY2之間的坐標差值D1。依據(jù)差值D1大小分為以下2種情況:
(1)D1小于1 cm,判定斜坡上坎線起點和斜坡面起點重合。
(2)D1大于1 cm,需要獲取斜坡上坎線終點(pt3)的坐標信息XY3,判斷XY3與XY2之間的坐標差值D2。根據(jù)差值D2大小細分為2種情況:①D2小于1 cm,則對斜坡上坎線進行線段的反向操作;②D2大于1 cm,說明作業(yè)員沒有按照制圖要求制圖,程序會自動在斜坡面的起點處畫一個圓圈,方便作業(yè)員對數(shù)據(jù)進行修改。
2.1.2 記錄斜坡面轉(zhuǎn)點位置信息
首先,獲得斜坡上坎線終點(Pt4)的坐標信息XY4(上坎線有可能進行了反向操作);然后,判斷出斜坡面上所有節(jié)點中距離XY4最近的節(jié)點位置(N);最后,把N賦值給斜坡面屬性表“TERA”的“ZhuanDian”字段。
2.1.3 傳遞斜坡面轉(zhuǎn)點位置信息
通過編寫VBS腳本把斜坡面轉(zhuǎn)點位置信息傳遞給“清華山維EPS”軟件。設(shè)置選擇集的篩選條件(此腳本主要對實體類型和實體代碼進行篩選),把符合篩選條件的實體放入選擇集內(nèi)。對選擇集內(nèi)的斜坡面逐個進行讀取,并獲得斜坡面屬性表“TERA”中字段“ZhuanDian”的值。設(shè)置斜坡面上“ZhuanDian”處節(jié)點的類型為“轉(zhuǎn)向點”。
本文算法主要通過調(diào)用類AcDbPolyline的內(nèi)部函數(shù)以及一些筆者自定義函數(shù)來實現(xiàn)。
2.2.1 實現(xiàn)斜坡上坎線起點與斜坡面起點重合
根據(jù)類AcDbPolyline的getStartPoint()函數(shù)分別獲得斜坡上坎線起點坐標值XY1和斜坡面起點坐標值XY2,利用自定義函數(shù)XYCZ()獲得XY1與XY2之間的距離D1。當D1大于1 cm時,根據(jù)getEndPoint()函數(shù)獲得斜坡上坎線終點坐標值XY3,同樣利用自定義函數(shù)XYCZ()獲得XY1與XY3之間的距離D3。當D3小于1 cm時,利用自定義函數(shù)FanX()對斜坡上坎線進行反向操作;反之D3大于1 cm時,則利用自定義函數(shù)Yuan()以斜坡面起點坐標值XY2為圓心,0.5 m為半徑畫一個圓來提示作業(yè)員進行修改。主要代碼如圖1所示。
2.2.2 斜坡面獲得轉(zhuǎn)點位置信息
利用getEndPoint()函數(shù)獲得最終斜坡上坎線終點坐標XY4;利用自定義函數(shù)ZJD()確定斜坡面上所有節(jié)點中距離坐標XY4最近的節(jié)點編號,把該節(jié)點編號賦值給字符串型變量N;利用setXData()函數(shù)把N傳遞給斜坡面屬性表“TERA”的“ZhuanDian”字段。主要代碼如圖2所示。
2.2.3 兩套軟件間傳遞轉(zhuǎn)點位置信息
通過編寫VBS腳本把斜坡面轉(zhuǎn)點位置信息傳遞給“清華山維EPS”軟件,具體做法為:利用SetSelectCondition函數(shù)進行條件篩選,然后運用FOR循環(huán)語句逐個讀取斜坡面,并使用GetSelGeoValue函數(shù)獲取字段“ZhuanDian”的值,最后利用SetSelGeoPoint函數(shù)設(shè)置斜坡面上“ZhuanDian”處節(jié)點的類型為“轉(zhuǎn)向點”。主要代碼如圖3所示。
本文以鹽城市區(qū)大比例尺地形圖測繪項目為實例,進行功能測試。操作步驟為:
(1)利用AutoCAD軟件打開鹽城市區(qū)大比例尺地形圖測繪項目成果數(shù)據(jù)文件。
(2)在AutoCAD命令輸入欄中輸入命令“XPZD”,程序自動把所有斜坡面轉(zhuǎn)點位置信息記錄在各自的屬性表中。
(3)程序運行結(jié)束后可以通過屬性查詢命令“AtView”抽查斜坡面轉(zhuǎn)點位置信息是否正確。查詢結(jié)果示例如圖4所示。
本文應(yīng)用ObjectARX程序執(zhí)行文件以及VBS腳本文件對鹽城市區(qū)大比例尺地形圖測繪項目2 271幅標準分幅圖進行批量處理,共賦值了3285個斜坡面的轉(zhuǎn)點位置信息,總耗時2.6 s。程序運行結(jié)束后,進行了人工復(fù)核。結(jié)果證明,該方法在滿足項目要求的同時大幅提高了工作效率,具有較高的應(yīng)用價值。后期將會對本單位其余區(qū)縣的地形圖測繪項目推廣此方法。