利用VBA进行城市部件调查内业数据处理

/ 2

利用VBA进行城市部件调查内业数据处理

黄林冯耀能

黄林冯耀能(四川天辰空间信息技术有限公司,四川成都610081)

【摘要】根据城市部件普查工作内容和特点,在AutoCAD平台环境下利用VBA二次开发,批量进行测量坐标展点、块属性赋值可以提高内业作业效率和正确率。

【关键词】AutoCAD;二次开发;VBA块属性

随着数字城市建设的不断加快,城市信息数字化的要求不断提高。数字城管作为数字城市建设的一部分,其中的城市部件普查便是重中之重,是数字城管的基础数据,其主要任务是对城市部件进行普查上图,基础数据普查对象主要包括:城市管理部件、兴趣点、标志物。获得它们的平面位置、状态、现势性等属性信息。成都市城市部件被分为7大类,包括公用设施类、道路交通类、市容环境类、园林绿化类、房屋土地类、其它设施类及扩展部件类。在大类的基础上又具体分成约117小类。

采用常规方法测量,外业测量完成后进行展点、绘图、部件块属性赋值不仅工作量大、效率低,而且容易出错。针对以上原因,结合每个具体的城市部件,其归类和属性值具有唯一性的特点,在AutoCAD下利用VBA二次开发的方法,批量进行块属性赋值、按测量坐标展点,大大提高内业作业效率和准确率。

编程的基本思路是:

定义外业测量名称简码、属性简码→根据测量坐标展点→根据简码选择对应的块并赋属性值。

1外业测量简码定义

外业测量简码编码规则如下:

a)名称:城市部件按名称汉语拼音首字母进行编码,占用两个字节。少数重复另行编码。为了便于区别和记忆,所有的井盖编码在外业测量时均为一位由内业程序转化为两位,其它部件名称直接为两位编码。

b)材质:城市部件的材质属性在原作业规范共有20种,但对于具体的每一类部件只有2~4个属性值可供选择,为了便于记忆,故外业编码只取1~4这4个数字中的一个。对于不需标注材质的属性的部件,外业数据采集时录入0。

c)状态:即部件的使用状态,共有4个属性值:W-完好、P-破损、D-丢失、Z-占用。若完好外业数据采集时可省略。

d)现势性:即部件是否在用,共有2个属性值:Y-在用、F-作废。

外业测量简码识别和转换的程序如下:

DimCode0AsString'外业测量简码

DimNameAsString'部件名称

DimMaterialAsString'材质属性

DimConditionAsString'状态属性

DimUse_or_notAsString'现势性属性

DimiAsInteger

DimpAsString

Code0=Cass_Name

'------------定位材质属性位置并存储--------

Fori=1To5

Ifi<=Len(Code0)Then

Material=Mid(Code0,i,1)

IfAsc(Material)<=57AndAsc(Material)>=48Then

ExitFor

EndIf

Else

MsgBox"材质属性错误!",vbOKOnly,"注意"

ExitFor

EndIf

Nexti

'------------------------------------------------------------

Name=Mid(Code0,1,i-1)

IfLen(Name)=1ThenName="#"&Name'若名称简码为一位则在其前面加“#”补齐

'-----------------存储现势和状态属性------------

Ifi=Len(Code0)Then

Condition="W"

Use_or_not="Y"

EndIf

Ifi=Len(Code0)-1Then

p=Right(Code0)

Ifp="Y"Orp="F"Then

Condition="W"

Use_or_not=p

Else

Condition=p

Use_or_not="Y"

EndIf

EndIf

Ifi=Len(Code0)-2Then

Condition=Mid(Code0,i+1,1)

Use_or_not=Right(Code0,1)

EndIf

2展点程序

外业测量数据格式采用南方CASS软件格式,即:点号,简码,Y,X,H。

其对应的展点程序:

DimCass_xyh(2)AsDouble'存储坐标

CommonDialog1.Flags=cdlOFNHideReadOnly

CommonDialog1.DialogTitle="打开CASS(*.dat)数据格式文件"

CommonDialog1.Filter="数据文件(*.dat)|*.DAT|文本文件(*.txt)|*.TXT|所有文件(*.*)|*.*"

CommonDialog1.FilterIndex=1

CommonDialog1.FileName=""

CommonDialog1.ShowOpen

My_filename=Me.CommonDialog1.FileName

IfMy_filename=""ThenExitSub

……

OpenMy_filenameForInputAs#1'打开文件

Link_Num=-1

NumberOfElements=-1

OnErrorResumeNext'错误继续执行

DoUntilEOF(1)'文件读取循环

Input#1,Cass_Num,Cass_Name,Cass_xyh(0),Cass_xyh(1),Cass_xyh(2)'CASS软件DAT格式

3.属性值赋值

SelectCaseName

Case"#S"

newBlock"101"

newLayer"101"

……

EndSelect

SetBlockRefObj=ThisDrawing.ModelSpace.InsertBlock(Cass_xyh,"101",1,1,1,0)

attr3=BlockRefObj.GetAttributes'获取块属性

‘---------------------------------------------

SelectCaseMaterial

Case"1"

attr3(0).TextString="1-铸铁"

Case"2"

attr3(0).TextString="2-混凝土"

Case"3"

attr3(0).TextString="3-复合材料"

EndSelect

‘-------------------------------------------------

SelectCaseCondition

Case“W”

attr3(1).TextString="完好"

Case“P”

attr3(1).TextString="破损"

Case“D”

attr3(1).TextString="丢失"

Case“Z”

attr3(1).TextString="占用"

EndSelect

‘--------------------------------------------

SelectCaseCondition

Case“Y”

attr3(3).TextString="在用"

Case“F”

attr3(3).TextString="作废"

EndSelect

4.程序测试与工程实践

程序编写完成后,进行了程序的测试,其运行界面如下:

本程序还进行了线状地物连线、XY坐标互换位置等功能的开发,由于篇幅有限,在此就不一一介绍。

经本程序运行后,采用原部件调查检查程序进行检查,属性检查无误,证明程序的可靠性较高。

5.结束语

VBA是VB语言的一个子集,可在AutoCAD平台上进行的二次开发,作为测量内业处理的辅助工具,可大大提高内业作业效率和正确率,通过工程实践证明了该程序的稳定性和准确性,具有较强的实用性,具有推广应用价值。

参考文献:

(1)佟士懋,刑芳芳,夏齐霄.AutoCADActiveXVBA二次开发技术基础及应用实例,国防工业出版社,2006,20~80

(2)成都市勘察测绘研究院,成都市数字化城市管理数据普查作业指导书,2012,1~12