DXF坐标转换的实现
2017-11-28吕宝奇王瑞芳
吕宝奇 王瑞芳
DXF坐标转换的实现
吕宝奇1王瑞芳2
(1.河南省测绘工程院,河南 郑州 450003;2.郑州测绘学校,河南 郑州 450015)
在常用CAD文件处理中,对DXF文件编辑需要安装AutoCAD软件。基于此,本文通过研究DXF文件组织结构,直接接对DXF文件文本进行编辑,在已有坐标转换模型下,实现对DXF格式文件坐标的转换。
AutoCAD;DXF;坐标转换
AutoCAD由于其丰富的指令、强大的功能,已被各种工程测量使用,而DXF作为AutoCAD的公开矢量交换格式,分为ASCⅡ和二进制两类。其中,ASCⅡ编码由于其易于编辑和分析,被广泛应用,成为了一种事实上的标准。因此,掌握DXF格式的解析工作对地理信息程序设计人员至关重要。
测绘工作经常会遇到不同坐标系下的转换,如1980西安坐标系到2000国家大地坐标系的转换。作为Auto⁃CAD的交换格式,DXF相对易于解析,可以不依赖Auto⁃CAD编辑,被众多用户所采用。因此,本文对DXF格式矢量文件坐标转换进行分析与实现[1-3]。
1 DXF格式分析
1.1 基本结构
从根本上来说,DXF文件可以看作是由组码和组值组成的矢量文件,组码指示组值的类型,而组值确定了其值(Value)。为了清晰显示,DXF文件的每一个组码和组值都各占一行。每一段开头为SECTION 0,第二段为组码2和该段的名称,中间内容为定义各个要素的组码和组值,最后为表示结束的ENDSEC O。DXF基本结构如图1所示。
图1 DXF基本结构
标题段(Header)主要用于记录所有标题变量的当前状态和当前值。表段(Table)包括有线型表、图层表、字体表和视图表等一系列表。块段(Blocks)记录了块名、块种类、插入基点及组成块的成员等。实体段(Entities)记录了实体的名称、所在图层及其名字、线型、颜色[4,5]。
由于DXF的组织结构非常复杂,而在坐标转换中,常用的要素其实并不是很多,因此,并不需要完整地读取整个DXF文件,只需要提取部分图形的实体信息,忽略DXF文件中的大部分数据,获取实际的层表、块段和实体段,就可以获取相应图形的坐标信息[6-8]。图层表中说明每一层的颜色、线型,这些内容不需要更改,因此可以直接跳过。
坐标转换常用的基本组码定义为:
9:变量名称标志符(仅使用于Header段);
10、20、30:主要点x、r、。值;
11~18,21~28,31~37:其他点的z、y、z值;
40~48:双精度浮点值(如缩放比例等);
50:角度。
1.2 转换分析
1.2.1 主要CAD要素。在坐标转换处理中,部分CAD要素由于其定义相对单一、易懂,可以对其直接修改而无需过多处理。主要为AcDbPohline、AcDbPoint、AcD⁃bText、AcDline、AcDb2dPolyline、AcDbVector、AcDbSpline、AcDhMText、AcDbCircle等。对于单点只需直接转换,对于直线及多段线,需要对每个顶点逐一转换,对于圆,只需要对其圆心进行转换[9]。
1.2.2 块要素分析。块(Blocks)是DXF文件中相当重要的一种要素。在实际生产中,块被用于各种符号、复杂图元等构建中。块由于其组织结构具有特殊性,因此,需要专门处理Blocks段中包含的所有块定义,块定义不能嵌套包含块定义[10]。
标志块本身的字符串为“AcDbBlockBegin”,结束字符串为“AcDBBlockEnd”。由于同一个块可由多个块参照引用,因此,在转换前,应先遍历所有块要素,获取其中的块名和块偏移值。本文定义一个块的结构体:
Private Struct Block
{
Public string StrName;
Public double x;
Public double y;
}
由于块存储的是与块参照(AcDbBlockReference)的相对位置,即块偏移值,所以直接转换块的坐标或转换相对位置都是不正确的。需要利用获取的x、y偏移值,x、y缩放因子和旋转角度,求出块的绝对位置[11]。对绝对位置进行转换后,再反向计算修改块参照的相应坐标值。其伪代码为:
//获取块参照的xy值
GetXY(outxpart,out ypart);
//获取块xy坐标值
GetXY(out x.out y);
//获取xy偏移值GetdXdY(out dx,outdy);//获取块旋转参数
GetAngle(out angle);
//计算xy临时变量
CaculateBlock(angle,dx,dy,x,y,xpart,ypart,outxTemp,outyTemp)
{
xTemp=dx*cos(angle)*xpart–dy*sin(angle)*ypart+x;
yTemp=dx*sin(angle)*xpart+dy*cos(angle)*ypart+y;
}
∥对xy临时变量进行转换
Transform(ref xTemp,refyTemp)
//反向计算xy坐标
CaculateBlockResult(angle,dx,dy,x,y,xpart,ypart,xTemp,yTemp,outx,outy)
{
x=xTemp-dx*cos(angle)*xpart+dy*sin(an⁃gle)*ypart;
y=yTemp-dx*sin(angle)*xpart-dy*cos(an⁃gle)*ypart;
}
1.3 其他图元处理
“$EXTMIN”“$EXTAX”存储DXF文件图元的边界,如果直接转换,显然不正确的。本文采用的方法为统计所有转换后的坐标值并比较其大小,再修改原始边界值。
在普遍的地理数据处理中,一般将圆弧(Arc)拟合曲线,而不是直接使用。如果要转换圆弧,则先分析其构成。组码10、20、30对应圆弧圆心坐标,40对应圆弧半径长度,50代表圆弧开始角度,51代表圆弧结束角度。因此,要转换圆弧就不仅要转换圆心坐标,其半径角度等都可能改变。可以根据圆参数方程计算起点与终点的坐标,对圆心、起点、终点进行转换后,再反求半径与开始角度和结束角度。椭圆(Ellipse)的转换原理与其相似。
DXF转换流程如图2所示。
2 转换模型
2.1 二维四参数转换
二维四参数转换模型通常用于范围较小的不同高斯投影平面转换、相对独立的平面坐标系统与2000国家大地坐标系的联系,包括两个平移参数、一个旋转参数和一个尺度比参数,因为DXF坐标为平面坐标,所以可以直接使用二维四参数转换模型进行转换。
2.2 二维七参数转换
二维七参数转换模型通常用于不同地球椭球基准下的椭球面上的点位坐标转换,包括三个平移参数、三个旋转参数和一个尺度比参数。因为DXF坐标为平面坐标,而二维七参数输入坐标为经纬度坐标,因此,需要先将DXF中的坐标经过高斯投影变换得到经纬度坐标,对其进行二维七参数转换,然后再对其进行高斯投影变换得到平面坐标。
图2 DXF转换流程
3 改进及展望
3.1 改进
以往对圆弧进行处理时,如果两个坐标系存在较为复杂的转换关系,圆弧变换之后可能不再是圆弧,因此,可以不对圆心直接进行转换,而通过起点、终点和圆心对应的相似关系进行相似变换求解圆心,这样可以保证圆弧的形状与转换之前保持一致。
在坐标转换中,主要计算工作为矩阵运算。由于图元要素较多,计算速度受到影响,因此,可以采用多种方法加速计算:一是可以采用SIMD指令执行并行计算,提高CPU利用率,加速矩阵运算:二是可以采用CPU加速,利用显卡更强的并行计算能力提高运算速度;三是可以利用四元数代替矩阵计算转换中的旋转部分,降低列内存的需求。
3.2 展望
DXF作为AutoCAD的交换格式,在矢量数据处理中被广泛应用,因此,其坐标转换有广阔的应用前景。只有对DXF数据格式进行研究,并对坐标转换原理有了一定的认识,才能更好地对其进行坐标转换处理。虽然其处理效率还有待提高,但如何更精确地实现更复杂的转换功能,值得我们进一步研究与探讨。
[1]中华人民共和国国土资源局部.TD/T 1001-2012地籍调查规程[S].北京:中国标准出版社,2012.
[2]刘经南.基准统的建立和变换[M].武汉:武汉大学出版社,1995.
[3]杜向锋,张兴福,张永毅等.CORS测量成果转换的一步法及其精度分析[J].测绘通报,2015(7):23-26.
[4]周忠谟,易杰军,周琪.GPS卫星测量原理与应用[M].武汉:测绘出版社,1999.
[5]中华人民共和国住房和城乡建设部.GB 50026—2007.工程测量规范[S].北京:中国计划出版社,2008.
[6]魏子卿.我国大地坐标系的换带问题[J].武汉大学学报(信息科学版),2003(2):138-143.
[7]陈俊勇.中国现代大地基准——中国大地坐标系统2000(CGCS2000)及其框架[J].测绘学报,2008(3):260-271.
[8]何林,柳林涛,许超钤,等.常见平面坐标系之间相互转换的方法研究[J].测绘通报,2014(9):6-11.
[9]杨国清.控制测量学[M]郑州:黄河水利出版社,2010.
[10]孔祥元,梅是义.控制测量(下册)[M].武汉:武汉出版社,2006.
[11]欧朝龙,黄梦龙.地方坐标到2000国家大地坐标转换方法研究[J].测绘通报,2010(9):26-28.
Research and Realization of Coordinate Transformation base on DXF
Lv Baoqi1Wang Ruifang2
(1.Henan Engineering Institute of Surveying and Mapping,Zhengzhou Henan 450002;2.Zhengzhou School for Surveying and Mapping,Zhengzhou Henan 450015)
In common CAD file processing,the DXF file editor needs to be installed with AutoCAD soft⁃ware.Based on this,this paper studied the organization structure of DXF file,and directly edited the text of DXF file,and realized the conversion of DXF format file coordinates under the existing coordinate con⁃version model.
AutoCAD;DXF;coordinate system conversion
P283
A
1003-5168(2017)10-0036-03
2017-09-01
吕宝奇(1981-),男,工程师,研究方向:计算机辅助制图与数字城市平台建设。