河北省地理信息集团有限公司 石家庄 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工具,打开对话框。
关于输出数据的设置如下:
图2 数据输出设置
输出后的数据为AutoCad2000版本的DWG格式。
3、数据符号化
打开AutoCad,运行已经完成的符号化系统,调入从ArcGis输出的DWG数据,执行符号化命令,即可得到需要的符号化数据。
四、总结
通过转换方案的设计,实现了 ArcGis数据格式到AutoCad数据格式的自动转换,并且完成了数据的符号化,满足了实际需求。
参考文献:
[1] 张帆, 郑立楷, 王华杰. AutoCAD VBA开发精彩实例教程[M]. 北京:清华大学出版社, 2004.
[2] 楚振庭,赵健. 国土资源工作中测绘数据坐标转换研究[J]. 现代测绘,2010, 33(1):20-23.