cad转shp 奥维_CAD转化为Shp

本文介绍了基于ArcMap内置VBA的一种方法,用于将CAD(如DWG)数据按照编码规则分类转换为Shape文件。通过自定义转换文件,该程序能够根据用户需求提取不同类型的地物数据,适用于满足特定GIS数据格式要求,如辽宁省城镇地籍数据建库标准。
摘要由CSDN通过智能技术生成

基于VBA的SCS数据分类转换为Shape文件

作者:ffff  来源:博客园  发布时间:2008-08-25 13:31  阅读:170 次  原文链接   [收藏]

基于VBA 的SCS 数据分类转换为Shape 文件

高宏兵,李凤斌,王 进,刘 域

(大连九成测绘企业集团,辽宁大连116400)

摘 要 数据是GIS 发展及各类专题地理信息系统建立的基础,而目前提供基础数据的来源,主要是各部门由

AutoCAD 二次开发软件编辑的DWG数据,并有编码规则,用以区分不同的地物,所以有必要研究DWG数据的各

种转换方法。在学习其他的数据转换方法中,本文提出一种基于ArcMap 内置VBA ,利用自定义转换文件,对

DWG进行分类转换的方法,并在大连某地区的地籍测量的数据转换中得到较好的应用。

关键词 编码 GIS  DWG VBA  Geodatabase  数据转换

中图分类号: P208    文献标识码:B    文章编号:1672 - 4097 (2007) 04 - 0037 - 03

本文是以大连某地区开思绘制的DWG 数据

为例,为满足辽宁省城镇地籍数据建库标准,将其

分类转为Shape 数据格式为例,分析DWG、Shape

数据格式,介绍目前的转换方法,根据笔者工作,

谈谈利用ArcMap 内置VBA ,将DWG数据分类转

换为Shape 数据的原理和转换流程,并赋有关键

代码。

1  一般的数据转换方法

111  Arc Toolbox 转换方法

ESRI 的Arc Toolbox 软件,提供用户强大的地

理信息处理功能,为不同类型的任务提供解决的途

径。主要工具有:数据管理工具、分析工具、转换工

具和定制工具(My Tool s) 。在Arc Toolbox 中,先

将DWG 转为Geodatabase 数据格式, 选择“Con2

version Tools (转换工具) - > Import to Geodata2

base - > CAD to Geodatabase”;再把Geodatabase

转为Shape 格式,选择“Conversion Tool s (转换工

具) - > Import to Shapefile - > Geodatabase to

Shapefile”。这种转换只是把DWG 数据简单的转

为:点、线、面,不能实现分类提取的目的,达不到用

户需要的结果。

112  利用其他软件转换

目前许多的GIS 软件也可以转换数据,例如

SuperMap Deskpro 。还有专门对数据进行转换的

FME 软件,它可以实现100 多种GIS 及CAD 空

间数据格式, 如DWG、DXF 、DGN 、Shape File 、

ArcSDE 等的相互转换。但是对于专业的数据处

理软件,价格一般比较昂贵,要定制复杂的数据

转换任务,需要使用人员参加培训学习,这些对

于工程的投入大量资金, 所以这种转换也不

可取。

2  利用ArcMap 内置VBA 编写分类转换

程序

下面说明如何利用VBA 程序,将广州开思软

件编辑生成的DWG 格式数据分类转为Shape

格式。

211  程序设计思想

21111  了解开思编码体系

开思是采用对地物分类编码的规则,先将地

物按层划分,主要包括10 类(见表1) ,其它层还

有:Bound(框架线) 、Axes (轴线) 、Value (骨架线)

等。再将各层下不同地物进行分类编码,编码统

一用7 位数字描述,结构为:主编码( 4 位+ 1 位)

+ 附编码(2 位) ,前四位是按《国标》要求,后面是

细分类的码, 7 位编码存储在Thickness 属性中。

对于以块表示的地物,采用块名的不同进行7 位

数字编码。

21112  建立转换文件

根据开思软件的编码体系,建立DWG 数据与

Shape 的转换文件( ZHWJ . t xt ) 。格式为:类型,属

