基于AutoCAD实现数字化地形图的动态管理

2014-06-26 07:39姚小荣
城市勘测 2014年1期
关键词:图库图幅程序

姚小荣

(漳州市测绘设计研究院,福建 漳州 363000)

1 前 言

作为城市测绘单位,不仅担负着整个城市地理数据的采集工作,同时还要为城市的规划部门、建设单位等提供快捷、准确的地理信息数据。面对整个城市如此庞大的地理数据,作为数据管理者不仅要负责采集数据的整合与更新,同时还要负责数据的分发,以供其他生产部门使用。若采用传统的大图块拼接调用图形的方式,不仅因为数据量大会造成系统运行速度慢,影响工作效率,而且会因为数据版本问题给数据管理者的工作带来很大烦恼。而对于目前先进的GIS 基础空间数据管理技术,虽然它可以实现基础空间数据的快速查询、统计、分析、数据管理等功能,但是,由于GIS软件和AutoCAD 软件对于图形几何类型的表达方式不同,使得目前无法将GIS 数据100%正确导出CAD数据。这样对于以CAD 数据生产为主的测绘单位来说,使用GIS 技术管理数字化地形图数据也会给工作带来很大不便。

为此,笔者通过VBA 技术对AutoCAD 进行了二次开发,增加了“图库管理”功能。通过AutoCAD 直接对分幅地形图进行管理,解决了大图块拼接调用图形速度慢、工作效率低的不足。同时,也避免了CAD 数据到GIS 数据之间相互转化的过程,减少了数据因转换产生的遗失、变形等。

2 VBA 技术简介[1]

VBA 的全称是Visual Basic for Application,是AutoCAD 的一种二次开发工具。VBA 将AutoCAD 和Visual Basic 的功能结合在一起,能够快速创建出符合用户要求的程序,大大提高了用户的工作效率。Auto-CAD VBA 的开发使用的是AutoCAD ActiveX 技术,这种技术使用户能够从AutoCAD 的内部或外部以编程的方式来操作AutoCAD。

3 工作流程

从外业数据的采集到内业数据的编辑、整饰、分幅、入库,再到使用“图库管理”功能对入库数据进行管理的整个工作流程如图1所示。

图1 工作流程图

4 功能设计

4.1 程序的加载和运行

VBA 程序的加载包括设计过程中的自动加载和使用中的自动加载[1]。前者需要通过AutoCAD 原有的菜单项(即【工具/加载应用程序】)配置所需的工程程序,其中所加载的工程文件可以任意命名,后缀名为.dvb。而后者则必须将工程文件命名为acad.dvb并且将其放置在AutoCAD 安装路径的Support 文件夹中,当AutoCAD 启动时会搜索并加载acad.dvb。本程序采用后者进行程序的自动加载。

4.2 “图库管理”菜单的加载

当启动了AutoCAD,系统会自动搜索并加载acad.dvb 工程,同时由程序编制的“图库管理”菜单也会自动加载到AutoCAD 的菜单栏,加载后的效果如图2所示:

图2 “图库管理”菜单

其中,菜单加载所用到的关键代码如下:

’获得当前的菜单组

Dim currMenuGroup As AcadMenuGroup

Set currMenuGroup = ThisDrawing.Application.MenuGroups.Item(0)

’创建“图库管理”新菜单

Dim newMenu As AcadPopupMenu

On Error Resume Next

Set newMenu=currMenuGroup.Menus.Add("图库管理")

’添加“图上指定点”菜单项

Dim macro As String

Dim newMenuItem As AcadPopupMenu

macro=Chr(vbKeyEscape)+Chr(vbKeyEscape)

Set newMenuItem=newMenu.AddSubMenu(newMenu.Count+1,Chr(Asc("&"))& "图上指定点")

’菜单项“图上指定点”下面的“1∶ 500”子菜单

Dim submenuitem As AcadPopupMenuItem

