楊井源 楊正銀 馬濤 蒙印 呂喜軍
?
DWG數(shù)據(jù)在不同坐標系間變換的實現(xiàn)
楊井源1楊正銀1馬濤2蒙印1呂喜軍1
(1.四川省遙感信息測繪院 四川成都 610100;2.眉山市城鄉(xiāng)規(guī)劃局 四川眉山 620010)
采用七參數(shù)數(shù)學模型和AutoCAD ActiveX技術,根據(jù)重合控制點坐標計算的轉換參數(shù)進行數(shù)據(jù)變換,并以眉山市DWG矢量數(shù)據(jù)的轉換為例,提出了DWG數(shù)據(jù)在不同坐標系之間互相轉換的技術路線和實現(xiàn)方法,實現(xiàn)了DWG圖形數(shù)據(jù)在眉山市獨立坐標系和其他坐標系之間的相互轉換。
七參數(shù) 數(shù)學模型 DWG數(shù)據(jù) 坐標系轉換
為了減小高斯投影變形帶來的影響,我國地市級測繪生產(chǎn)一般采用地方獨立坐標系,而實際應用時,需要提供和使用1954北京坐標系、1980西安坐標系以及2000國家大地坐標系的數(shù)據(jù)成果,這需要對成果數(shù)據(jù)進行快速坐標系轉換,各種坐標系之間的轉換是經(jīng)常碰到的問題[1]。目前地市級基礎測繪圖形成果大部分是AutoCAD平臺的DWG數(shù)據(jù),DWG數(shù)據(jù)格式并未公開,AutoCAD是對DWG數(shù)據(jù)處理的最好平臺,所以DWG數(shù)據(jù)坐標系轉換AutoCAD為首選平臺[2]。
本文主要介紹基于AutoCAD 2014平臺,利用VB.NET結合AutoCAD ActiveX Automation技術,開發(fā)坐標系轉換系統(tǒng),實現(xiàn)根據(jù)七參數(shù)數(shù)學模型進行轉換參數(shù)計算、精度評估、DWG圖形轉換等功能,并在眉山市基礎測繪數(shù)據(jù)分發(fā)信息化系統(tǒng)研究與實現(xiàn)項目中得到成功應用。
2.1 ActiveX Automation技術
ActiveX Automation是微軟推出的一個技術標準,廣義上指微軟的COM(組件對象模型)構架,允許應用程序之間相互控制、調用[3]。軟件開發(fā)人員可以通過調用AutoCAD ActiveX 對象所封裝的方法與屬性,操縱AutoCAD。可以使用各種面向對象編程的語言對其中的方法、屬性進行引用,從而達到對AutoCAD實現(xiàn)編程的目的,它的優(yōu)點是在開發(fā)的系統(tǒng)內部可以使用AutoCAD各種功能,與系統(tǒng)能高度融合與集成。組件接口如圖 1所示。
圖1 AutoCAD COM組件接口
根據(jù)組件接口,編寫獲取CAD實體坐標串函數(shù):
Private Function GetCoordinates(pAcadEntity As AcadEntity) As Double()
If TypeOf pAcadEntity Is AcadPolyline Then’多義線
Dim pPolyline As AcadPolyline = pAcadEntity
Return pPolyline.Coordinates()
End If
If TypeOf pAcadEntity Is AcadText Then‘注記
Dim pText As AcadText = pAcadEntity
Dim pAP As Double() = pText.TextAlignmentPoint
If pAP(0) > 0 Then Return pAP
Return poly.InsertionPoint
End If
If TypeOf pAcadEntity Is AcadBlockReference Then
Dim pReference As AcadBlockReference = pAcadEntity
Return pReference.InsertionPoint
End If’省略其他實體類型
End Function
編寫更新CAD實體圖形函數(shù):
Private Sub UpDataEntity(pAcadEntity As AcadEntity, pCoords As Double())
If TypeOf pAcadEntity Is AcadPolyline Then
Dim pPolyline As AcadPolyline = pAcadEntity
pPolyline.Coordinates = pCoords
pPolyline.Update()
End If
If TypeOf pAcadEntity Is AcadText Then
Dim pText As AcadText = pAcadEntity
Dim pAP As Double() = pText.TextAlignmentPoint
If pAP(0) > 0 Then
pText.TextAlignmentPoint = pCoords
Else
pText.InsertionPoint = pCoords
End If
pText.Update()
End If
If TypeOf pAcadEntity Is AcadBlockReference Then
Dim pReference As AcadBlockReference = pAcadEntity
pReference.InsertionPoint = pCoords
pReference.Update()
End If
‘省略其他實體類型
End Sub
2.2 數(shù)學模型
測繪生產(chǎn)DWG數(shù)據(jù)一般采用的高斯投影的直角坐標系,本文采用布爾莎七參數(shù)數(shù)學模型,公式如圖 2所示,式中、、為平移參數(shù)、、、為旋轉參數(shù),為尺度參數(shù)[4,5]。
圖2 布爾莎七參數(shù)公式
根據(jù)上述公式,利用最小二乘法,編寫計算七參數(shù)。
主要代碼如下:
Function DefineX(num As Integer,sPnts As Matrix,dPnts As Matrix) As Matrix
Dim Num3 As Integer = num * 3'矩陣行數(shù)
Dim A As Matrix = New Matrix(Num3,7)'系數(shù)矩陣
Dim L As Matrix = New Matrix(Num3,1) '常數(shù)矩陣
'根據(jù)重合控制點計算系數(shù)矩陣A和常數(shù)矩陣L,此處代碼省略
Dim AT As Matrix = A.Transpose()'系數(shù)矩陣轉置
Dim pATA As Matrix = AT * A'系數(shù)矩陣乘法
Dim ATL As Matrix = AT * L
Dim invATA As Matrix = pATA.Inverse()'矩陣求逆
Return invATA * ATL'返回轉換七參數(shù)矩陣
End Function
根據(jù)七參數(shù)系數(shù)矩陣(X),計算目標坐標系的平面坐標代碼如下:
Function TransForm(inPoints As Matrix, X As Matrix) As Matrix
Dim N As Integer = inPoints.Row
Dim B As Matrix = New Matrix(N * 3, 7) '省略構建系數(shù)矩陣代碼
Return B * X
End Function
3.1 程序開發(fā)原理
使用VS2012 VB.NET系統(tǒng)建立工程,添加控件設計程序界面,提供用戶操作接口,然后引用AutoCAD 2014 COM組件,利用AutoCAD ActiveX Automation技術,實現(xiàn)對DWG數(shù)據(jù)的打開和實體遍歷等操作;利用七參數(shù)模型根據(jù)源坐標系和目標坐標系重合控制點計算變換參數(shù),通過七參數(shù)和CAD數(shù)據(jù)坐標計算出目標坐標系的坐標,修改CAD實體坐標,最后保存數(shù)據(jù),實現(xiàn)不同坐標系間DWG數(shù)據(jù)變換。由于使用AutoCAD ActiveX技術,不存在數(shù)據(jù)交互的問題,在坐標系變換過程中,僅對CAD實體的節(jié)點坐標進行了變換,實體的層碼、線型、顏色、線寬、擴展屬性等信息均未改變,保證了數(shù)據(jù)的質量。
3.2 開發(fā)方法與步驟
1.采用VB.NET語言,新建Windows窗體應用程序,并添加引用“AutoCAD 2014 Type Library”COM類庫組件,將AutoCAD組件引入系統(tǒng)。
2.在Windows窗體應用程序中,設計界面并添加控件事件。
3.新建矩陣算法模塊(Matrix),編寫矩陣轉置、矩陣乘、矩陣逆等功能函數(shù),供七參數(shù)轉換模塊調用。
4.新建七參數(shù)轉換算法模塊(Transform),編寫轉換參數(shù)計算、誤差統(tǒng)計、坐標轉換等功能函數(shù),供后續(xù)調用。
5.新建AutoCAD連接和功能調用模塊,遍歷CAD所有實體,逐點變換實體節(jié)點坐標,實現(xiàn)DWG數(shù)據(jù)坐標系變換。
3.3 程序流程及部分核心代碼
1.創(chuàng)建AutoCAD實例,建立與CAD聯(lián)系,實現(xiàn)對CAD控制
‘程序內部創(chuàng)建CAD實例,供系統(tǒng)調用
Dim pApp As AcadApplication = New AcadApplication
pApp.Application.Visible = False’不顯示CAD界面,后臺運行
2.根據(jù)重合控制點,調用七參數(shù)轉換算法模塊計算轉換參數(shù)
Dim X As Matrix=DefineX(num,sPnts,dPnts)
3.打開DWG數(shù)據(jù)
pApp.Application.Documents.Open(CadFile)‘打開DWG數(shù)據(jù)
4.遍歷DWG所有實體,進行坐標變換
Public Sub TransFormMain()
遍歷CAD所有實體
For Each entity As AcadEntity In pApp.ActiveDocument.ModelSpace
'調用得到實體坐標串函數(shù)
Dim pCoords As Double() = GetCoordinates(entity)
TransForm(pCoords) '調用七參數(shù)坐標變換函數(shù),逐點坐標變換
UpDataEntity(entity, pCoords) '調用更新實體函數(shù)
Next
End Sub
5.保存坐標系轉換后的DWG數(shù)據(jù)
pApp.Application.Documents.Item(0).SaveAs(CadFile, DwgType)
6.關閉CAD進程,釋放內存,完成轉換
pApp.Application.Quit()
本文以眉山市基礎測繪數(shù)據(jù)分發(fā)信息化系統(tǒng)項目為例,眉山市中心城區(qū)1∶2000地形圖數(shù)據(jù)成果為眉山市獨立坐標系,但用戶需要1980西安坐標系和2000國家大地坐標系的成果數(shù)據(jù),數(shù)據(jù)分發(fā)時經(jīng)常需要坐標系轉換。根據(jù)覆蓋整個數(shù)據(jù)區(qū)域均勻分布的眉山市獨立坐標系與1980西安坐標系的控制點,本文以眉山市獨立坐標系轉換1980西安坐標系進行實驗。首先根據(jù)重合點計算轉換參數(shù)和統(tǒng)計殘差,并剔除粗差較大的點[6,7],最后選擇6個控制點作為計算依據(jù),結果如圖 3所示,可以看出殘差是比較小的,均未超過±0.01m,說明精度可靠;然后利用求得的轉換參數(shù),運行轉換程序進行DWG數(shù)據(jù)坐標系轉換,數(shù)據(jù)從眉山市獨立坐標系轉換到了1980西安坐標系。經(jīng)檢驗,數(shù)據(jù)與屬性均未損失;檢查點計算誤差如圖 4所示,其平面中誤差為±0.021m;由于采用統(tǒng)一轉換模型,圖幅間接邊不存在誤差,達到預期效果。
圖3 重合點坐標及計算誤差
圖4 檢查點平面坐標及計算誤差
本文介紹的DWG數(shù)據(jù)坐標系轉換系統(tǒng),運用在眉山市信息化數(shù)據(jù)分發(fā)系統(tǒng)中,經(jīng)測試,系統(tǒng)運行穩(wěn)定,精度可靠,實現(xiàn)了DWG數(shù)據(jù)不同坐標系間自動、批量轉換,提高了生產(chǎn)效率,提升了眉山市DWG數(shù)據(jù)分發(fā)能力,取得很好效果。數(shù)據(jù)轉換的精度主要取決于重合控制點的精度、分布和數(shù)量,選擇轉換區(qū)域分布均勻、高質量的5個以上控制點,統(tǒng)計誤差并刪除粗差點,可提高轉換精度。
[1] 歐朝敏,黃夢龍.地方坐標系到2000國家大地坐標轉換方法研究[J].測繪通報,2010(9).
[2] 肖鋒,呂寶奇,王瑞芳.DWG圖件的坐標系轉換方法的探討與實現(xiàn)[J].城市勘測,2012(2).
[3] 佟士懋,邢芳芳,夏齊霄.AutoCAD ActiveX VBA二次開發(fā)技術基礎及應用實例,國防工業(yè)出版社,2006.
[4] 柳光魁,王振祿,趙永強等.BJ-54坐標系與WGS-84坐標系轉換方法及精度分析[J].測繪與空間地理信息,2007(6).
[5] 張宏.布爾莎-沃爾夫轉換模型的幾何證明[J].測繪與空間地理信息,2006,29(2):46-47.
[6] 郭春喜,馬林波,張驥等.西安80坐標系與WGS-84坐標系轉換模型的確定[J].東北測繪,2002,25(4):34-36.
[7] 狄曉燕. 地方獨立坐標系向2000國家大地坐標系轉換研究[J].西安科技大學,2010.
[8] 汪志遠. 舊坐標到2000國家大地坐標轉換方法[J].甘肅水利水電技術,2011-7.
眉山市基礎測繪數(shù)據(jù)分發(fā)信息化系統(tǒng)研究與應用,四川省測繪地理信息局科技支撐(項目編號:J2013SZ02)資助