性字段,属性值,Shape 文件名。如图1 ,文件说明:

①将点数据中Text 属性值为GC113 和GC200 转

到CL KZD. shp (测量控制点) ②将线数据中Thick2

ness 属性值为3231000 和3232000 转到XZDW.

shp (线状地物) ③将面数据中Thickness 属性值为

2110100 和2110200 转到MZFW. shp (面状房屋)

④将注记点数据中Layer 属性值为002 转到TK.

shp (图廓注记) ⑤将注记点数据中Layer 属性值为

ZJ 转到ZZJ . shp (注记) 。

212  程序流程及代码说明

21211  程序流程

启动ArcMap ,运行宏,读入DWG 文件,根据

转换文件构造选择条件,从DWG 数据中提取地物

转换到指定的Shape 文件中,详细流程(见图1) 。

图1  程序流程

31211  程序主要代码说明

程序主要有三部分组成:读入DWG文件,读入

转换文件,根据转换文件分类选取并保持到Shape

文件。受篇幅限制,下面给出部分主要代码。

(1) 读入DWG文件。

Set pWorkspace = pCadWKSFact . OpenFromFile

(DWG- Path , 0) ‘/ 设置DWG文件路径/

Set p FeatureDataset = pWorkspace. OpenFeatureDataset

(DWG- name) ‘/ 打开DWG特征数据/

Set p FeatureClassContainer = p FeatureDataset

For Count = 0 To p FeatureClassContainer. ClassCount

—1‘/ 分类特征数据/

⋯‘/ 代码略,读入DWG 数据,生成点D、点Z、线

X、面M FeatureLayer/

Next Count

pMxDoc. UpdateContent s ’/ 刷新显示/

(2) 读入转换文件。

Open " ZHWJ . TXT" For Input As # 1‘/ 打开转换

文件/

Do While Not EOF (1) ‘/ 循环读取转换文件读到数

组ZH 中/

Input # 1 , ZH (Number , 1) , ZH (Number , 2) ,

ZH(Number , 3) , ZH(Number , 4)

Number = Number + 1‘/ 循环到数组的下一行/

Loop

Close # 1‘/ 关闭转换文件/

(3) 根据转换文件分类选取,并存储为Shape

文件,并按辽宁省城镇地籍数据建库标准添加属性

字段。

Set pMxDoc = Application. Document‘/ 取得焦点Map

对象/

Set pMap = pMxDoc. FocusMap‘/ 设置当前活动视图/

‘/ 创建一个新的空间书签对象,并设置它定位到焦点地

图的当前可视范围/

Set pActiveView = pMap

For I = 1 To Number —1‘/ 按行循环存放转化文件的

数组/

Select Case ZH( I , 1) ‘/ 根据数组第一列/

Case“Z”‘/ 如果ZH( I , 1) = ”Z”,为注记点层/

Set p FeatureLayer = pMap . Layer (0)

Set p FeatureSelection = p FeatureLayer‘/ 指定查

询的图层为注记点层/

Case“M”‘/ 如果ZH( I , 1) = ”M”, 查询的图层为

面层(代码略) /

Case“X”‘/ 如果ZH( I , 1) = ”X”, 查询的图层为

线层(代码略) /

Case“D”‘/ 如果ZH ( I , 1) = ”D”, 查询的图层为

点层(代码略) /

End Select‘/ 语句结束

Set pQueryFilter = New QueryFilter‘/ 查询过滤器/

pQueryFilter. WhereClause = " " + ZH( I ,2) + " = " + ZH

( I ,3) + " "‘/ 创建查询过滤器/

‘/ 以下Shape 文件存在,不存在创建,并添加地籍需要

的字段,插入选择结果/

If Check - for - shapefile ( Path , ZH( I ,4) ) = False Then

‘/ 自己定义函数,按指定路径创建Shape 文件,添

加地籍需要的字段/

Fun - Create - AddField ( Path)

End If

Set pNewFeatureClass = p TargetWorkspace. OpenFea2

tureClass (ZH( I ,4) ) ‘/ 打开shape/

