杨井源 杨正银 马涛 蒙印 吕喜军
DWG数据在不同坐标系间变换的实现
杨井源1杨正银1马涛2蒙印1吕喜军1
(1.四川省遥感信息测绘院 四川成都 610100;2.眉山市城乡规划局 四川眉山 620010)
采用七参数数学模型和AutoCAD ActiveX技术,根据重合控制点坐标计算的转换参数进行数据变换,并以眉山市DWG矢量数据的转换为例,提出了DWG数据在不同坐标系之间互相转换的技术路线和实现方法,实现了DWG图形数据在眉山市独立坐标系和其他坐标系之间的相互转换。
七参数 数学模型 DWG数据 坐标系转换
为了减小高斯投影变形带来的影响,我国地市级测绘生产一般采用地方独立坐标系,而实际应用时,需要提供和使用1954北京坐标系、1980西安坐标系以及2000国家大地坐标系的数据成果,这需要对成果数据进行快速坐标系转换,各种坐标系之间的转换是经常碰到的问题[1]。目前地市级基础测绘图形成果大部分是AutoCAD平台的DWG数据,DWG数据格式并未公开,AutoCAD是对DWG数据处理的最好平台,所以DWG数据坐标系转换AutoCAD为首选平台[2]。
本文主要介绍基于AutoCAD 2014平台,利用VB.NET结合AutoCAD ActiveX Automation技术,开发坐标系转换系统,实现根据七参数数学模型进行转换参数计算、精度评估、DWG图形转换等功能,并在眉山市基础测绘数据分发信息化系统研究与实现项目中得到成功应用。
2.1 ActiveX Automation技术
ActiveX Automation是微软推出的一个技术标准,广义上指微软的COM(组件对象模型)构架,允许应用程序之间相互控制、调用[3]。软件开发人员可以通过调用AutoCAD ActiveX 对象所封装的方法与属性,操纵AutoCAD。可以使用各种面向对象编程的语言对其中的方法、属性进行引用,从而达到对AutoCAD实现编程的目的,它的优点是在开发的系统内部可以使用AutoCAD各种功能,与系统能高度融合与集成。组件接口如图 1所示。
图1 AutoCAD COM组件接口
根据组件接口,编写获取CAD实体坐标串函数:
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实体图形函数:
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 数学模型
测绘生产DWG数据一般采用的高斯投影的直角坐标系,本文采用布尔莎七参数数学模型,公式如图 2所示,式中、、为平移参数、、、为旋转参数,为尺度参数[4,5]。
图2 布尔莎七参数公式
根据上述公式,利用最小二乘法,编写计算七参数。
主要代码如下:
Function DefineX(num As Integer,sPnts As Matrix,dPnts As Matrix) As Matrix
Dim Num3 As Integer = num * 3'矩阵行数
Dim A As Matrix = New Matrix(Num3,7)'系数矩阵
Dim L As Matrix = New Matrix(Num3,1) '常数矩阵
'根据重合控制点计算系数矩阵A和常数矩阵L,此处代码省略
Dim AT As Matrix = A.Transpose()'系数矩阵转置
Dim pATA As Matrix = AT * A'系数矩阵乘法
Dim ATL As Matrix = AT * L
Dim invATA As Matrix = pATA.Inverse()'矩阵求逆
Return invATA * ATL'返回转换七参数矩阵
End Function
根据七参数系数矩阵(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) '省略构建系数矩阵代码
Return B * X
End Function
3.1 程序开发原理
使用VS2012 VB.NET系统建立工程,添加控件设计程序界面,提供用户操作接口,然后引用AutoCAD 2014 COM组件,利用AutoCAD ActiveX Automation技术,实现对DWG数据的打开和实体遍历等操作;利用七参数模型根据源坐标系和目标坐标系重合控制点计算变换参数,通过七参数和CAD数据坐标计算出目标坐标系的坐标,修改CAD实体坐标,最后保存数据,实现不同坐标系间DWG数据变换。由于使用AutoCAD ActiveX技术,不存在数据交互的问题,在坐标系变换过程中,仅对CAD实体的节点坐标进行了变换,实体的层码、线型、颜色、线宽、扩展属性等信息均未改变,保证了数据的质量。
3.2 开发方法与步骤
1.采用VB.NET语言,新建Windows窗体应用程序,并添加引用“AutoCAD 2014 Type Library”COM类库组件,将AutoCAD组件引入系统。
2.在Windows窗体应用程序中,设计界面并添加控件事件。
3.新建矩阵算法模块(Matrix),编写矩阵转置、矩阵乘、矩阵逆等功能函数,供七参数转换模块调用。
4.新建七参数转换算法模块(Transform),编写转换参数计算、误差统计、坐标转换等功能函数,供后续调用。
5.新建AutoCAD连接和功能调用模块,遍历CAD所有实体,逐点变换实体节点坐标,实现DWG数据坐标系变换。
3.3 程序流程及部分核心代码
1.创建AutoCAD实例,建立与CAD联系,实现对CAD控制
‘程序内部创建CAD实例,供系统调用
Dim pApp As AcadApplication = New AcadApplication
pApp.Application.Visible = False’不显示CAD界面,后台运行
2.根据重合控制点,调用七参数转换算法模块计算转换参数
Dim X As Matrix=DefineX(num,sPnts,dPnts)
3.打开DWG数据
pApp.Application.Documents.Open(CadFile)‘打开DWG数据
4.遍历DWG所有实体,进行坐标变换
Public Sub TransFormMain()
遍历CAD所有实体
For Each entity As AcadEntity In pApp.ActiveDocument.ModelSpace
'调用得到实体坐标串函数
Dim pCoords As Double() = GetCoordinates(entity)
TransForm(pCoords) '调用七参数坐标变换函数,逐点坐标变换
UpDataEntity(entity, pCoords) '调用更新实体函数
Next
End Sub
5.保存坐标系转换后的DWG数据
pApp.Application.Documents.Item(0).SaveAs(CadFile, DwgType)
6.关闭CAD进程,释放内存,完成转换
pApp.Application.Quit()
本文以眉山市基础测绘数据分发信息化系统项目为例,眉山市中心城区1∶2000地形图数据成果为眉山市独立坐标系,但用户需要1980西安坐标系和2000国家大地坐标系的成果数据,数据分发时经常需要坐标系转换。根据覆盖整个数据区域均匀分布的眉山市独立坐标系与1980西安坐标系的控制点,本文以眉山市独立坐标系转换1980西安坐标系进行实验。首先根据重合点计算转换参数和统计残差,并剔除粗差较大的点[6,7],最后选择6个控制点作为计算依据,结果如图 3所示,可以看出残差是比较小的,均未超过±0.01m,说明精度可靠;然后利用求得的转换参数,运行转换程序进行DWG数据坐标系转换,数据从眉山市独立坐标系转换到了1980西安坐标系。经检验,数据与属性均未损失;检查点计算误差如图 4所示,其平面中误差为±0.021m;由于采用统一转换模型,图幅间接边不存在误差,达到预期效果。
图3 重合点坐标及计算误差
图4 检查点平面坐标及计算误差
本文介绍的DWG数据坐标系转换系统,运用在眉山市信息化数据分发系统中,经测试,系统运行稳定,精度可靠,实现了DWG数据不同坐标系间自动、批量转换,提高了生产效率,提升了眉山市DWG数据分发能力,取得很好效果。数据转换的精度主要取决于重合控制点的精度、分布和数量,选择转换区域分布均匀、高质量的5个以上控制点,统计误差并删除粗差点,可提高转换精度。
[1] 欧朝敏,黄梦龙.地方坐标系到2000国家大地坐标转换方法研究[J].测绘通报,2010(9).
[2] 肖锋,吕宝奇,王瑞芳.DWG图件的坐标系转换方法的探讨与实现[J].城市勘测,2012(2).
[3] 佟士懋,邢芳芳,夏齐霄.AutoCAD ActiveX VBA二次开发技术基础及应用实例,国防工业出版社,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.
眉山市基础测绘数据分发信息化系统研究与应用,四川省测绘地理信息局科技支撑(项目编号:J2013SZ02)资助