Set submenuitem = newMenuItem.AddMenuItem(newMenu.Count+1,Chr(Asc("&"))& "1∶ 500",macro & " -vbarun" +Chr(32)+"ThisDrawing.insertblock" +Chr(32)

4.3 “图上指定点”功能

不同城市对分幅地形图的图幅命名习惯和命名方式有可能不同。但是,要将不同图幅命名方式的分幅地形图用AutoCAD 进行统一管理,则必须将AutoCAD下的实地坐标和图幅建立对应关系。下面以某市1∶ 1 000比例尺图幅为例说明该功能的实现。

图3 图幅号表

如图3所示,用Access 数据库组织管理该市1∶ 1 000比例尺分幅图的图幅号。其中,坐标分幅号(15.5 -3.0)、标准分幅号(A-A)为该市1∶ 1 000比例尺分幅图所采用的图幅命名方式。AutoCAD 运行环境下,当在以路网图为背景的地形图上任选一点时,程序可根据该点的X、Y 坐标自动推算出该点所在的坐标分幅号(15.5 -3.0),并通过以下代码连接Access数据库,在数据库中找出该坐标分幅号对应的标准分幅号(A-A)。

Dim daodb1 As DAO.Database ’数据库对象

Dim daors1 As DAO.Recordset ’记录集对象

’打开数据库

Set daodb1 =OpenDatabase(ThisDrawing.Path & " 数据库.mdb")

’打开记录集

Set daors1 =daodb1.OpenRecordset("图幅号对照表",2)

当数据库中存在该图幅,程序则通过加载块的方式将该图幅准确定位到当前路网图中,若不存在该图幅,程序则会跳出提示对话框,提示该图幅不存在。当用户调用的图幅存在多个版本时,程序则把该图幅所涉及的所有版本罗列出来,用户可根据自己的需要选择对应版本的图幅。

使用“图上指定点”功能的前提是,用户必须对测区的大概位置有所了解。当掌握了测区的大概位置后,再在路网图上调用所需要的图幅。这种操作方式既方便又快捷。但对于不了解测区位置的用户来说,这一功能也许就不那么好用。为了满足不同用户对象的需求,该程序增加了“调用窗体输入”功能。

4.4 “调用窗体输入”功能

该功能主要适用于不清楚测区的大概位置,但有该测区地形图某图幅号或某一点坐标的记录。用户可根据自己所掌握资料的情况,在图4界面里选择一种合适的调用方式。

图4 “调用窗体输入”界面

“输入标准图幅号”即输入以标准分幅号命名的图幅号(如A-A)。

“输入坐标图幅号”即输入以坐标分幅号命名的图幅号(如15.5 -3.0)。

“输入任意坐标”即输入地形图上的任意一点坐标,程序通过自动推算、查找,找到所需的图幅号(坐标分幅号或标准分幅号)。

假设输入或换算后的图幅号用变量tufuhao 表示,那么程序通过下面这段代码将该图幅准确地定位到道路路网图上。

Set blockRefObj=ThisDrawing.ModelSpace.insertblock(pnt,

ThisDrawing.Path & "地形图" & tufuhao & ".dwg",1,1,1,0)

4.5 “保存图块”功能

用户可以对当前打开的分幅图进行添加、修改、删除等操作,当操作完成后可使用该功能对当前操作进行任意保存。所保存的数据可以是完整一幅图,也可以是一幅图的部分数据,同时也可以是多幅图合并后的图形数据。

5 地形图数据的更新

地形图数据能否体现城市地形、地貌的真实性、现势性。取决于地形图数据是否能够得到及时的更新和维护。目前数字化地形图的更新方式有两种[3]:一种是对同一数据的不同版本进行更新,即基于版本的数据更新;另一种是对变化的地理要素进行更新,即基于基态修正的数据更新。本程序采用二者结合的方式进行更新,即在同一年内,只对变化的地理要素进行更新(图上最好附上更新范围线,以标记更新的范围),图幅另存时则在图幅号后备注该年年份。若在同一年内,同一图幅的同一范围经过多次更新,那么该图幅另存时应增附更新的月份。对于下一年度更新的图幅,图幅号后则备注下一年的年份,实现数据的版本更新。这样既保证了数据的现势性,又保存了历史数据。

6 结 语

笔者开发的“图库管理”功能主要服务于数字化地形图测绘生产单位,其优越性主要体现在:该功能是基于测绘生产单位熟悉的AutoCAD 平台进行的二次开发。使用该平台,不仅开发成本低,而且对于数字化地形图管理者来说,简单易学、操作便捷。

“图库管理”功能分别在多尺度地形图的管理和数字化地形图的更新两方面加入了笔者的创新。首先,不同的用户对象通过该功能可以实现多尺度、多版本数字化地形图数据的编辑,并且可以做简单的叠加分析;其次,通过版本更新和基态修正更新相结合的方式进行数字化地形图数据库的更新,体现地形图数据的现势性和历史性。

该程序经过多年的使用和完善,已在城市数字化地形图数据管理方面取得了一定的效果,大大提高了数据管理者的工作效率和工作准确率。但是,它仅局限于空间数据的管理,而对属性数据管理方面的功能还比较薄弱。因此,今后在不断完善空间数据管理功能的同时,还要不断改进和提高,完成在AutoCAD 环境下属性数据的管理。

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

[2]郑阿奇,曹弋.Visual Basic 实用教程(第2 版)[M].北京:电子工业出版社,2004.

[3]李宗华.城市地理基础空间数据库更新方法研究[J].城市勘测,2006(1):6 ~8..

[4]林远清.基于VB6.0 的地形图管理信息系统设计与开发[J].城市勘测,2008(3):20 ~22..

[5]黄达藩.地形图数据库建设与数据共享有关问题的探讨[J].城市勘测,2005(5):14 ~16..

[6]杨永崇,秦宽.地图管理系统设计与开发[J].城市勘测,2007(1):35 ~37.

猜你喜欢
图库图幅程序
金山农民画矢量图库的建设与应用
试论我国未决羁押程序的立法完善
“程序猿”的生活什么样
视图库在AI浪潮里的发展应用
基于Arcpy的地形图接图表快速生成方法
Photoshop CC图库面板的正确打开方法
英国与欧盟正式启动“离婚”程序程序
基于EXCEL的地形图图幅号转换查询方法
创卫暗访程序有待改进
围绕“四个全面”战略布局 谱写伟大复兴宏伟篇章