ArcGis到AutoCad数据格式转换研究

(整期优先)网络出版时间:2022-05-10
/ 3


ArcGis到 AutoCad数据格式转换研究

关新芳

河北省地理信息集团有限公司 石家庄 050031

摘要:测绘产品数据格式多种多样,在实际应用过程中,我们往往需要将数据转换成我们能够应用的格式,同时还要满足数据内容的完整性。本文通过对数据转换方法的研究和实践,实现了较为合理的转换方案。

关键词:线型;符号化

一、引言:

在测绘生产过程中,数据的生产软件很多,格式也多种多样,为了满足不同部门的需求,往往需要对数据的格式进行转换。现在,我们生产的测绘数据是ArcGis的Geodatabase格式,根据要求,需要将其转换成AutoCad的DWG格式。但是从ArcGis导出的DWG格式数据没有线型、符号和填充图案,所以还需要对导出的数据进行符号化处理,得到我们需要的成果。

二、软件平台介绍

1、 AutoCAD具有良好的用户界面,通过交互菜单或命令行方式便可以进行各种操作。它的多文档设计环境,让非计算机专业人员也能很快地学会使用。在不断实践的过程中更好地掌握它的各种应用和开发技巧,从而不断提高工作效率。AutoCAD具有广泛的适应性,它可以在各种操作系统支持的微型计算机和工作站上运行。

2、ArcGIS是一个专业GIS应用的完整套件, ArcGIS是一个集成了众多高级GIS应用的软件套件,它包含了一套带有用户界面组件的Windows桌面应用。ArcGIS具有三种功能级别――ArcView,ArcEditor和ArcInfo,都可以使用各自软件包中包含的ArcGIS开发包进行客户化和扩展

3、Visual Basic具有简单易学,功能强大,软件费用支出低,见效快等特点.它提供了开发Windows应用程序最迅速,最简捷的方法,不但是专业人员得心应手的开发工具,而且易于被非专业人员掌握使用,我们在该软件平台上进行开发,完成数据的自动转换和符号化。


三、数据转换功能的设计

1、符号化系统的建立

符号化系统采用Visual Basic开发语言,在AutoCad平台上进行系统编程。

(1)、建立Visual Basic和AutoCad之间的连接

AutoCad提供了一系列的库文件,以便程序调用,通过引用和代码编写可以很容易的建立Visual Basic和AutoCad之间的连接。代码如下:

Dim acadapp As AcadApplication

Dim acaddoc As AcadDocument

Dim mospace As AcadModelSpace

Set acadapp = GetObject(, "autocad.application")

If Err Then

Err.Clear

Set acadapp = CreateObject("autocad.application")

If Err Then

MsgBox Err.Description

Exit Sub

End If

End If

acadapp.Visible = True

AppActivate acadapp.Caption

Set acaddoc = acadapp.ActiveDocument

Set mospace = acaddoc.ModelSpace

………

连接建立完成,就可以通过Visual Basic编写的程序对AutoCad发布命令,例如:绘图、图形编辑和修改等。

(2)、符号、线型、图案的制作

为了完成导出数据的符号化,需要建立一套符号、线型、图案系统,根据图形要素的代码、属性通过程序赋以相应的符号和线型。

  • 符号在AutoCad中按照1:10000图示规定的相应尺寸、颜色绘制,每一个符号作为一个DWG文件来保存,形成需要的点状符号库。

  • 线型分两种方法来绘制:

第一种利用AutoCad程序提供的方法制作较为简单的线型:

AutoCad的标准线型保存在acad.1in和acadiso.1in文件中,线型的表现是由点、划线和空格组成,主要沿水平轴循环,例如小路、檐廊等。线型的具体记录形式是正值代表划线,负值代表空格,零代表点。如下:

*BORDER,Border __ __ . __ __ . __ __ . __ __ . __ __ .

A,.5,-.25,.5,-.25,0,-.25

第二种利用程序来实现复杂的线型:

一些线型的边线比较复杂,仅仅依靠第一种方法实现起来很困难,勉强制作的线型也不符合图示规范的要求,比如:电力线、铁路等。利用程序来绘制,在线型的表现上,控制起来更容易。

