分类房屋面积自动统计的程序实现
廖维荣
摘要:在新城建设或者旧城改造中,决策者往往想先了解征地拆迁工作量及成本,这样一来,房屋的建筑面积统计工作变得尤为重要,传统的手工计算既费时费力,又难以保证其准确性,文章应用VBA编制程序,实现了房屋分类面积的自动统计计算,使繁重的工作变得简单高效,并且能保证其准确与可靠性。
关键词:房屋面积;分类统计;程序计算;VBA
1引言
随着社会经济的发展,人们对居住环境要求越来越高,新城建设和旧城改造项目进行的如火入茶;然而在项目的前期,决策者往往想先了解项目的征地拆迁工作量及成本,这样一来,房屋的建筑面积统计便成了该项工作的重中之重。传统的计算方法是逐间房屋分类手工计算,然后再汇总手工计算,这样既费时费力,也难以保证其准确性,笔者通过思考并结合实际项目,应用VB语言编制程序,实现了分类房屋面积的批量自动统计。
2传统手工统计方法
传统的手工处理方法一般是借助excel办公软件,将房屋预先编号,逐间房屋分类输入电子表格,然后计算,分类统计,这样一来,如果需要统计的房屋较多,工作量巨大,全部手工输入很难保证其正确性,对于大范围的城区改造,该种方法显然不可行。
3计算机程序自动统计
3.1开发工具介绍
VBA是基于ActiveX技术的AutoCAD二次开发工具,可以通过ActiveX与AutoCAD进行通信,并操纵AutoCAD的许多功能。它基于Visual Basic版本,是面向对象体系结构的一种编程语言,有着与VB几乎相同的开发环境和语法。VBA依附于主应用程序AutoCAD,它与主程序的通信简单而高效,由于共享内存空间,使它有更快的执行速度,且其语法结构简洁,深受广大工程技术人员喜爱。
3.2程序思路
第一步,房屋分类归入不同图层,楼层数放入房屋中以备后续程序读取。
第二步,程序对CAD图进行预处理,如删除房屋的多余节点,判断房屋内楼层数的唯一性,如果楼层数不等于1(有两个以上或者一个都没有),程序终止,将房屋换颜色显示,回手工处理阶段。
第三步,程序按图层读取房屋面积及楼层数,按顺序将读取的房屋编号,将编号、面积、楼层数输出至EXCEL表格,将编号及面积写入相应房屋中心位置己备查询。
第四步,程序自动统计所有房屋的总面积输出至EXCEL表格的汇总行,然后结束程序。
3.3程序界面
程序界面如图l所示。
3.4部分源代码
创造房屋选择集部分
On Error Resume Next
Call ThisDrawing.SelectionSets("MyssFw").Delete
On Error Resume Next
Set MySelectFw=ThisDrawing.SelectionSets.Add("MyssFw")
If Err Then
Err.Clear
Set MySelect Fw = This Drawing.SeleetionSets("MyssFw")
End If
Dim gpCode(0.To 1)As Integer,dataValue(0.To 1)As Variant
gpCode(0)=0:dataValue(0)="LWPolyline"
gpCode(1)=8:dataValue(1)=layer99
MySelectFw.SelectOnScreen gpCode,dataValue选择JMD房屋
MySelectFw.Select acSelectionSetAll,,,gpCode,dataValue
N=MvSelectFw.Count
MJZn=0
For I=0 To N-1
Set PL=MySelectFw.Item(I)
M=(UBound(PL.Coordinates)+1)/2
ReDim pointsArray(0 To 3*(M-1)+2)AsDouble
ReDim x(0 To M-1)As Double
ReDim y(0 To M-1)As Double
创建文字选择集部分
0n Error Resume Next
Call ThisDrawing.SelectionSets("MyssTx").Delete
On Error Resume Next
Set MyselectTx=ThisDrawing.SelectionSets.Add("MyssTx")
If Err Then
Err.Clear
Set MyselectTx =This Drawing.SelectionSets("MyssTx")
End If
输出至Excel表格部分
mySheet.Ceils(I+3,1).Value="合计"
mySheet.Cells(I+3,2).Value="一层面积(砖混)"
mySheet.Cells(I+3,3).Value="二层面积(砖混)"
mySheet.Cells(I+3,4).Value="三层面积(砖混)"
mySheet.Cells(I+3,5).Value="四层以上面积(砖混)"
mySheet.Cells(I+3,6).Value="房屋总面积(砖混)"
mySheet.Cells(I+3,11).Value="一层面积(砖木)"
mySheet.Cells(I+3,12).Value="二层面积(砖木)"
mySheet.Cells(I+3,13).Value="三层面积(砖木)"
mySheet.Cells(I+3,14).Value="四层以上面积(砖木)"
mySheet.Cells(I+3,15).Value="房屋总面积(砖木)"
mySheet.Cells(I+3,21).Value="一层面积(简易)"
mySheet.Cells(I+3,22).Value="二层面积(简易)"
mySheet.Cells(I+3,23).Value="三层面积(简易)"
mySheet.Cells(I+3,24).Value="四层以上面积(简易)"
mySheet.Cells(I+3,25).Value="房屋总面积(简易)"
mySheet.Cells(I+4,1).Value=N
mySheet.Ceils(I+4,2).Value=ZHI
mySheet.Cells(I+4,3).Value=ZH2
mySheet.Cells(I+4,4).Value=ZH3
mySheet.Ceils(I+4,5).Value=ZH4
mySheet.Cells(I+4,6).Value=ZHZ
mySheet.Ceils(I+4,11).Value=ZM1
mySheet.Cells(I+4,12).Value=ZM2
mySheet.Cells(I+4,13).Value=ZM3
mySheet.Ceils(I+4,14).Value=ZM4
mySheet.Cells(I+4,15).Value=ZMZ
mySheet.Cells(I+4,21).Value=JY1
mySheet.Cells(I+4,22).Value=Jf2
mySheet.Cells(I+4,23).Value=JY3
mySheet.Cells(I+4,24).Value=JY4
mySheet.Cells(I+4,25).Value=UYZ
3.5程序运行前CAD截图
程序运行前CAD截图如图2所示。
3.6程序运行后生成的Excel表格
程序运行后生成的Excel表格如图3所示。
4结语
分类房屋面积统计程序基本实现了房屋面积的自动统计累加,前期仅需少量的人工干预(仅将不同结构或用途的房屋归入不同的图层即可),后续程序自动读取房屋面积与层数,并自动分算至各个楼层,方便快捷,省时省力。特别对于大面积的房屋面积统计尤能显示其优越性,譬如几千甚至上万个房屋,程序运行仅几秒钟即可统计完毕,并且保证准确可靠。由于笔者本身的学识和实践经验受限,程序在自动纠错和速度方面仍有许多可以改进提高的地方,笔者在今后的学习和工作中不断将其完善。