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