1、第 39 卷第 2 期2023 年 6 月测 绘 标 准 化Standardization of Surveying and MappingVol 39No 2Jun 2023收稿日期:2022 08 23第一作者简介:李蔚林,工程师,现主要从事测绘数据处理及土地管理方面的工作。CNSDTF DEM 转 DWG 工具的设计与实现李蔚林1郭海泉2(1 射阳县自然资源和规划局江苏射阳224300;2 江苏省地质测绘院江苏南京211102)摘要:针对 AutoCAD 软件不支持读取 CNSDTF DEM 格式文件的问题,本文分析 CNSDTF DEM和 DWG 格式文件的结构、内容和功能,研究将 C
2、NSDTF DEM 格式的 DEM 数据转换为 DWG 格式的方法,并利用 AutoCAD 提供的 Object AX NET 进行二次开发,在 Visual Studio 2013 环境下设计开发将 CNSDTF DEM 格式的 DEM 数据转换为 DWG 格式的程序,实现将某项目 CNSDTF 格式的DEM 数据转为 DWG 格式,推进 DEM 数据的广泛应用。关键词:CNSDTF DEM;ObjectAX NET;AutoCAD;DWG中图分类号:P209DOI:10 20007/j cnki 61 1275/P 2023 02 18Design and implementation o
3、f CNSDTF-DEM to DWG toolLI Weilin1,GUO Haiquan2(1 Sheyang Natural esources and Planning Bureau,Sheyang,Jiangsu 224300,China;2 Jiangsu Geologic Surveying and Mapping Institute,Nanjing,Jiangsu 211102,China)Abstract:Aiming at the problem that AutoCAD software does not support reading CNSDTF-DEM formatf
4、iles,this paper analyzes the structure,content and function of CNSDTF-DEM and DWG format files,studies the method of converting DEM data in CNSDTF-DEM format to DWG format,utilizes ObjectAX NET provided by AutoCAD for secondary development,and designs a program for converting DEMdata in CNSDTF-DEM f
5、ormat into DWG format in the environment of Visual Studio 2013 This tool reali-zes the conversion of DEM data in CNSDTF format into DWG format for a project,promoting the wide-spread application of DEM dataKeywords:CNSDTF-DEM;ObjectAX NET;AutoCAD;DWGDEM 是对地球表面地形地貌的一种数字表达,能真实反映地球表面形态,是重要的基础地理信息数据。DEM
6、 数据常被用于生成等高线图、坡度剖面图,用于数字正射影像图数据制作,并广泛用于不同地形的比较和统计分析。DEM 数据已经在测绘、地质等多个领域得到广泛地应用1 2。DEM 有多种表达方式,主要包括规则矩阵网格、不规则三角网及矩阵网格与三角网混合形式3。CNSDTF DEM 格式的 DEM 被定义于 GB/T 177982007地理空间数据交换格式 中,其数据表达方式是规则矩阵网格形式。CNSDTF DEM 采用纯文本格式保存数据,具有良好的可读性,但常规的 CAD 软件不支持此类文件的正常读写,需要将 CNSDTF DEM 格式数据转换为 DWG 格式。AutoCAD 是 Autodesk 公
7、司开发的自动计算机辅助设计软件,在测绘行业中有着广泛的应用。同时,AutoCAD 不仅是一个绘图平台,还是一个二次开发平台,向用户提供了丰富的开发接口用于扩展其功能,主 要 接 口 包 括:Auto Lisp(Visual Lisp)、ActiveX、VBA、ObjectAX、ObjectAX NET 等4。第 2 期李蔚林,等:CNSDTF DEM 转 DWG 工具的设计与实现DWG 是 AutoCAD 默认的数据保存格式。本文拟通过 AutoCAD 提供的 ObjectAX NET 二次开发接口,设计开发一个格式转换工具,实现将 CNSDTF DEM 格式的 DEM 数据转换为 DWG 格
8、式。1CNSDTF DEM 格式数据结构CNSDTF 格式的 DEM 数据采用纯文本方式保存,按照 GB2312信息交换用汉字编码字符集 的规定进行编码。CNSDTF DEM 格式数据包括文件头和数据体两部分。文件头用于描述数据的基本特征,包括基本项和扩充项。基本项是基本必须的信息,扩充项是附加信息。数据体用于保存高程值,数据平面位置信息需要基于文件头信息及高程值的索引号计算得到5。1 1文件头文件头的基本项由网格数据交换格式标志、版本号等 12 个必选项构成。文件头的扩充项由坐标系类型、坐标单位、参考椭球等 11 个可选项构成,见表 1。基本项是描述 DEM 的基础,每一项必须写在DEM 文
9、件中,扩充项可以根据基本项的需要来决定是否出现在文件头中。表 1文件头的基本项和扩充项的名称及说明Tab 1The names and descriptions of the basic and extension items in the file header文件头的基本项文件头的扩充项DataMark 为网格数据交换格式标志Coordiante System Type 为坐标系类型Version 为版本号XY Uint 为平面坐标单位Alpha 为方向角Z Unit 为高程坐标单位Compress 为压缩方法Spheroid 为参考椭球X0为左上角 X 坐标Prime Meridian
10、为本初子午线Y0为左上角 Y 坐标Projection 为投影类型DX为 X 方向的间距Parameters 为投影参数DY为 Y 方向的间距Vertical Datum 为高程基准ow 为行数值Temporal eference Systerm 为时间参考系Col 为列数值Min V 为数据集最小坐标值Value Type 为网格值的类型Max V 为数据集最大坐标值Hzoom 为高程放大倍率1 2数据体CNSDTF DEM 数据体保存了每个高程点的平面位置及高程值。为实现压缩文件的目的,高程点的平面位置及高程信息采用游程编码的方式保存。2转换工具设计2 1数据体转换设计由于 CNSDTF
11、DEM 格式数据采用游程编码的方式保存,因此数据体无法通过读取方式直接获取,而需要通过文件头中的左上角坐标项(X0,Y0),高程点间距离(DX,DY),行、列数值(ow,Col)及高程点出现的位置计算得到。其次,数据体中的高程值是经过放大后的值,实际高程值需要用此高程值除以高程放大倍率(参数 Hzoom)得到。文件头虽然提供了参数Alpha 表示 DEM 模型的旋转角度,但在实际数据中,此参数的值都为 0,所以不用考虑图形旋转的问题。每个点的平面位置和高程坐标计算方法为X=X0 DX(i/ow)(1)Y=Y0+DY Mod(i,Col)(2)H=Hi/Hzoom(3)式中:X、Y、H 分别为高
12、程点的 X 坐标、Y 坐标和高程值;X0、Y0分别为 DEM 数据左上角的 X 坐标、Y 坐标;ow、Col 分别为数据体的行数与列数;DX、DY分别为数据体点间的行距及列距;Hzoom 为高程放大倍率;Hi为第 i 个点位处的高程值;Mod 表示取余计算。读取 DEM 文件后采用上述方法将 CNSDTF DEM 格式数据中以文本信息保存的高程点转为结98测 绘 标 准 化第 39 卷构化的高程点数组,并对高程点数组做进一步处理,以便将高程点数组写入 DWG 文件中。2 2点结构体设计从 DEM 文件读取的多个高程点数据需要以合适的形式暂存到计算机内存中,以便后续调用。为将以文本信息保存的高程
13、点转为结构化的高程点数组,需要定义一个新的高程点对象。定义高程点对象常见的方式有两种:类方式(Class)、结构体方式(Structure)。因结构体方式有在栈上分配内存的特点,具有更高的性能,适合对大量点数据处理的场景。因此,笔者选择使用结构体方式定义高程点对象,详细结构如下:Public Structure HPointPublicX As DoubleX 坐标PublicY As DoubleY 坐标PublicH As Double高程End Structure2 3程序框架设计ObjectAX NET 是 AutoCAD 提供的二次开发环境之一,是在 Microsoft NET Fr
14、amework 编程框架下使用 P/Invoke 技术对 ObjectAX 提供的 C+函数进 行 重 新 封 装 后 得 到 的 新 开 发 环 境。基 于ObjectAX NET 编程技术的特点,转换工具设计为3 个主要功能模块:DEM 文件解析模块、点对象转换模块、数据库操作模块6 7。1)DEM 文件解析模块的功能是读取CNSDTF DEM 文件的文件头与数据体,并将文本形式的点数据解析为自定义的点结构体方式。2)点对象转换模块的功能是将自定义的高程点结构体对象转换为 ObjectAX NET 对象模型中的点(DBPoint)对象,并设置图层、颜色、点样式等属性信息。3)数据库操作模块
15、的功能是建立 DWG 数据库(Database)对象,并将点(DBPoint)对象写入 DWG数据库的模型空间(ModelSpace)对象中,最后保存为 DWG 文件。2 4转换流程将 CNSDTF 格式的 DEM 文件转为 DWG 格式数据,本质就是读取 CNSDTF DEM 文件并解析为点结构体,再通过 ObjectAX NET 提供的二次开发接口将点结构体转换为点对象,写入 DWG 数据库中的过程。从转换方式上来讲,主要有以下 3 种方式:单个或多个 CNSDTF DEM 文件转到当前 DWG中;单个或多个 CNSDTF DEM 文件转到新的 DWG中;多个 CNSDTF DEM 文件转
16、到多个 DWG 中。文件格式转换流程如图 1 所示。图 1转换流程Fig 1Conversion process3程序实现CNSDTF DEM 转 DWG 工具的开发基于ObjectAX NET(AutoCAD 2020 版)框架,集成开发环境(Integrated Development Environment,IDE)选 择Visual Studio 2013,使用 Visual Basic NET 作为编程语言实现以上功能。3 1开发环境搭建在 Visual Studio 2013 中创建一个项目,语言选择 Visual Basic NET,类型选择类库。项目创建完后,引入 AutoCAD 2020 安装目录中的 acdbmgd dll与 acmgd dll,并将“复制到本地”属性设为 False,“目标 CPU”属性设为 AnyCPU。3 2创建转换命令在 ObjectAX NET 开发环境中,需要对类中一个无参数方法使用 Command Method Attribute 标签进行标识。程序加载后,就可以在 AutoCAD 命令行中输入自定义的命令对方法进行调用。3 3关键技术