侯祥意,卢姗,陶超
(1.广州南方智能技术有限公司,广东 广州 510663; 2.《规划师》杂志社,广西 南宁 530029)
2000国家大地坐标系是国务院批准使用的新一代高精度地心坐标系。由于各行业历史测绘成果主要采用1954北京坐标系和1980西安坐标系,因此需要建立坐标转换模型和编制坐标转换软件,将原始测绘成果转换到2000国家大地坐标系。原始测绘成果主要为CAD文件,主要包括DGN、DWG、DXF三种,CAD文件中的图形对象主要包括空间几何对象、符号表达要素、扩展属性信息三大类。在坐标转换过程中,严密无损转换不仅要确保空间几何对象的坐标严密转换、拓扑关系完整,还要保证符号表达要素、扩展属性信息的完整一致性。
在诸多CAD文件坐标转换的文章中,对DWG、DXF的转换方法研究较多,如汪燕麟等提出建立大地坐标4参数转换模型与AutoCAD软件中仿射变换模型的联系,研制坐标转换软件实现DWG文件的转换[1];范冲等提出利用FME(Feature Manipulate Engine)转换模板批量转换DWG和DXF文件的方法[2];谢梓威等提出采用FME Object技术进行软件开发实现对DWG数据的无损转换[3]。
这些研究中,很少涉及CAD文件重要格式之一的DGN格式以及CAD成果一体化转换且多数探讨了CAD图形空间坐标转换的几何精度,鲜少关注符号化表达样式及扩展属性信息的完整性。针对此问题,本文尝试在构建严密可逆的多项式坐标转换模型的基础上,实现CAD文件的一体化动态无损转换,并基于MicroStation平台开发转换软件,高效稳定地实现坐标基准统一,促进数据共享。
MicroStation平台是Bentley公司开发的CAD基础平台,其面向建筑、市政、水利、交通、地理信息等各行业的解决方案均基于该平台构建。平台历经了95、2004、V8i、CONNECT Edition四个重要的版本阶段。具有使用方便、功能强大、二三维一体化等特点,在全球拥有广大的用户。
MicroStation平台提供了丰富的二次开发选项,基于COM组件的有VBA的二次开发和基于.NET框架的AddIn的开发方式以及基于其SDK的Native Code的开发方式。
DGN文件是MicroStation的主要文件格式,一个DGN文件包含多个模型,每个模型由若干元素组成,如线、面、圆弧、文本等。DGN文件的对象结构如图1所示[4]:
DGN中的元素主要分为图形类和非图形类,图形类元素内容主要包括空间坐标、符号化表达要素、扩展属性信息三部分,需要进行坐标转换;非图形类元素没有几何图形,没有空间坐标,因此不需要进行坐标转换。
图1 DGN文件对象结构图
RealDWG是Autodesk公司提供的软件库,它允许程序员通过C++和.NET对DWG和DXF文件本身进行读写。具备以下特征:
(1)支持AutoCAD R14及以上版本生成的DWG格式;
(2)在32位系统下,所产生的应用程序既可以在32位的Windows系统内运行,也可以在64位系统下运行;
(3)所产生的应用程序完全可以脱离AutoCAD独立运行。
基于Bentley公司与Autodesk公司签署的合作协议,MicroStation平台直接使用RealDWG库对DWG和DXF进行读写,操作后的DWG和DXF文件得到Autodesk公司的授权认证,确保了数据的完整性,不会发生精度损失、数据丢失等情况。采用最新的MicroStation平台,可支持从2004到2018版本的DWG文件的互操作[5]。
2000坐标转换采用双二元三次多项式转换模型进行拟合。以北京1954坐标系向CGCS2000坐标系转换为例:已知同名点1954和2000坐标系下坐标(X54、Y54),(X2000、Y2000),待求的转换系数为Aij,Bij,双二元三次多项式模型表达式为:
以转换后的国家2000坐标残差平方和最小为条件,用上百对重合点进行拟合,采用最小二乘平差计算求取转换参数[6]。统计分析表明,X、Y方向内符合精度均小于 4 mm,满足精度要求。以北京1954向CGCS2000转换为例,残差分布如图2所示:
图2 北京1954-CGCS2000多项式转换模型残差分布图
在求得北京1954至CGCS2000转换的双二元三次多项式系数后,CGCS2000至北京1954的转换过程采用原系数进行迭代计算求得。
以北京1954至CGCS2000转换为例,迭代方法如下所示:
利用北京1954至CGCS2000转换的多项式系数进行CGCS2000至北京1954转换,逆向迭代过程如下:
采用迭代法,由于只采用了一套参数,可以保证正向转换和逆向转换的严密无损,不会有误差的积累。经过50次正逆向转换测试,△X的平均值为 -0.000 000 000 014 901 2 m,△Y的平均值为0.000 000 000 028 405 3 m。
CAD文件中的图形元素主要可分为简单对象和复合对象,而图形元素的核心是几何图形。几何图形的最基本单元是点,因此可以采用点对点的方式进行图形的坐标转换。转换过程为:首先判断是否为图形元素,对于图形元素划分类型为简单元素或者复合元素;其次,对于简单元素,取出其构成坐标点,逐点进行转换,对于复合元素,先取出其构成子元素,再取出其子元素构成坐标点,逐点进行转换;第三步采用转换后的坐标点依据其逻辑关系进行元素的几何对象重构;最后复制原元素的符号化表达样式、扩展属性到新的元素,并将新坐标系的元素重绘到文件,旧坐标系的元素销毁[7]。转换流程如图3所示:
图3 点对点坐标转换流程图
采用点对点的坐标转换方法,可以保证图形的转换精度以及图形元素间拓扑关系的完整性,对于相邻图幅,不会存在缝隙、重叠、悬挂点等接边问题。
在MicroStation中,并没有简单元素的定义,这里的简单元素主要是为了论述方便,相较于下文中的复合元素而言,由点直接构成,可以单独定义,没有子元素。按照其特点,可分为如下几类:
(1)一点定位元素,这类元素的几何图形是一个点,主要包括文本(TextElement)、文本节点(TextNodeElement,即多行文本),通过原点(Origin)进行空间定位,转换时,计算原点转换前后的坐标差值,使用元素的Move方法平移即可。对于标签元素(TagElement),其在图形上表示为一个箭头,由于其作用主要是对图形对象进行整饰、说明,拓扑上的要求小,因此也按照一点定位元素的坐标转换方法进行转换。一点定位元素示例如图4(图中十字丝表示原点位置):
图4 一点定位元素示例
(2)多点定位元素,这类元素的几何图形由多个点构成,按照构造特征不同,主要可分为以下几类进行转换:
①点列表类:MicroStation中的点列表元素主要包括线(LineElement)、多边形(ShapeElement)、曲线(CurveElement)三类,其几何图形由一组有序的坐标点构成,他们都继承了VertexList对象。转换时,通过GetVertices方法获取其构成坐标点,对这些坐标点转换后,使用ModifyVertex方法进行修改。在MicroStation中,可绘制的点也是一个长度为0的线元素。
②B样条曲线(BsplineCurveElement):B样条曲线在地形图中很常见,主要用来表示等高线。在MicroStation中,主要通过GetPoles方法获取样条曲线的构成点,再对点进行坐标转换,然后使用SetPoles方法重绘图形。
③圆弧(ArcElement):圆弧可通过圆弧起点、圆弧中点、圆弧结点3点确定,因此在转换时,通过获取圆弧上的3点进行坐标转换。
④圆、椭圆(EllipseElement):可通过3点确定一个椭圆,也可通过圆心、长半轴、短半轴确定一个椭圆,为了保持图形的拓扑结构完整,采用3点确定椭圆的方法,转换时获取椭圆上的3个点进行转换,再进行重绘。
⑤尺寸标注(DimensionElement):尺寸标注在CAD文件中很常见,主要是对元素几何图形的长度、距离、角度等几何特征进行标注,多用于规划、设计类图纸,在地形图中使用较少。一个标注元素主要由标注点、标注值、标注偏移三部分组成(如图5所示),坐标转换时不但要转换标注点的坐标,还要根据新坐标值改变标注值。在MicroStation平台,首先使用Point属性获取标注点坐标,进行坐标转换后,使用DeletePoint方法删除原坐标,再使用InsertReferencePoint方法更新坐标。标注值会重新计算并更新。
图5 尺寸标注元素示例
多点定位元素示例如图6所示:
图6 多点定位元素示例
相对于简单元素,复合元素是由两个或多个简单元素构成的复杂元素,作为一个实体存在于CAD文件中。CAD中的复合元素主要可分为复杂链、复杂多边形、单元、共享单元四类。
(1)复杂链(ComplexStringElement):由两个或多个直线、圆弧、曲线相连接而成的不闭合链。转换时通过GetSubElements方法获取子元素,再对子元素一一进行坐标转换,再使用CreateComplexStringElement1方法创建新的复杂链元素,最后复制原复杂链元素的符号化表达样式、扩展属性信息,完成坐标转换。复杂链元素示例如图7所示:
图7 复杂链元素示例
(2)复杂多边形(ComplexShapeElement):由两个或多个直线、圆弧、曲线相连接而成的闭合多边形。转换方法类似于复杂链元素的转换方法。复杂多边形元素示例如图8所示:
图8 复杂多边形元素示例
(3)单元(CellElement):单元是一组元素的集合,主要分为图形化单元和点类型单元两类。单元中的每一个子元素的图层、颜色、线型、线宽可以不一样。转换时通过GetSubElements方法获取子元素,再对子元素一一进行坐标转换,并转换单元的原点,再使用CreateCellElement1方法创建新的单元,最后复制原单元元素的符号化表达样式、扩展属性信息,完成坐标转换。单元示例如图9所示:
图9 单元示例
(4)共享单元(SharedCellElement):类似于AutoCAD中的块,和单元相比,不同之处在于共享单元在一个DGN文件中只存储一次其图形元素,其余元素类似于存储其索引位置,对任何一个共享单元图形的修改都会修改所有同类单元。该类型多为图形的填充符号。转换方法类似于单元元素的转换方法。
DGN中元素的属性主要通过XData、DatabaseLink两种方式存储,主要存储内容及转换方法分别为:
(1)XData:xData对象可以按照类似于字典的键值对的方式存储属性,每一个元素可以有多个XData属性组,每一个属性组有唯一的“键”来标识,其属性值可以存储文本、数字、点、图层等多种类型的值。转换时,可通过HasAnyXData方法判断元素是否有XData属性,如果有,则逐项复制到转换后的元素中[4]。XData对象结构如图10所示:
图10 XData结构图
(2)DatabaseLink:DatabaseLink对象主要用于存储元素与数据库的链接键值,一个DatabaseLink主要由MSLink、Entity、LinkType三部分组成。MSLink相当于数据库表的编号;Entity相当于对象在数据库中的编号;LinkType表示数据库的连接类型,有Oracle、Odbc、OleDb等类型。转换时,可通过HasAnyDatabaseLinks方法判断元素是否有DatabaseLink属性,如果有,则逐项复制到转换后的元素中。
图形表达样式主要包括图层、颜色、线型、线宽、透明度、优先级、是否隐藏、是否锁定、是否高亮以及闭合元素的是否填充、填充样式、填充颜色等属性。转换时,需要将这些属性逐项复制到转换后的元素中。
通常,由于CAD文件中没有设置坐标系,为了避免转换混乱,需要对转换情况进行记录,因此可将转换时间、转换模型记录到元素的XData属性中,便于用户查询转换情况。在记录时,对于单元、共享单元等复合类元素的子元素也添加记录属性,则当复合元素打散后亦可查看。
根据以上CAD几何图形点对点转换实现方法,本项目基于MicroStation V8i SS4(SELECTseries 4)平台,采用基于.NET框架的AddIn的开发方式,开发平台选择Visual Studio 2015,开发语言采用C#进行开发。软件主要提供按围栅框选范围转换和按文件夹批量转换两种方式。
利用所开发的转换软件,共完成了南宁市 6 500 km2各类CAD图件成果的转换。主要转换图件如表1所示:
CAD图件成果转换统计表 表1
对转换的CAD图件,采用“二级检查、一级验收”的方式进行质量检查。结果表明,本项目转换成果精度无损失,检查点位精度均在设计规定的限差范围内;图形要素不丢失、各要素齐全完整;属性项无遗漏、属性值正确;图形属性关联准确;图形要素间关拓扑关系与源数据一致;各图幅间接边完全对接,无缝隙、重叠等接边问题。
本文提出了基于MicroStation平台,利用其对DWG、DXF文件的互操作支持,在该平台二次开发点对点坐标转换软件,实现了对DGN、DWG、DXF三种主要CAD格式文件的各类图形元素的严密点对点转换,实现了转换前后其空间拓扑关系、符号化表达、扩展属性信息的完整一致性。采用本文的方法与软件,完成了南宁市 6 500 km2范围内地形图、地籍图等各类CAD图件成果的2000坐标转换,共转换各类DWG、DGN、DXF图件上千幅,成果质量优等。因此,本文所提出的利用MicroStation平台实现DGN、DWG、DXF三种格式的CAD图件的动态无损坐标转换方法具有可行性和稳定性,是一种值得推广的坐标转换方法。