基于AutoCAD VBA二次开发的大比例尺地形图查询系统

2010-04-18 10:36:12黄毓李文柱
城市勘测 2010年2期
关键词:图块图幅韶关市

黄毓,李文柱

(韶关市测绘院,广东韶关 512000)

基于AutoCAD VBA二次开发的大比例尺地形图查询系统

黄毓∗,李文柱

(韶关市测绘院,广东韶关 512000)

介绍在AutoCAD环境下,利用VBA二次开发工具实现大比例尺地形图的快速查询,给尚未建立地理信息系统的单位进行地形图的快捷、方便的调用提供了工具。

大比例尺地形图;查询;VBA;AutoCAD

1 引 言

大比例尺地形图是城市规划、城市建设不可缺少的基础资料。我院承担向社会提供各种地形图的服务,由于各种客观原因,在对外供图服务窗口,顾客多数不熟悉测绘知识,很难准确的报出所需地形图相应的图幅号,所以经常需要我们按各种条件,如按坐标或地名查找相应图幅号。早期,对地形图的查找只能靠对地形图非常熟悉的作业人员凭借经验完成,或按照分幅接图表来手工查询,这些查询方法非常不便,且效率很低,影响了售图服务整个流程进展,服务效率有待提高。

我院一直使用AutoCAD软件平台,本文利用AutoCAD自带的VBA(Visual Basic For Application),在AutoCAD中进行二次开发,实现了大比例尺地形图快速查询、定位和显示,极大地提高了工作效率。

2 程序思路及算法

2.1 地图查询思路

(1)dwg文件存储方式

我院的大比例尺地形图都是采用dwg文件按图幅命名进行图形的存储,为地图查询提供了有利条件。

(2)图幅号计算

我院大比例尺地形图一直采用正方形 50 cm× 50 cm标准分幅,图幅号计算规律如图1所示。

(3)结合dwg文件的命名方式,分析图幅号的计算规律,得出图幅号计算公式。

(4)地图查询方式

可按输入图幅号及在图上进行范围框选进行查询。利用插入图块的方式将符合要求的图幅插入到当前视图中。

设计方便进行范围查询的底图,如韶关市道路图作为索引图,利用插入图块的方式自动将底图显示于屏幕之中,并且提供删除底图功能。

图1 图幅分幅表

2.2 编程实现

在VBA二次开发环境中,利用模块来定义各种功能函数,主要内容如下:

首先定义1∶500图幅号计算功能函数。

Function strTFH500(ByVal x0 As Double,ByVal y0 As Double)′计算图幅号

Dim xa As String,ya As String,str As String

Dim txt2000 As String,txt1000 As String,txt500 As String

If Fix(x0/1000)Mod 2=0 Then′判断x是偶数

xa=Fix(x0/1000)

Else ′若x是奇数

xa=Fix(x0/1000)-1

End If

If Fix(y0/1000)Mod 2=0 Then

ya=Fix(y0/1000)

Else

ya=Fix(y0/1000)-1

End If

Dim tp1 As Double,tp2 As Double

Dim x1,y1,x2,y2,x3,y3 As Double

tp1=xa∗1000

tp2=ya∗1000

′计算1:2000的图号

x1=x0-tp1

y1=y0-tp2

txt2000=Count(x1,y1)

′计算1:1000的图号

x2=x0-Fix(x0/1000)∗1000

y2=y0-Fix(y0/1000)∗1000

txt1000=Count(x2∗2,y2∗2)

x3=x0-Fix(x0/1000)∗1000

y3=y0-Fix(y0/1000)∗1000

If x3〉500 Then

x3=x3-500

End If

If y3〉500 Then

y3=y3-500

End If

′计算1:500的图号

txt500=Count(x3∗4,y3∗4)

strTFH500=xa&ya&"-"&txt2000&txt1000&txt500

End Function

Function Count(ByVal a1 As Double,ByVal a2 As Double)

If a1〉1000 And a2<1000 Then

Count=1

ElseIf a1〉1000 And a2〉1000 Then

Count=2

ElseIf a1<1000 And a2<1000 Then

Count=3

ElseIf a1<1000 And a2〉1000 Then

Count=4

End If

End Function

再定义进行框选时的左下角x、y坐标

