陳榮,謝光,陳慶華,徐擁國
(浙江有色測繪院,浙江紹興 312000)
基于Auto LISP技術實現房屋面積計算的二次檢核
陳榮?,謝光,陳慶華,徐擁國
(浙江有色測繪院,浙江紹興 312000)
房產測量中房屋面積的手工計算,是房屋面積二次檢核的一種有效手段,但也是較為繁重的一項工作。本文結合實例介紹在AutoCAD軟件平臺上,如何引入Auto LISP編程,簡化手工計算,實現可視、快速的房屋面積二次檢核的方法。
AutoLISP;房產測量;房屋面積;面積計算;二次檢核
房屋面積作為房地產權屬登記管理、開發交易等房地產活動緊密相關的基礎性數據,其測算與檢核都需要有效的方法與嚴格的程序把控。房屋面積的測算,由于其復雜性與風險性,原則上要求兩套房產測繪軟件獨立計算保證數據成果的正確性。在實際操作中,利用AutoCAD軟件進行房屋面積的手工計算,也是一種有效的檢核手段。但此項工作較為繁重,由于AutoCAD軟件原有的面積計算命令較為簡單,這造成實際操作中很多不便,特別是一些墻體不規則、結構較復雜的房屋,如酒店、別墅、商住樓等,處理起來既費時又費力,也容易出錯。
借助AutoCAD繪圖軟件的開放性平臺,引入AutoLISP二次開發技術,可以使AutoCAD軟件上房屋面積的手工計算二次檢核工作變得可視化、簡便化。利用AutoLISP編程,在AutoCAD軟件上可實現上空部位面積的扣除、陽臺半面積的計算、戶室全面積的計算、外半墻面積的自動生成,最后整幢房屋面積的統計一系列二次檢核工作。
2.1 基本框架和流程
本文結合浙江省紹興市一個公寓式酒店房屋面積統計的實例,介紹房屋面積檢核的這一程序的實現過程。
房屋面積的計算,一般在分層圖上進行,房屋內有戶室、陽臺、上空部位等要素,CAD軟件無法直接對這些面積進行分辨及計算,所以首先應該對這些面域按一定的規則進行屬性的賦加;另外一般分層圖繪制的是中軸圖,分層圖中每層的外半墻是不存在的,CAD軟件無法直接計算,必須先判別出每層的外半墻。所以程序的思路是先解決這兩步,然后完成每層房屋面積的計算和幢總面積的計算,最終完成房屋面積計算的二次檢核工作。程序的基本框架和流程如圖1所示。

圖1 基本框架和流程
2.2 面域屬性的輸入
根據房屋面積計算的方式房屋面域一般分增加部分、扣除部分、減半部分三種,增加部分如戶室、樓梯等,扣除部分如上空部位,減半部分如不封閉的陽臺、無柱走廊等。子模塊按此三種方式對房屋面域進行屬性的賦加,使程序能通過相應的操作進行面積的分類計算。
在CAD軟件中輸入命令“fcmj”,就可以調用程序,按命令行的提示依次給分層圖上所有面域進行屬性的賦加,圖上各面域自動按增加、扣除、減半三類完成面積的標注。實現界面如圖2所示。