Set pCursor = p FeatureClass. Search ( pQueryFilter ,

False) ‘/ 执行选择,获取选择指针/

Set p Feature = pCursor. Next Feature‘/ 游标指针指向

第一个位置的上面/

Do Until ( (p Feature Is Nothing) Or (bAbort) )‘/ 选择

不为空,根据指针遍历要素/

Set p Geom = p Feature. ShapeCopy

Set pBuffer. Shape = p Geom‘/ 获取要素的空间

范围/

For i = 0 To p Feature. Fields. FieldCount —1‘/ 返

回所有字段的数目/

‘/ 代码略,循环选择要素的属性及其值/

Next

p Insert . Insert Feature pBuffer ‘/ 插入到shape

文件/

Set p Feature = pCursor. Next Feature‘/ 游标指针

移动到下个位置/

Loop‘/ 返回到Do 语句/

Next‘/ 移动到数组下一行位置/

213  程序运行结果

转换文件是根据辽宁省城镇地籍数据建库

分类标准编写的,利用转换程序对图形进行分类

转换,并利用程序添加了属性字段,经验证达到

38 现 代 测 绘     第30 卷

了辽宁省城镇地籍数据建库标准。

3  结 论

这种转换方法,利用ArcMap 内置的VBA 程

序,对DWG 数据根据转换文件,直接进行分类转

换,用户可以按需要,按图层(Layer) 、颜色(color) 、

线形(Linetype) 、厚度( Thickness) 、块名( Text ) 等

分类转换,也可以要求提取部分感兴趣的数据,用

户不必了解DWG 数据的存储格式,只需编辑转换

文件,程序就可以根据转换文件,提取不同的数据

并转为Shape 格式。本程序已经过实际的验证,结

果较好。因此,对于DWG 转为Shape 数据有一定

的意义。

参考文献

1  薛伟. MapObject 地理信息系统程序设计[M] . 北京:国

防工业出版社,2004

2  田鹏波,刘清. AutoCAD 到Map Info 的地形图转换[J ] .

城市勘测, 2003 (1) : 32 - 34

3  刘光,刘小东. 地理信息系统二次开发教程- VB. net 和

Mapobject 实现[M] . 北京:清华大学出版社,2004

4  王钰. 用VBA 开发AutoCAD 应用程序[M] . 北京:人

民邮电出版社,1999 : 97 - 145

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
http://bbs.esrichina-bj.cn/ESRI/thread-26364-1-1.html 一个月以前在CASS下面使用VBA写程序,目的就是要把CASS下的图入ARCGIS中,因为我们这次是二调的项目,做图是在CASS下做的,入库要进ARCGIS,所以一直在寻找一种好的方法!……你还在为DWGSHP而烦恼吗?我已经解决了,愿与大家分享。我使用了两种方法,采用了后一种。 第一种:使用ACCO(在附件中),此方法的简介也附有文本说明,主要实现的功能有:A(Txt_Apart:实现注记分离,例如“混2”把它分为“混”、“2”);C(CodeByText:根据注记内容来反赋线的属性,如:线对象里有“混”、“2”两个字,那么我就把“141161”赋给代码,把“2”赋给层数);C(CloseByCode:把需要闭合的线全部闭合);O(最后一步拉,OutPut,导出为DBF文件)。此方法适用于没有CASS7.1版本的,对不起啊,因为我一开始接触就用的是CASS7.1,且是正版,因为CASS7.1版本中有检查入库这个菜单,可以直接实现DWGSHP,如果你的CASS软件不能实现此功能,相信这种方法将帮助到你。需要一个辅助的TxtToDbf.mdb数据库,也在附件中,此方法一定要先看说明。 第二种:使用ACCS,ACC与第一种方法相同,S(SetXdata:因为我既然能把扩展属性导出DBF表,那么我就能够通过SetXdata方法把正确的属性赋值给相关实体)。 所有操作以JMD层为例,只要稍做修改可适用于其他层和对象。 先添加FWJG、FWCS两个字段,然后通过ACCS自动把正确的值赋给线实体,然后导出为SHP
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值