Function leftXY(ByVal n0 As Double)′计算左下角x、y坐标

Dim xa As String,ya As String,str As String

Dim txt2000 As String,txt1000 As String,txt500 As String

xa=Fix(n0/1000)

Dim x1,y1,x2,y2,x3,y3 As Double

y1=xa∗1000

x1=n0-y1

ya=cnt(x1)

If ya=0 Then

leftXY=xa∗1000

Else

leftXY=xa&ya

End If

End Function

Function cnt(ByVal x1 As Double)

If x1〉=0 And x1<250 Then

cnt=0

ElseIf x1〉=250 And x1<500 Then

cnt=250

ElseIf x1〉=500 And x1<750 Then

cnt=500

ElseIf x1〉=750 And x1<1000 Then

cnt=750

End If

End Function

根据实现思路,设计查询界面如图2所示。

图2 查询界面

其中,“索引图上点取范围”,利用GetPoint和Get-Corner方法来获取屏幕框选的两点坐标,并进行计算获得左下角和右上角坐标,再通过自定义算法来计算左下角坐标和右上角坐标范围所包含的图幅号,由于篇幅有限,代码部分省略。

显示地图采用插入图块的方式来实现,主要插入图块代码如下:

Set BlkRefObj=ThisDrawing.ModelSpace.InsertBlock(Instpnt,filename,1#,1#,1#,0#)

3 系统界面及其效果

程序编好后,就是加载和运用VBA程序了。首先新建一个文本文件,在该文件中用LISP语言定义执行VBA宏的命令,用LSP后缀名保存该文件。在Auto-CAD启动后,在命令行输入“vbaload”或”appload”命令来加载VBA工程文件和LSP文件。为了避免每次启动CAD都要手动加载的麻烦,可在执行appload命令后,在启动组的“内容”按钮中加载。程序加载完成后,就可以进行地形图查询了。

(1)按地名、道路名查询。先调出韶关市道路图作为索引图,然后在索引图上框选查询范围,相应的地形图就能快速查询、显示出来,如图3所示。

(2)根据给定坐标或红线查询,如图4所示。

图3 按地面、道路名查询

图4 按红线查询

4 结 语

本程序实现了大比例尺地形图快速查询、定位和显示,在实际中方便了客户的查询,提高了工作效率。但仅具有查询功能,不具有地形图数据库管理功能,作为个人开发的程序无法与地理信息系统(GIS)为基础,图库管理系统相比拟,只能作为从手工管理地形图到地理信息系统建立的一种过渡。

[1]李凤华.AutoCAD2002/2000 VBA开发指南[M].清华大学出版社,2001

[2]谢玉周,王振中,杜耀刚.在AutoCAD中实现地形图图库管理[J].测绘通报,2006(7):55~57

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

Large-Scale Topographic Map Inquiry System Based on Redevelop AutoCAD VBA

Huang Yu,Li WenZhu
(Shaoguan Institute of Surveying and Mapping,Shaoguan 512000,China)

This article describes on the AutoCAD environment,how to achive quickly search Large-scale Topographic Map used VBA Secondary Development Tools,and offer tools to conveniently export topographic map for some units which geographic information system still unestablished.

Large-scale Topographic Map;Search;VBA;AutoCAD

1672-8262(2010)02-150-03

P209

B

2009—08—30

黄毓(1978—),男,工程师,主要从事城市测绘技术管理工作。

猜你喜欢
图块图幅韶关市
AutoCAD中图块命令的应用分析
区域土壤重金属污染与多元主体治理——以韶关市董塘镇为例
优化A算法搜索连连看图块配对和消除次序
生态文明视野下中等城市新型工业化道路研究——基于韶关市的实证研究
基于EXCEL的地形图图幅号转换查询方法
自然保护地(2015年3期)2015-12-03 02:29:54
广东省首个“关心下一代教育示范基地”落户韶关市乳源瑶族自治县
中国火炬(2015年4期)2015-07-31 17:39:27
茶壶难题
基于ArcMap的图幅接合表快速生成方法研究
地形图图幅编号规则及实现
城市勘测(2014年4期)2014-06-24 14:33:27
基于Bing Maps的地形图图幅编号的网络可视化查询
测绘通报(2013年2期)2013-12-11 07:27:54