圖2 面域屬性輸入界面
關鍵代碼如下:
(setq pt(getpoint"\n選取中心點:"))
(setq xx 0 yy 0 zz 0 xyz 0 fabc 0)
(while pt
(setvar "cecolor""1")
(command"bpoly"pt"")
(setq en(entlast))
(if(/=en nil)
(progn
(command"area""o"en)
(setq aa(getvar"area"))
(redraw en 3)
(setq fwsx(getstring"\n輸入屬性(1)增加面積(2)減半面積(3)扣除面積<增加面積>:"))
(if(=fwsx"")(setq fwsx"1"))
(if(=fwsx"1")
(progn
(setq xx(+xx aa))
(setvar "cecolor""1")
(command"_Text""j""mc"pt 0.5 0(strcat" +"(rtos aa)))))
(if(=fwsx"2")
(progn
(setq yy(+yy(/aa 2)))
(setvar "cecolor""5")
(command"_Text""j""mc"pt 0.5 0 (strcat (rtos aa)"/2"))))
(if(=fwsx"3")
(progn
(setq zz(+zz aa))
(setvar "cecolor""3")
(command"_Text""j""mc"pt 0.5 0(strcat" -"(rtos aa)))))
2.3 外半墻面積的計算
多數情況下房屋外墻的厚度整體統一,房屋分層圖中沒有繪制外框線,這種情況下手工計算外半墻面積將是一項繁瑣的工作,直接用CAD軟件的“bhatch”命令無法完成外邊線的繪制。在編程中我們用了" boundary"函數,實現了自動尋找每層房屋的外框封閉范圍并完成外邊線的繪制。
一般的房屋測量外半墻存在兩種方式,一種是較常見的“外凸型”,另一種是回字形房屋的內部,我們稱它為“內凹型”。外半墻線的繪制在CAD操作中,常用“offset”命令,但此命令無法自動判斷是向外偏移還是向內偏移,這是編程的一個難點。在編程中我們用了"offsetdist"函數,再根據偏移面積的大小來辨別繪制的線是外凸型還是內凹型的外半墻線,較好解決了這一問題。在操作中只要選擇外凸型或內凹型,選中外邊線,并輸入外半墻厚度,就可以實現本層外半墻線的繪制并自動完成外半墻面積的計算。
當本層所有面域都完成了屬性配賦后,按程序提示進行房屋外半墻的繪制,完成后會自動添加青色的外半墻線,并計算外半墻面積,實現界面如圖3所示。

圖3 外半墻面積計算界面
關鍵代碼如下:
(setq pt(getpoint"\n如房屋外墻中軸線未封閉請點擊外側..."))
(command"_.boundary""a""o""p"""pt"")
(setvar "cecolor""4")
(setq obj(entsel "\n選擇房屋外墻中軸線:"))
(entdel(entlast)) (while obj
(setq fbxsx(getstring"\n輸入外半墻屬性(1)外凸型(2)內凹型<外凸型>:"))
(if(=fbxsx"")(setq fbxsx"1"))
(command"_.area""o"obj)
(setq faa(getvar"area"))
(setq cm(getvar"cmdecho")of 0.12) (if(null(setq nf(getdist(strcat"\n輸入房屋半墻寬:<" (rtos of 2 2)">"))))
(setq nf of))
(setvar"cmdecho"0)
(setvar"offsetdist"nf)
(vl-load-com)
(setq obj(vlax-ename->vla-object(car obj)))
(vla-offset obj nf)
(setq en(entlast))
(command"_.area""o"en)
(setq fbb(getvar"area"))
(command"_.change"en"""p""c""4""lt""x6" "")
(if(>fbb faa)
(progn
(setq fab(-fbb faa))
(if(=fbxsx"2")(entdel en))))
(if(<fbb faa)
(progn
(setq fac(-faa fbb))
(if(=fbxsx"1")(entdel en))))
(vla-offset obj(?nf-1))
(setq en(entlast))
2.4 房屋面積的檢核
房屋面積的統計檢核,一般要考慮每層房屋面積的統計,還有考慮整幢房屋面積的統計,有時為檢查分析錯誤,也需要任意幾個面域或幾個層次的面積統計,這需要程序功能有這種開放性和靈活性。我們利用“ssget”選擇所有的面域數據集,讓程序自動分辨屬于需統計的那些數值,篩選選擇集中非房屋面域的數據,對賦加了屬性的面域進行分類統計。程序運行后生成一個關于面積統計的信息框,包括增加面積的累計值、減半面積的累計值、扣除面積的累計值、外半墻的累計值,并自動完成房屋總面積的統計,如圖4所示。
關鍵代碼如下:
(princ"\n??選擇要統計的房屋面積數值??") (setq ent(ssget))
(setq n(sslength ent))
(setq i0)
(initget5)
(repeat n
(setq x(ssname ent i))
(setq el(entget x))
(setq i(+1 i))
(setq txt(dxf 0 el))
(if(=txt"TEXT")
(progn
(setq txt(dxf 1 el))
(setq txtgs(strlen txt))
(if(=(substr txt1 1)"+")
(progn
(setq txt(substr txt 2))
(setq xx(+(atof txt)xx))))
(if(=(substr txt1 1)"-")
(progn
(setq txt(substr txt 2))
(setq zz(+zz(atof txt)))))
(if(=(substr txt(-txtgs 1))"/2")
(progn
(setq txt(substr txt 1(-txtgs 2)))
(setq yy(+(/(atof txt)2)yy))))
(if(=(substr txt 1 2)"外")
(progn
(setq txt(substr txt 3))
(setq fab(+(atof txt)fab)))))))
(setq xyz(-(+xx yy fab)zz))

圖4 房屋面積統計界面
本程序通過實際應用,又通過與WalkFloor房屋面積計算分攤系統、手工統計的計算成果相比較,計算值完全一致。
房屋面域屬性的賦加、外半墻面積的計算以及面積統計命令的使用,三個步驟便能輕松完成房屋面積的自動統計實現房屋面積的二次檢核。三個部分既組成整體,又相互獨立,既可單獨計算一個戶室的套內面積,也可檢核整幢房屋的總面積,這種獨立性使程序在涉及面積統計的其他領域也可適用,如土地分類面積的統計、竣工測量中房屋建筑占地面積和綠化面積的自動統計。可以看到的是,利用AutoLISP的二次開發技術,使房屋面積的手工統計檢核工作從繁重中解放出來。
[1] GB/T 17986-2000.房產測量規范[S].
[2] 劉武.房地產測繪成果質量檢查的實踐[J].測繪通報,2004(4).
[3] 龔子楨,花向紅,徐秀川等.在CAD平臺下實現房屋屬性自動修改的方法[J].測繪通報,2011(9).
[4] 趙文峰.利用AUTOLISP編程進行房產圖尺寸標注[J].測繪工程,2006(2).
[5] 湯峻.AutoCAD 2000高級應用與Visual AutoLISP開發[M].北京:人民郵電出版社,2001.
Second Check of Calculation of Property Area by Auto LISP
Chen Rong,Xie Guang,Chen Qinghua,Xu Yongguo
(Zhejiang Colored Surveying and Mapping Institute,Shaoxing 312000,China)
Manual computation is an effectivemeasure for double-checking floor space in house property surveying,but also a heavy one.This paper demonstrates the way to simplify themanual computation by introducing Auto LISP on the AutoCAD platform along with some examples,so as to rapidly double-check floor space and visualize the process at the same time.
AutoLISP;house property surveying;floor space;house size;double check
1672-8262(2013)02-136-04
P209
B
2012—07—23
陳榮(1971—),男,工程師,主要從事房產測繪和工程測量等技術工作。