陳波
(四川中水成勘院測繪工程有限責任公司,四川成都 610000)
地形圖分幅圖的傳統(tǒng)制作方法是:先用AutoCAD 按標準圖框裁成分塊圖,再套上業(yè)主的風格樣式標準圖框,手動修改圖廓坐標。整個過程煩瑣冗長,重復性操作較多,容易出現(xiàn)錯誤。針對上述問題,本文對AutoCAD 測繪成果的分幅圖制作進行Auto-CAD 的二次開發(fā),從而可以直接進行成果分幅,無須手動套特定樣式的圖框以及修改圖廓坐標,進而優(yōu)化分幅圖的制作過程,本文以Python 語言為基礎,對AutoCAD 進行二次開發(fā)。
大渡河CSJ 水電站YSG 渣場1:1000 地形圖,西藏自治區(qū)XQ 流域水電規(guī)劃ZX 梯級水電站施工場地1:1000 地形圖、金沙江上游GT 水電站壩址區(qū)1:1000 地形圖、重慶潼南SJHD 樞紐工程水下地形圖1:500 地形圖、西藏自治區(qū)XQ 流域水電規(guī)劃ZX梯級水電站庫區(qū)1:2000 地形地類圖。
(1)《水電工程測量規(guī)范(NB/T 35029—2014)》;
(2)《1:5001:10001:2000 外業(yè)數(shù)字測圖技術規(guī)程(GB/14 912—2005)》;
(3)《國家基本比例尺地圖圖式第1 部分:1:5001:10001:2000地形圖圖式(GB/T 20257.1—2017)》;
(4)《全球定位系統(tǒng)實時動態(tài)測量(RTK)技術規(guī)范(CH/T 2009—2010)》;
(5)《機載激光雷達數(shù)據(jù)獲取技術規(guī)范(CH/T 8024—2011)》;
(6)《機載激光雷達數(shù)據(jù)處理技術規(guī)范(CH/T 8023—2011)》;
(7)《測繪作業(yè)人員安全規(guī)范(CH 1016—2008)》;
(8)《水電工程三維激光掃描測量規(guī)程(NB/T 35109—2018)》;
(9)《水電水利工程施工測量規(guī)范(DL/T 5173—2012)》。
2.1.1 AutoCAD
用于CAD 二次開發(fā)的計算機語言有很多:C#性能最好、功能最全,但是開發(fā)難度太高,開發(fā)效率低;VBA 或者VB,難度適中,性能一般,功能有限,VB 在CAD2010 版本以后就沒有和CAD 一起安裝;Lisp,CAD 原生語言,語法難度最低,但是可讀性差。
2.1.2 Python 的特點
在近幾年中,Python 在人工智能、web 開發(fā)之中應用廣泛,同時在金融分析、爬蟲等領域也具有很大的作用,其特點如下:簡單易學,側重解決問題,輕語法;面向對象的動態(tài)語言,支持函數(shù)式、泛型等多種編程范式[1];易于利用已有組件實現(xiàn)系統(tǒng)的功能,跨平臺使用,又被稱為膠水語言;將源代碼轉換稱為字節(jié)碼的中間形式,不需編譯成為二進制的代碼,可直接翻譯運行;開源,代碼是不保密的,方便共享,用于新的自由軟件之中;可擴展性,兼容C 語言編寫,然后再Python 程序中進行使用;豐富的庫,Python 具有豐富強大的標準庫,其中包含正則表達式、文檔生成、單元測試、線程、數(shù)據(jù)庫、網(wǎng)頁瀏覽器、CGl、FTP、電子郵件等;規(guī)范代碼,采用強制縮進的方式讓代碼具有非常好的可讀性。
2.1.3 Python 環(huán)境
集成開發(fā)環(huán)境是專用于軟件開發(fā)的程序,集成了幾款專門為軟件開發(fā)而設計的工具,例如:VI/VIM,靈活,支持Python 開發(fā)環(huán)境自行查找或者撰寫腳本,但不清楚模型編輯器是如何工作的;Visual Studio,是一款全功能集成開發(fā)平臺,支持各種平臺的開發(fā);Visual Studio Code(也稱作 VS Code)是一款兼容 Linux,Mac OS X 和Windows 平臺的全功能代碼編輯器,輕量級但功能齊全;PyCharm,是面向于Python 的全功能集成開發(fā)環(huán)境,開箱即用,可以在PyCharm 中直接運行和調(diào)試Python 程序,且它支持源碼管理和項目,擁有眾多便利和支持社區(qū)。本次使用PyCharm 環(huán)境,Python3.6,CAD2016。
表1 手動與軟件工時對照
2.2.1 分幅圖傳統(tǒng)制作流程
為解決常規(guī)分幅帶來的問題,各位研究者提出多種解決方案,并且在AutoCAD、ArcGIS 等軟件平臺進行實踐[2],而傳統(tǒng)的地形圖分幅目前大多都在CAD 中完成:制作標準圖框,包含圖幅名稱、單位名稱、坐標信息、投影信息、成圖比例尺、測圖員、編圖員、檢查員、復查員等,按照規(guī)范以及業(yè)主方的要求設置字體樣式、顏色等;CAD 中按結合圖表裁切已經(jīng)編輯好的地形圖,按結合圖表中的圖號逐一命名存盤圖號.dwg;將已經(jīng)裁切好的圖號.dwg 套上制作好的標準圖框;修改上一步套上標準圖框的圖號.dwg 中的圖廓坐標;按規(guī)范命名存儲結果。
2.2.2 程序的核心模塊和算法
本文編寫的程序引用的模塊主要有:Autocad(導入導出dwg文件)、APoint(存儲點坐標)、array(存儲分幅框的圖幅范圍)、time(延遲運行)、shapely(中間件)、wx(圖形用戶界面)、tempfile(創(chuàng)建臨時文件和目錄)、uuid(通用唯一識別碼)、os(處理文件和目錄)。
圖1 軟件設計流程
2.2.3 關鍵函數(shù)塊
def get_path():通過對話框選取路徑;def get_path():分幅范圍信息;def execute():截取分幅框內(nèi)圖形,套入圖框,存出圖幅;def saveModel():處理圖框模板;def moveModelMap():移動模板圖幅到相應位置;def fillMapInfo ():填充圖幅信息;def getNeighbor-Points():填充接圖表且獲取一個點周圍的八個方向點。
從表1 可以看出插件對1:500、1:1000、1:2000 等大比例尺地形圖的分幅圖制作都是適用的,而且人工制作耗時平均一幅圖耗時11~12min,而插件耗時為0.2min,省時約55~60 倍,極大地提升了工作效率,分幅成果圖框的錯誤率也由10%降至1%以下。
(1)Python 與CAD 結合開發(fā)能減少測繪中的重復工作,極大地提高測繪生產(chǎn)效率。
(2)Python 代碼簡潔能快速提高開發(fā)效率。
測繪成果為區(qū)域經(jīng)濟規(guī)劃、國土資源調(diào)查、城市建設規(guī)劃等諸多方面提供大量的基礎地理信息數(shù)據(jù),例如水電站的設計、選址、施工、運營等。近年來,無人機由于具有體積小、造價低、使用方便、對環(huán)境要求低等優(yōu)點而備受各界人士關注,并作為攝影測量平臺應用于測繪行業(yè)當中[3]。無人機航空攝影測量可以方便快速的采集數(shù)據(jù),而后期數(shù)據(jù)處理、制圖都需要人工完成,Python 與CAD 的二次開發(fā)可用于地形圖、斷面等測繪成果中,也可推廣到與其有關的如國土空間規(guī)劃、工裝設計、工業(yè)制圖等成果中,可以很好地簡化生產(chǎn)流程,縮短工期,提高效率。