摘要:本文通过南方CASS测绘得到的地形图或由其它软件测得但以转为南方CASS的地形图(DWG格式的图形)后,在AUTOCAD2006中通过对图形属性的分析,利用VBA编程自动计算建筑面积和占地面积的方法研究,提高了各种图形建筑面积和建筑占地面积计算的功效,为建设用地的指标控制提供了准确的数字依据。
关键词:建筑面积 占地面积 建筑物 房屋构面线 VBA
1 概述
“保护耕地就是保护我们的生命线”,在我国耕地资源日趋贫乏的严峻的形势下,经济发展建设用地的需求量却在不断增加,为确保社会经济的可持续发展,每个地方的建设用地指标国家已进行了严格的控制,在这样的一种用地形势十分严峻的背景下,有的企业急需发展却批不到土地,有的企业批到了地却闲置或没有严格按建设用地指标去开发建设,不能有效的发挥土地的经济价值,所以目前要从建设用地指标管理着手,利用好每一块土地。本文利用VAB编程自动计算建筑面积和占地面积的方法进行了研究,高效地准确地计算每一宗地的建筑占地面积和建筑面积,从而为建设用地使用指标的管理提供可靠的数学依据。
VBA即Visual Basic for Application, 从语言结构上讲, 它是VB(Visual Basic)的子集,他们具有相同的语言结构。VBA是一种完全面向对象体系结构的编程语言,其使用方便、功能强大的特点,很多应用程序均嵌入该语言作为开发工具。在AUTOCAD的基础上采用VBA语言作为二次开发的工具,VBA 提供了面向对象的程序设计方法,提供了相当完整的程序设计语言。VBA 易于学习掌握,可以使用宏记录器记录用户的各种操作并将其转换为VBA 程序代码。这样用户可以容易地将日常工作转换为VBA 程序代码,使工作自动化。VBA作为AUTOCAD有效的开发语言,具有以下的优势:
1、Visual Basic编程环境易学易用;
2、AUTOCAD VBA运行在与AUTOCAD相同的处理空间;
3、允许快速开发程序和及时受到设计的反馈;
4、可以单独存在,也可以嵌入到图形中,这使得开发者在应用程序时有极大的灵活性;
5、VBA还可以同其他使用VBA的应用程序集成。
2 程序流程设计
3 图形处理与选择集的构造整合
目前我国测绘软件种类繁多、功能独特,有的用AutoCAD为平台进行二次开发,如南方CASS等,有的完全自主开发,如Walk、清华山维等,无论是前者还是后者,它自身的软件中都没有自带统计建筑面积的工具,再加上由于绘图人员的不注意,或说是不专业,导致地形图本身就有一定的问题,例如:在南方CASS中修改建筑属性和层数的时候,很多人就是直接把建筑的注记修改了,而没有修改里面的扩展数据,这对面积的自动计算带来了一定的困难。但采用二次开发可以解决在AUTOCAD中建筑面积统计的问题。
3.1 图形检核编辑
参与建筑占地和建筑面积计算的图形由于进行了转换、接边、插入、剪切等处理,从而使图形产生了多余的房屋结构注记和重叠的房屋线,有的肉眼能看见,有的看不见,而且相同图形中的同类文字、线型在分层、属性方面有所差异,所以在面积计算之前对图形进行以下处理:
a、对有缺口的建筑物进行封闭处理。
b、删除建筑物内多余的结构注记,每个建筑物只需一个结构注记。
c、建筑物内的结构注记与层次注记尽量为一整体注记。
d、面积计算区域内的所有建筑物与建筑物结构注记必须分别分布在同一个层内,而且所有建筑物线型属性和结构注记属性要分别保持一致,如:不能有的是TEXT注记,有的是MTEXT注记等,有的是line 线型有的是pline 线型等。
e、其它不参与面积计算的构筑物或其它线型不能与同属性(属性以南方CASS的属性为标准)。
3.2 选择集的构造整合
对图形进行了上述处理后,还要过滤选择集中的但位于面积计算区域外的建筑物实体,自动删除重叠结构注记和重叠房屋构面线,提取房屋结构注记和房屋构面的线属性信息。
3.2.1选择集多边形坐标表的生成
VBA选择集在进行多边形选择时,经测试多边形中有重复点时,选择集操作失败。一般在进行计算面积时,选取的多边形是宗地的界址线或人为临时绘制的多边形,界址线在宗地图的前期制作过程中进行了多次调整,如有的地方加点,有的地方减点,经过多次拖动的界址线就出现了重复点的情况,利用多边形坐标表中相邻点的距离小于某一数值就认为是重合点或密集点,程序自动进行剔除,保证选择集操作成功。
3.2.2 选择集外建筑面积的剔除
参与建筑面积和建筑占地面积计算的图形的选择集多边形是宗地图界址线或人为临时绘制的多边形,有时选择集多边形由于绘制误差等原因压盖了部分区域之外的建筑物,导致面积计算产生差错,为此要对所有建筑物内的结构注记的脚点进行分析,从图形结构分析,多边形内的任意点向任意方向做一条射线,它与多边形的交点是奇数,多边形外的任意点向任意方向做一条射线,它与多边形的交点是偶数,通过交点的奇偶性判断,可以剔除多边形之外的建筑物,保证了面积计算的准确性。
3.2.3重叠结构注记的删除
由于图形接边等情况引起的结构注记重叠,眼睛不易识别,要求能自动识别剔除重叠注记或近距离注记,如两注记完全重叠或相距在肉眼完全能看清的距离内时进行剔除。
3.2.4重叠房屋线的剔除
地形图测绘时由于图形接边引起的眼睛无法识别的重叠房屋构面线,面积计算时要求能自动识别剔除。根据经验在实际测绘中面积完全相同的房子出现的可能性极少,如果相同则认为是同一个房子的重叠,根据这一思路对房子面积进行逐一比较,就可以剔除重叠房屋构面线。
3.2.5选择集过滤信息的提取
我们对参与面积计算的选择集进行操作时有二种信息需自动识别提取,一种是房屋结构信息,即房屋结构注记所在图层名和注记方式等,另一种是房屋线所在的图层名和线型信息等。二种信息主要是通过提取图形上的房屋结构注和房屋构面线,对其进行分析并提取相关信息,通过所需信息的提取,可以在自动解算时从选择集中过滤大部分无用的实体,为面积的正确与快速计算提供了保障。
4 面积计算方法研究
4.1 面积计算方法
利用各种方法在AutoCAD重新生成新的能计算出面积的实体即封闭多段线,然后利用CAD的AREA命令进行计算,立即提取CAD系统变量中的面积,然后利用从建筑物结构注记中提取建筑物的层次,这样就可以计算出建筑物的占地面积和建筑面积。
4.1.1利用房子的构面线计算面积
本方法适用于利用南方CASS测绘的图形数据,利用房子的构面线和房子的构面线的属性自动计算建筑占地面积和建筑面积。要求所有建筑物结构注记和层数注记与房子的构面线的属性(即扩展数据)一致。面积计算结果可以与生成的面积计算文件进行核对。对房屋构面线建立选择集时设立了以下过滤条件;
FilterType(0) = 0
FilterData(0) = “LwpolyLine”
FilterType(1) = 8
FilterData(1) = “JMD”
FilterType(2) = 1000
FilterData(2) = “sxdm” ’其中sxdm是代表所有的房屋属性代码
SSet.Select acSelectionSetAll, , , FilterType, FilterData
“其中FilterType(0) = 0和FilterData(0) = “LwpolyLine”规定必须选取连续的多段线,FilterType(1) = 8和 FilterData(1) = “JMD”规定房屋必须在南方CASS规定的居民地层(“JMD”),FilterType(2) = 1000FilterData(2) = “sxdm”规定选择的多段线都市房屋的构面线。
4.1.2 利用房子的注记(结构注记和层数注记)和房屋构面线计算面积
本方法适用于非南方CASS软件测绘的图形数据(指已转换为南方CASS的图形数据)南方CASS软件测绘的已丢失属性的图形数据,利用房子结构注记和层数注记进行属性重构,然后用上述方法计算面积。要求所有建筑物结构注记和层数自己必须在同一层上,房屋构面线可以不完全一致,面积计算结果可以与生成的面积计算文件进行核对。房屋构面线建立选择集时选择过滤条件同上,注记选择集过滤代码如下;
FilterTyp(0) = 0
FilterDat(0) = “Text”
FilterTyp(1) = 8
FilterDat(1) = “JMD”
ssSet.SelectByPolygon acSelectionSetCrossingPolygon, objPnt, FilterTyp, FilterDat
注记方式和图层名可以通过交互式方式进行提取,“objPnt”是指定的一条房屋构面线,以上的代码含义是:在指定的房屋构面线内检索结构注记和层数注记。
4.2 面积计算粗差剔除
4.2.1用房屋面积大小异常剔除粗差
房屋的占地面积和建筑面积都应大于0平方米,一般还用到占地面积大于1方米,房屋的占地面积也应小于一个数字,一般用占地面积用小于1000平方米,这些常数可由用户自己设置。
4.2.2 用多次计算核对检验剔除粗差
多次面积计算时都生成了面积数据文件,对面积文件中的每幢房子的面积数据进行核对,面积值跳跃较大的房屋和结构不一致的房屋可作为重点检查对象,可以按提供的脚点坐标人为剔除错误边界线并进行修改。
4.2.3 用南方CASS自带的功能计算的结果与此计算结果比较剔除粗差
可以利用“计算宗地内建筑面积”和“注记建筑占地面积”这两功能,就可得出房屋建筑面积的一些结果,和本程序的计算结果作比较,若面积值跳跃较大,则需检查。“计算宗地内建筑面积”是计算这个选择集的总的占地面积(不记房屋附属结果面积),若指定的边界不是宗地边界,我们应该把此边界线变为的权属线,再计算总的占地面积,最后与本程序计算的总面积对比。“注记建筑占地面积”功能是把所有房屋的的面积标注出来,以便人工的检查错误。
4.3面积计算时注意的一些问题
面积计算计算之前一定要做好图形的处理工作,特别是拓扑关系的检查,防止房屋构面线出现的重叠、交叉、包含等错误情况,还有就是注记与属性的一致性检查,这些图形的检查工作是保证面积计算正确的保证。面积计算之后还一定要进行检查,防止出现错误。
5应用实例
笔者在沧水浦碾子湖工程中用此程序对工程区域的房屋的占地面积和建筑面积进行了统计,并且取得了良好的效果,节约了人力、物力、财力,为工程的顺利开展提供了很好的帮助。
将4个程序文件(包括配置文件)复制到cad安装目录\support\*,依据cad版 本将acad2006doc.lsp文件名中得2006改为cad的版本,如acad2008doc.lsp,启动cad,界面上会增加一个“房屋面积统计系统”菜单项。执行菜单下的“图形预处理”命令,等处理完成后,检查图形,把标注出来的拓扑关系错误的地方改正。再执行菜单下“面积统计”命令,即可得到Excel的统计表格了,检查统计好的数据。
图3 预处理找出的错误房屋构面线
图4 统计结果
6结语
现在很多城市和地区都建立AUTOCAD图形(1:10000)的地图库,随着AUTOCAD和南方CASS的进一步普及,像这样的地图库会越来越丰富。所有,笔者相信此程序一定能在今后的建设用地管理、城乡规划、工程建设等方面发挥巨大的作用。
当然,此程序也还存在很多的不足,比如说:没有实现自动化修改的房屋构面线拓扑关系错误问题;没有考虑房屋的那些复杂的房屋附属影响房屋的建筑面积;此程序只适用于房屋构造简单的城镇和农村地区,不能处理复杂的建筑物等等。还希望广大的读者进一步改进此程序。
由于在测绘时每个人的习惯不同,测量的地形和测绘软件也千差万别,所以不管用哪一种方法计算出的面积都不一定是千真万确的,所以计算完成后一定要进行检查。
原创文章,作者:Editor,如若转载,请注明出处:https://www.diyilunwen.com/uncategorized/2010.html