陳波
(四川中水成勘院測繪工程有限責任公司,四川成都 610000)
地形圖分幅圖的傳統制作方法是:先用AutoCAD 按標準圖框裁成分塊圖,再套上業主的風格樣式標準圖框,手動修改圖廓坐標。整個過程煩瑣冗長,重復性操作較多,容易出現錯誤。針對上述問題,本文對AutoCAD 測繪成果的分幅圖制作進行Auto-CAD 的二次開發,從而可以直接進行成果分幅,無須手動套特定樣式的圖框以及修改圖廓坐標,進而優化分幅圖的制作過程,本文以Python 語言為基礎,對AutoCAD 進行二次開發。
大渡河CSJ 水電站YSG 渣場1:1000 地形圖,西藏自治區XQ 流域水電規劃ZX 梯級水電站施工場地1:1000 地形圖、金沙江上游GT 水電站壩址區1:1000 地形圖、重慶潼南SJHD 樞紐工程水下地形圖1:500 地形圖、西藏自治區XQ 流域水電規劃ZX梯級水電站庫區1:2000 地形地類圖。
(1)《水電工程測量規范(NB/T 35029—2014)》;
(2)《1:5001:10001:2000 外業數字測圖技術規程(GB/14 912—2005)》;
(3)《國家基本比例尺地圖圖式第1 部分:1:5001:10001:2000地形圖圖式(GB/T 20257.1—2017)》;
(4)《全球定位系統實時動態測量(RTK)技術規范(CH/T 2009—2010)》;
(5)《機載激光雷達數據獲取技術規范(CH/T 8024—2011)》;
(6)《機載激光雷達數據處理技術規范(CH/T 8023—2011)》;
(7)《測繪作業人員安全規范(CH 1016—2008)》;
(8)《水電工程三維激光掃描測量規程(NB/T 35109—2018)》;
(9)《水電水利工程施工測量規范(DL/T 5173—2012)》。
2.1.1 AutoCAD
用于CAD 二次開發的計算機語言有很多:C#性能最好、功能最全,但是開發難度太高,開發效率低;VBA 或者VB,難度適中,性能一般,功能有限,VB 在CAD2010 版本以后就沒有和CAD 一起安裝;Lisp,CAD 原生語言,語法難度最低,但是可讀性差。
2.1.2 Python 的特點
在近幾年中,Python 在人工智能、web 開發之中應用廣泛,同時在金融分析、爬蟲等領域也具有很大的作用,其特點如下:簡單易學,側重解決問題,輕語法;面向對象的動態語言,支持函數式、泛型等多種編程范式[1];易于利用已有組件實現系統的功能,跨平臺使用,又被稱為膠水語言;將源代碼轉換稱為字節碼的中間形式,不需編譯成為二進制的代碼,可直接翻譯運行;開源,代碼是不保密的,方便共享,用于新的自由軟件之中;可擴展性,兼容C 語言編寫,然后再Python 程序中進行使用;豐富的庫,Python 具有豐富強大的標準庫,其中包含正則表達式、文檔生成、單元測試、線程、數據庫、網頁瀏覽器、CGl、FTP、電子郵件等;規范代碼,采用強制縮進的方式讓代碼具有非常好的可讀性。
2.1.3 Python 環境
集成開發環境是專用于軟件開發的程序,集成了幾款專門為軟件開發而設計的工具,例如:VI/VIM,靈活,支持Python 開發環境自行查找或者撰寫腳本,但不清楚模型編輯器是如何工作的;Visual Studio,是一款全功能集成開發平臺,支持各種平臺的開發;Visual Studio Code(也稱作 VS Code)是一款兼容 Linux,Mac OS X 和Windows 平臺的全功能代碼編輯器,輕量級但功能齊全;PyCharm,是面向于Python 的全功能集成開發環境,開箱即用,可以在PyCharm 中直接運行和調試Python 程序,且它支持源碼管理和項目,擁有眾多便利和支持社區。本次使用PyCharm 環境,Python3.6,CAD2016。

表1 手動與軟件工時對照
2.2.1 分幅圖傳統制作流程
為解決常規分幅帶來的問題,各位研究者提出多種解決方案,并且在AutoCAD、ArcGIS 等軟件平臺進行實踐[2],而傳統的地形圖分幅目前大多都在CAD 中完成:制作標準圖框,包含圖幅名稱、單位名稱、坐標信息、投影信息、成圖比例尺、測圖員、編圖員、檢查員、復查員等,按照規范以及業主方的要求設置字體樣式、顏色等;CAD 中按結合圖表裁切已經編輯好的地形圖,按結合圖表中的圖號逐一命名存盤圖號.dwg;將已經裁切好的圖號.dwg 套上制作好的標準圖框;修改上一步套上標準圖框的圖號.dwg 中的圖廓坐標;按規范命名存儲結果。
2.2.2 程序的核心模塊和算法
本文編寫的程序引用的模塊主要有:Autocad(導入導出dwg文件)、APoint(存儲點坐標)、array(存儲分幅框的圖幅范圍)、time(延遲運行)、shapely(中間件)、wx(圖形用戶界面)、tempfile(創建臨時文件和目錄)、uuid(通用唯一識別碼)、os(處理文件和目錄)。

圖1 軟件設計流程
2.2.3 關鍵函數塊
def get_path():通過對話框選取路徑;def get_path():分幅范圍信息;def execute():截取分幅框內圖形,套入圖框,存出圖幅;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 結合開發能減少測繪中的重復工作,極大地提高測繪生產效率。
(2)Python 代碼簡潔能快速提高開發效率。
測繪成果為區域經濟規劃、國土資源調查、城市建設規劃等諸多方面提供大量的基礎地理信息數據,例如水電站的設計、選址、施工、運營等。近年來,無人機由于具有體積小、造價低、使用方便、對環境要求低等優點而備受各界人士關注,并作為攝影測量平臺應用于測繪行業當中[3]。無人機航空攝影測量可以方便快速的采集數據,而后期數據處理、制圖都需要人工完成,Python 與CAD 的二次開發可用于地形圖、斷面等測繪成果中,也可推廣到與其有關的如國土空間規劃、工裝設計、工業制圖等成果中,可以很好地簡化生產流程,縮短工期,提高效率。