例如,无滩陡岸线型就是通过程序代码插入符号,并且按照规定的要求组合起来实现的。代码如下:

………

Dim xust As AcadEntity

If Dir(App.Path & "/dwg/140.dwg") <> "" Then

Set gdGroup = acaddoc.Groups.Add("*") 定义组,目的是将符号和线组合起来

xuzb(0) = 0: xuzb(1) = 0: xuzb(2) = 0

调入符号

........

jl = 0: sz = 1: gs = 0 按照规定的线方向以及间隔配置符号

ReDim stsz(0 To gs) As AcadEntity

zb = xuobj.Coordinates

For i = 0 To UBound(zb) - 2 Step 2

jl2 = Sqr((zb(i) - zb(i + 2)) ^ 2 + (zb(i + 1) - zb(i + 3)) ^ 2)

jl = jl + jl2

If jl > jl1 Then

jl4 = jl2 - (jl - jl1)

Do Until jl < jl1

sz = sz + 2

ReDim Preserve zuob(0 To sz) As Double

ReDim Preserve stsz(0 To gs) As AcadEntity

zuob(sz - 1) = jl4 * (zb(i + 2) - zb(i)) / jl2 + zb(i)

zuob(sz) = jl4 * (zb(i + 3) - zb(i + 1)) / jl2 + zb(i + 1)

xyzb(0) = zuob(sz - 1): xyzb(1) = zuob(sz): xyzb(2) = 0

spoint(0) = zuob(sz - 3): spoint(1) = zuob(sz - 2): spoint(2) = 0

epoint(0) = zuob(sz - 1): epoint(1) = zuob(sz): epoint(2) = 0

xjd = acaddoc.Utility.AngleFromXAxis(spoint, epoint)

xjd = xjd + jd

Set dx = xust.Copy

dx.Move xuzb, xyzb

dx.Rotate xyzb, xjd

setDta dx, attr1, attr2

Set stsz(gs) = dx

gs = gs + 1

jl = jl - jl1

jl4 = jl4 + jl1

Loop

End If

Next

gdGroup.AppendItems stsz 组合符号,形成无滩陡岸线型

..........

  • 图案填充的制作

利用AutoCad本身的方法制作图案文件太过麻烦,本系统图案文件通过网上的一个填充制作小软件AHatch Pro绘制。通过这种方法建立系统所需要的图案填充文件(格式为*.pat)

(3)、对照表的制作

对照表是程序控制符号、线型以及图案的桥梁,通过对照表,让程序绘制指定的符号和线型。为了便于管理,将符号、线型、图案的对照表分开来制作,文件内容格式如下:

符号: 符号名称 符号代码 符号文字描述

112 2101031 地下河段出入口

线型、图案: 线型代码 线型文字描述

2101012 地面河流

(4)、系统的代码的编写与整合

在VB中,将所有的符号、线型以及图案的代码全部编写完成,再将这些代码整合到一起,实现程序的运行,通过反复的调试和优化,得到需要的符号化系统。

2、ArcGis数据的导出

将数据从ArcGis格式转换到AutoCad格式,具体操作如下:

打开ArcGis的一个应用组件ArcToolbox,从该工具箱中选择数据互操作工具(Data Interoperability Tools)->Quick Export工具,打开对话框。

关于输出数据的设置如下:

6279d08d25b34_html_7d54f796893e6bba.png


图2 数据输出设置

输出后的数据为AutoCad2000版本的DWG格式。

3、数据符号化

打开AutoCad,运行已经完成的符号化系统,调入从ArcGis输出的DWG数据,执行符号化命令,即可得到需要的符号化数据。

四、总结

通过转换方案的设计,实现了 ArcGis数据格式到AutoCad数据格式的自动转换,并且完成了数据的符号化,满足了实际需求。



参考文献:

[1] 张帆, 郑立楷, 王华杰. AutoCAD VBA开发精彩实例教程[M]. 北京:清华大学出版社, 2004.

[2] 楚振庭,赵健. 国土资源工作中测绘数据坐标转换研究[J]. 现代测绘,2010, 33(1):20-23.