免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 3206|回复: 3
收起左侧

[资料] 基于MAPGIS构想的CAD VBA绘图开发及转换技术

[复制链接]

1万

主题

1039

铜板

1098

好友

技术员

积分
81944
QQ
发表于 2011-3-7 07:50 | 显示全部楼层 |阅读模式
基于mapgis构想的CAD VBA绘图开发及转换技术
张中晓
(广西第二测绘院 广西柳州 545006)
【摘 要】 本文介绍了从CAD到MAPGIS是如何转换的,克服转换中的不足之处,对CAD进行了二次开发,使之能够高效、准确采集地图数据,又能轻松的转换到MAPGIS。
【关键词】 AUTOCAD VBA MAPGIS 文件转换 属性连接 拓扑检查

  0 引言
  今年全国进行了第二次土地调查工作,地理信息软件得到了推广和应用。但我们的大部分作业人员以前很少接触MAPGIS软件,都是用CAD软件制图。MAPGIS软件对地图数据的后期处理具有很强大的功能。而进行调查数据采集功能不是很强大。如对点、线的捕捉移动,对图的放大、缩小、移动等操作没有CAD便捷。如何利用我们常用的CAD软件进行数据采集及初步处理,再转换到MAPGIS进行后期数据处理呢?以下作者对这个过程进行介绍。
  1 AUTOCAD与MAPGIS之间的转换方法
  首先编写DXF文件转入MAPGIS时的子图、线型、颜色、图层对照表,然后CAD软件输出DXF文件,由MAPGIS中的文件转换功能读取,再保存为点文件和线文件。
  在MAPGIS输入编辑中添加后,查看点的属性有五个字段(ID、高程值、DXF层名、地物编码、DXF层ID),线的属性有六个字段(ID、长度、高程值、厚度、DXF层名、DXF层ID)。
  这些点、线属性字段与我们所要求的字段不相符,而且,我们可以看见转换的点文件中的字体、大小等与在CAD中不同,不能满足需求。
  怎样才能使转换后的文件达到我们预想的要求呢?像在MAPGIS中采集一样,可以有很多属性,把我们需求的字段值直接录入。这就要求对CAD进行二次开发,把我们画的每一条线都进行编号,并进行外部数据库连接,输入需要的属性字段,这样转换到MAPGIS后再进行一次属性连接,再删除不需要的字段就可以了。
  2 基于MAPGIS构想的CAD VBA绘图开发
  2.1 MAPGIS的数据采集方法
  首先,创建工程图例,把我们需要的点、线参数及一些固定的属性保存在图例中。然后创建点、线文件,编辑好我们需要的属性结构。采集点、线时,首先选择相应的点、线存储文件,再选择工程图例中的对应项,进行采集。这样采集出来的点、线就有了我们需要的参数和属性结构。
  2.2 CAD VBA绘图开发
  2.2.1 技术依据
  ● 《第二次全国土地调查技术规程》(TD/T 1014—2007)(以下简称《规程》)
  ● 《土地利用现状分类》(GB/T21010—2007)
  ● 《第二次全国土地调查数据库标准》
  2.2.2 开发的技术路线
  开发工具:利用AUTOCAD自带的VBA开发工具。
  开发目的:在CAD中采集数据后能够顺利的转换到MAPGIS,并且有按照技术要求的各种属性字段。
  开发流程及方法:从AUTOCAD与MAPGIS之间的转换方法得知,转换后点、线的属性字段是固定的,因此,若要进行属性连接,就必须从这些字段入手,使数据库中的属性能够对应到每一个点和每一条线上。
  经研究发现,点文件从DXF转换得到后,文字的字体、字大等都变化了,不能符合要求。只有采用MAPGIS明码格式文件的方式输入,才能达到预想的要求。只要在CAD中对点(包含文字、参照块)进行分类,然后,统一转换到数据库中,直接从数据库中提取生成MAPGIS明码格式文件,这时,生成的明码格式文件序列就可以与数据库中的序列一一对应,这样属性连接就可以做到准确无误,属性连接后的点文件就可以符合设计要求。
  线文件可以直接从DXF转换得到,转换后的字段中ID、长度、DXF层ID是不能改变的,因此,只能在高程值、厚度、DXF层名这三个项目入手,来进行属性连接。
  在CAD作图中,线的高程值表示线条所经过位置的高程,厚度是在三维视图中Z方向值,在二维视图中厚度是没有作用的,因此,可以利用厚度值作为线的编号。把画的线进行唯一编号,然后在数据库中对应属性。这样,在后续的转换过程中就以“厚度”作为连接字段进行连接,这样属性就一一对应了。把线状地物的宽度值放到高程值中,这样在CAD中注记线状地物宽度时,就很便捷。选择线后,再选取要注记的位置,就能自动注记线状地物的宽度,很方便。DXF层名可以对线进行分类,如:构面线、不构面线、界线、内图框、外图框等。有利于对线文件进行分层归类。
  2.2.3 二次开发的实现
  设计一个实用高效的界面:对要采集的地图信息如构面线(道路、水系、地类界等)、不构面线(道路、水系等)、文字注记、对图框的处理等分别进行程序开发,制作的图例命令。把这些命令分类集中在一个工具箱中,为快速选取不同工具提供便捷。
  实现画二维多段线并编号的方法:利用VBA函数GetPoint在CAD中获取点的坐标,再利用函数AddPolyline在CAD中实现画线;再赋给所画的线一个厚度值即编号。
  CAD VBA调用外部数据库的方法:首先,建立一个空的数据库如“图幅号.MDB”,再建立两个表“dian”、“xian”分别存放点属性和线属性。根据《土地调查数据库标准》,对各种点、线的在采集阶段的必要属性进行集成,分别放进这两个表中。
  3 CAD到MAPGIS转换
  3.1 线文件的转换
  线文件转换时需要线型对照表和颜色对照表,来进行CAD和MAPGIS之间线型和颜色的转换。首先来了解一下对照表。在 MAPGIS6.7安装完成后,在..\MAPGIS61\SLIB目录下有四个文件:ARC_MAP.PNT(子图对照表),ARC_MAP.LIN(线型对照表)CAD_MAP.TAB(图层对照表),CAD_MAP.CLR(颜色对照表)。
  3.1.1 线型对照表ARC_MAP.LIN的制作
  在ARC_MAP.LIN文件中,前面一列代表AUTOCAD里的线型名,后面一列代表MAPGIS系统中线型代码。在这里需要注意:如果某种线的线型是采用随层方式,那么这种线型是不能按照对照表转入到MAPGIS中的。后一列中线型代码并不是线型号,而是一个编码。在数字测图系统里能看见,例如三角点编码为1110,水准点编码为1210,这些编码和线参数都可以进行修改,结果保存在Suvcode.cfg文件中)。
  3.1.2 颜色对照表CAD_MAP.CLR的制作
  在CAD_MAP.CLR文件中,前面一列代表MAPGIS系统的颜色号,后面一列代表AUTOCAD里的颜色号。
  3.2 点文件的转换
  点文件的转换需要把点坐标及属性制作成MAPGIS明码文件。明码文件格式如下:
  WMAP9022 (固定的表头格式)
  1000(点数)
  601312.005,2642941.469,1,0,"013G", 2, 2, 0, 0, 3, 0, 0, 0, 471, 0, 0
  x1y1 ID type(0字符串、1子图、2圆、3弧、4图象、5文本)
  当type=0时,点信息为:"字符串",字符高度,字符宽度,字符间隔,字符串角度,中文字体,西文字体,字形,水平(0)或垂直排列(1), 颜色,图层,透明输出。
  4 属性连接方法
  在MAPGIS的库管理中打开属性库管理,首先导入前面建立的“图幅号.MDB”,把库中的两个表“dian”、“xian”分别导出并保存为MAPGIS表文件“dian.WB”、“xian.WB”。
  再分别进行点、线属性连接,点的连接关键字段为“ID”项,线的连接关键字段为“厚度”项,在这里要特别注意的连接关键字段不能选错,若选错将会导致属性连接错乱。
  5 对连接好属性的点、线文件进行细分
  按照《土地调查数据库标准》,建立具有标准数据结构的点文件(如LABEL点、ZTDYS子图点要素、LXDW零星地物等)和线文件(如构面线、不构面线、行政区界线,内图框、外图框等)。然后在点文件中根据“类别”属性分别复制出相应的点放到对应的点标准文件中。线文件根据“DXF层名”属性分别复制出相应的线放到对应的线标准文件中。至此,就完成了从CAD到MAPGIS的整个过程。
  6 在实际工作中的应用
  在我院开展的柳江县和合山市第二次土地调查中采用了这种方法进行作业,虽然数据经过转换,但对在后期MAPGIS入库上没有任何影响,属性、面积等都完全正确。
  由于大家对CAD软件的操作比较熟练,因此提高了地图数据采集的速度。由于对CAD的二次开发不是很深入,相对简单,开发过程也不需要很多时间及精力。
  7 结束语
  若在CAD中采集完数据后,利用Autodesk Map 3D 2005进行拓扑检查,检查后再转换为MAPGIS文件,这样就可以省去在MAPGIS中的拓扑检查,并且可以克服在MAPGIS中不能检查出一个图斑面中有多个图斑号的缺陷。
  结合两种软件各自的强项,又不用做很多的二次开发,提高了工作效率,是一种事半功倍工作方法。在CAD二次开发的过程中,由于作者水平有限,还有很多不足之处,希望各位专家斧正。

【参考文献】[1] 武汉中地公司编写的《MAPGIS操作手册》
[2] 张帆、郑立楷、王华杰.AutoCAD VBA开发精彩实例教程.清华大学出版社,2004
[3] Microsoft SQL Server 7.0 使用详解.Rob Kraft.机械工业出版社

59

主题

4274

铜板

152

好友

钻石会员

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
6470
发表于 2013-9-7 11:06 | 显示全部楼层
           学习一下,谢谢楼主分享!

评分

参与人数 1铜板 +1 收起 理由
admin + 1 亲,你好快哦~~~

查看全部评分

回复 支持 反对

使用道具 举报

26

主题

6万

铜板

22

好友

传奇会员

Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30

积分
39888

灌水勋章宣传勋章

发表于 2013-10-24 20:41 | 显示全部楼层
路过进来看看
回复 支持 反对

使用道具 举报

发表于 2025-4-23 13:05 | 显示全部楼层
继续学习 继续进步
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表