范福平
(中鐵六局集團有限公司,北京100026)
在工程測量中,DWG 圖是各種成果提交的主要形式,經常遇到不同坐標系成果轉換的問題。AutoCAD 軟件是繪制DWG 格式圖紙的基礎軟件, 常用的制圖軟件大多是以AutoCAD 軟件為基礎進行開發,通常具有完善的制圖編輯功能,但AutoCAD 軟件自身并不提供坐標轉換的功能。坐標變換從坐標系形式可以分為國家標準坐標坐標系變換和任意坐標系變換, 從坐標的維度可以分為二維坐標變換和三維坐標變換, 從坐標變換的對象可以分為基于整體的變換和基于實體的變換。本文主要研究任意坐標系變換下二維坐標成果的轉換問題。
任意坐標系變換下二維坐標成果的整體變化, 本質就是數學上的二維坐標系變化,數學公式如下:

對其求解首先需要確定變換函數, 一般采用相似變換和仿射變換,相似變換通常采用四參數模型,仿射變換一般采用一次仿射變換模型[1]。在此采用相似變換的四參數模型,見公式(2)。

其中,x,y 為轉換前坐標,X,Y 為轉換后坐標,△X,△Y 為平移參數,m 為尺度變換因子,θ 為旋轉角。
令a=m·cosθ,b=m·sinθ,則:

將△X,△Y、a、b 作為平差參數,并將新坐標系下的坐標作為觀測值,舊坐標系中的坐標設為無誤差,可列出誤差方程:

設選中了n 個新舊坐標重合點,根據公式(4)可列出2n 個方程,當n>2 時,方程個數大于4,可采用最小二乘法求解式中的4個參數。

公式(5)用矩陣進行表達為:

按最小二乘進行求解,可得:

Visual Basic for Applications(簡稱VBA)是Autodesk 公司提供的一個基于對象的編程開發環境[2]。它利用AutoCAD ActiveX Automation 接口向AutoCAD 發送消息。而ActiveX Automation 是Microsoft 基于COM(組件對象模型)體系結構開發的一種技術。用戶可以用它來自定義AutoCAD,開發人員通過調用AutoCAD ActiveX 對象封裝的方法與屬性, 操縱AutoCAD 圖形對象。VBA 開發具有易學易用、功能強大等特點, 已經成為CAD 二次開發中一種最為常見的形式之一。
AutoCAD 的VBA 編程開發需要理解三方面內容, 一是AutoCAD 本身, 包括AutoCAD 圖元對象、數據和命令; 二是AutoCAD ActiveX Automation 接口, 可以與AutoCAD 對象進行消息傳遞;三是VBA 本身,理解對象、常量、程序流控制、調試和執行[3]。
理解AutoCad 的對象模型是對其進行編程的基礎。AutoCAD 以層次結構組織對象,如圖1,其頂層是Application,下面是Preferences、Document 等。Document 對象包含ModalSpace、PaperSpace、Blocks、Layers、Plot、Utility 等一系列對象。最底層的對象是點、線、圓、圓弧等基本圖形對象。
VBA 通過ActiveX Automation 技術能夠返回AutoCAD 的對象及其方法、屬性,開發的應用程序通過對AutoCAD 的各級對象的方法和屬性進行操作控制AutoCAD 的工作。通過方法可以實現對象的一些操作, 而對象狀態信息的收集或改變則是通過屬性操作來完成。

圖1 AutoCAD 對象模型層次路徑簡圖(部分)
2.2.1 CAD 地形圖平面坐標轉的具體過程
a. 首先將CAD 地形圖中新舊坐標系已知的點作為同名點,計算:

b.將新舊坐標系的同名點坐標分別減去

c.用b 轉換獲得的同名點坐標求出坐標轉換參數:

d.將CAD 地形圖整體平移,使(△X,△Y)與CAD 坐標原點重合;

2.2.2 CAD 中坐標轉換VBA 程序的實現
a.啟動AutoCAD,打開要坐標轉換的地形圖,command 命令行輸入VBAIDE 命令,啟動VBA 編輯器,如圖2;
b.在VBA 編輯器中,編制矩陣計算程序模塊,包括矩陣的乘法、轉置、加法和求逆;
c.編制求參數和誤差計算模塊;
d.編制DWG 圖形實體遍歷程序,實現對圖形實體坐標逐一進行變換;
e.程序編制完畢,保存為獨立的后綴為dvb 的文件;
f.在command 命令行輸入vbarun 或者在菜單中定制調用。

圖2 AutoCAD 中VBA 編輯器窗口
基于本文原理開發的坐標變換系統在多個工程項目得到應用,精度可靠,實現了DWG 數字地形圖不同坐標系間自動轉換,提高了生產效率。上述系統適合地形圖坐標變換旋轉角度和放縮比例不大的情況,當旋轉角度或放大比例過大,存在地形圖符號不符合制圖要求的,將在后續的研究中加以解決。