首页 > 范文大全 > 正文

基于DwgDirect技术实现DEM批量转换为DXF

开篇:润墨网以专业的文秘视角,为您筛选了一篇基于DwgDirect技术实现DEM批量转换为DXF范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

中图分类号:TP 文献标识码:A 文章编号:1007-0745(2013)09-0376-02

摘要:在分析基于CNSDTF-DEM格式数据的基础上,提出了实现dem批量转换为dxf的具体方法。并且在.NET环境下,利用dwgdirect提供的读写DXF功能,编写批量转换工具。

关键词:DwgDirect,DEM,DXF,地球空间数据交换格式

一、引言

DEM(Digital Elevation Model)是一定范围内规则格网点的平面坐标(X,Y)及其高程(Z)的数据集,它主要是描述区域地貌形态的空间分布。本文所提及的DEM数据基于中国地球空间数据交换格式CNSDTF-DEM。由于AutoCAD不能直接读取此格式的数据,因此需要将此格式转换为AutoCAD能直接读取的DXF格式。

DwgDirect是OpenDWG是升级版,是ODA(Open Design Alliance)开发的一套能够直接读写AutoCAD(DWG/DXF)数据的类库。通过此类库能够在脱离AutoCAD平台下直接操作DWG/DXF数据。本文正是利用此功能在.NET环境下将DEM数据批量转换到DXF数据。

二、主要实现步

1.搭建开发环境。启动Visual Studio 2010,新建一个基于.Net Frame Work 3.5的项目,并添加DwgDirect引用。

2.读取DEM数据并解析。基于CNSDTF-DEM格式的数据主要有两部分组成,一是文件头,二是数据体。文件头信息分为两类:基本的且必须的信息和扩充的附加信息。数据体以格网形式从南到北从西到东的顺序存储在文本文件中。读取数据的主要思路如下

1)新建网格数据结构

Public Structure GridData

'数据标记CNSDTF-RASCNSDTF-DEM

Public mDataMark As String

'版本号

Public mVersion As Double

'坐标单位 M:米 D:经纬度

Public mUnit As String

'方向角

Public mAlpha As Double

'压缩方法

Public mCompress As Integer

Public mX0 As Double

Public mY0 As Double

Public mDX As Double

Public mDY As Double

Public mRow As Integer

Public mCol As Integer

Public mValueType As String

'高程放大倍率

Public mHZoom As Integer

'坐标系 G:测量坐标系 M:数学坐标系

Public oCoordinate As String

'投影类型

Public oProjection As String

'参考椭球

Public oSpheroid As String

'投影参数

Public oParameters As String

'格网最小值

Public oMinV As Integer

'格网最大值

Public oMaxV As Integer

'获取的数组点

Public DEMPoints() As Point3D

'读取DEM文件是否成功

Public ReadSuccessful As Boolean

End Structure

2)从文件中读取数据并解析。先解析文件头部分,如果文件头解析的结果不是基于CNSDTF-DEM格式的数据,则放弃解析。

Public Function GetDEMData(ByVal FilePath As String) As GridData

Dim objData As New GridData

Dim AllData() As String =File.ReadAllLines(FilePath, Encoding.Default)

......

Return objData

End Function

3.将读取的数据写入DXF文件。

'初始化DWG环境

Ds = New DWGdirect.Runtime.Services

HostApplicationServices.Current = New HostAppServ(Ds)

For I As Integer = 0 To ListDEM.Items.Count - 1

Dim objfile As New FileInfo(ListDEM.Items(I).ToString)

objdem = New DEM(objfile.FullName)

objdem.InvalidElevationString = PublicValue.InvalidElevationString

......

Dim pts() As MyMFC.Geometry.Point3D = objdata.DEMPoints

Dim DB As New Database

Using Trans As Transaction = DB.TransactionManager.StartTransaction

Dim BT As BlockTable=Trans.GetObject(DB.BlockTableId, OpenMode.ForRead)

Dim BTR As BlockTableRecord=

Trans.GetObject(BT(BlockTableRecord.ModelSpace), OpenMode.ForWrite)

For J As Integer = 0 To pts.Length - 1

If pts(J).IsInvalid = False Then

Continue For

End If

Dim pt As New DBPoint(New Point3d(pts(J).X, pts(J).Y, pts(J).Z))

BTR.AppendEntity(pt)

Trans.AddNewlyCreatedDBObject(pt, True)

Next

mit()

End Using

......

DB.DxfOut(FullName, 16, cadver)

DB.Dispose()

Next

由于篇幅限制,不能将所有的代码写出。笔者已经设计了一个程序,可以很方便地将DEM数据批量转为DXF数据。

三、运行实例

1、先行安装笔者编写的软件DemToDxfSetUp

2、启动DEM转DXF程序 ,程序启动后的界面如下:

3、将需要转换的DEM拖入DEM文件转换列表中,或者通过“添加”按钮进行添加;

注意:可批量添加处理DEM数据。

4、设置转出DXF文件版本,如果不设置,则采用默认设置。

5、点击“开始转换”,程序就会自动地将需要转换的DEM文件生成DXF文件。

生成的转换日至,转换结果会显示转换后路径,方便用户查询。

转出后对应形成.dxf,文件。

6、用CAD打开转换后的DXF文件,可方便计算面积、做等高线等工作。

四、结束语

使用DwgDirect可以让开发人员节省大量的精力去研究DXF文件格式,从而提高开发的效率。此外还可以让用户完全脱离AutoCAD平台,不需要通过COM方式操作AutoCAD,从而加快数据转换的速度。

参考文献:

[1]GB/T 17798-1999 地球空间数据交换格式。

[2]Nick Randolph,et al.Professional Visual Studio 2010[M].Wiley Publishing,Inc.