APP下载

高斯投影在AutoCAD中的应用

2018-11-05郑红艳郭海泉夏鹏

西部资源 2018年4期

郑红艳 郭海泉 夏鹏

摘要:本文通过对高斯投影中,高斯投影正算、高斯投影反算,高斯投影换带这三种转换方式的分析,结合地形图在AutoCAD中的常用表达方式,以VB.NET为编程语言,编写了基于AutoCAD的坐标转换程序。最后通过实例验证了转换方法的正确性。

关键词:高斯投影;正算;反算;换带;AutoCAD

1.引言

高斯投影,全称高斯-克吕格投影,是一种等角横切椭圆柱投影,由高斯于19世纪20年代拟定,后经克吕格进行修改补充得到的一种投影。除1:100万国际地图外,我国的基本比例尺地形图和各种大比例尺工程地形图均采用高斯投影坐标系统测制成图。

高斯投影没有角度变形,长度和面积变形也较小,中央经线无变形,自中央经线向投影带边缘变形逐渐变扩大。高斯投影的图形保持了相似性和某点在各方向上长度比的同一性,同时采用分带法则,使得各带之间能够使用相同的方式进行坐标计算,因此高斯投影在世界各国得到了广泛应用。

由于高斯投影存在变形,且离中央子午越远变形越大,所以各点的变形是不一致的。当中央子午线不一致,需要进行坐标转换时,为保存精度的可靠,不能使用AutoCAD自带的ALIGN(两点纠正)命令进行转换,只能采用高斯投影换带进行地形图坐标转换。

2.高斯投影分析

高斯投影计算主要有三种方式:高斯投影正算(以下简称正算)、高斯投影反算(以下简称反算)、高斯投影换带计算(以下简称换带)。

2.1高斯投影正算

正算就是将经纬度坐标转换为高斯平面XY坐标的过程,以方便工程应用。计算公式如下:

2.3高斯投影换带计算

换带计算是正算、反算的引申,其计算过程是将高斯平面XY坐标使用原投影参数先反算为经纬度坐标,然后使用新的投影参数将经纬度坐标正算为高斯平面XY坐标。

3.高斯投影在AutoCAD实现的关键步骤

地形图在AutoCAD中进行绘制时,使用的是经高斯投影正算后的坐标。当两幅地形图的投影参数不一致(同一参考椭球)时,就需要进行高斯投影换带,以保证高斯平面坐标的一致性。

3.1建立计算模型

计算包括两种,即正算模型和反算模型。建立统一的计算模型后,可以保证各个坐标点进行计算时,参数一致。

式(1)为正算模型,式(2)为反算模型。

3.2点对象转换

在AutoCAD中,一般使用块、形等对象来表示地形图中的点状符号。此类对象转换时,只需要将插入点进行换带计算即可。注记在地形图中也是一种特殊类型的点状符号,转换方式与块、形等点状对象的方式相同。

3.3线对象转换

在AutoCAD中,一般使用多段线表示河流边界、道路等线状符号。线状符号进行换带计算时,需要依次获取每个节点的原始坐标,然后对节点进行换带计算,最后再更新各个节点从而完成换带计算。

3.4面对象转换

在AutoCAD中,一般使用闭合的多边形表示房屋、植被等面状符号。此类符号的转换方式与线对象转换相同。如果面中含有岛洞,此时无法使用闭合多边形表示,需要使用填充面(Hatch)。填充面由多个环(HatchLoop)组成,转换时首先依次遍历每个环,然后再遍历环中的每个节点从而完成换带计算。

4.程序实现

本文中使用VisualStudi02013作为编程环境,使用VB.NET作为开发语言,利用AutoCAD提供的ARX.NET开发接口进行程序开发。

4.1创建编程环境

在VisualStudi02013中创建一个项目,语言选择Visual-Basic,类型选择类库。项目创建完毕后,引入AutoCAD安装目录中的acdbmgd.dll与acmgd.dll,并将“复制到本地”属性设为False。

4.2高斯投影类的实现

为提高高斯投影计算使用的效率,将高斯投影相关计算封装在类中,主要代码结构如下:

Public Class GaussProjection

Public Sub LB2XY(By Val L As Double,ByVal B As Double,ByRef X As Double,ByRef Y As Double)

Public Sub XY2LB(ByVal X As Double,ByVal Y As Double,ByRef L As Double,ByRef B As Double)

End Class

4.3定制轉换命令

在ARX.NET开发环境中,定义新命令的方法是在某个无参数的Sub方法中添加一个CommandMethodAttribute标识,程序加载后,在命令行中输入相应的命令就可以直接调用CommandMethod标识的方法,主要实现代码如下:

_

Public Sub ZBZH()

Using Trans As Transaction=DB.TransactionManager.StartTransaction

For Each ID As ObjectId In BlkTab

Dim Ent As Entity=Trans.GetObject(ID,OpenMode.For Write)

Select Case True

Case TypeOf Ent Is Block Reference'转换点状符号

Case TypeOf Ent Is Polyline'转换线状或面状符号

Case TypeOf Ent Is Hatch'转换面状符号

CaseElse'

End Select

Next

End Using

EndSub

4.4加载转换程序

高斯投影转换程序编写完毕后,会编译生成一个DLL文件。在AutoCAD命令行中输入NETLOAD后选择相应的DLL文件即可完成程序的加载。程序加载后,输入自定义命令ZBZH后就可以运行高斯投影转换程序了。

5.应用示例

在某地形图测绘项目中,从甲方收集了一些参考资料。查阅相关文档后得知原始资料的成果是基于1980西安坐标系使用119度作为中央子午线投影得到的。

当前项目使用的坐标系还是1980西安坐标系,但中央子午线是118度30分。如果要想利用原有的测量成果,必须对原成果进行高斯投影换带计算,才能与当前项目的坐标吻合。使用ZBZH命令后,就可以对原始资料进行高斯投影转换,效果如图1。

在转换前选择了10个检查点参与转换,然后将10个检查点的坐标通过南方Coord软件进行转换,对比结果如表1。

从对比差值来看,转换结果精度可靠。表中出现个别点有约1mm的误差,是因为精度取位的问题引起的。

此高斯投影转换程序支持单幅地形图转换,同时也支持多幅地形图批量转换,极大地提高了转换的效率。

6.结束语

高斯投影转换是一种使用频率极高的坐标转换方式。由于AutoCAD自身没有此项转换功能,必须通过开发才能实现。基于高斯投影转换公式开发的坐标工具在使用过程中能够极大地提高数据转换的效率及精度。