陳榮,謝光,陳慶華,徐擁國
(浙江有色測繪院,浙江紹興 312000)
基于Auto LISP技術(shù)實現(xiàn)房屋面積計算的二次檢核
陳榮?,謝光,陳慶華,徐擁國
(浙江有色測繪院,浙江紹興 312000)
房產(chǎn)測量中房屋面積的手工計算,是房屋面積二次檢核的一種有效手段,但也是較為繁重的一項工作。本文結(jié)合實例介紹在AutoCAD軟件平臺上,如何引入Auto LISP編程,簡化手工計算,實現(xiàn)可視、快速的房屋面積二次檢核的方法。
AutoLISP;房產(chǎn)測量;房屋面積;面積計算;二次檢核
房屋面積作為房地產(chǎn)權(quán)屬登記管理、開發(fā)交易等房地產(chǎn)活動緊密相關(guān)的基礎(chǔ)性數(shù)據(jù),其測算與檢核都需要有效的方法與嚴格的程序把控。房屋面積的測算,由于其復(fù)雜性與風(fēng)險性,原則上要求兩套房產(chǎn)測繪軟件獨立計算保證數(shù)據(jù)成果的正確性。在實際操作中,利用AutoCAD軟件進行房屋面積的手工計算,也是一種有效的檢核手段。但此項工作較為繁重,由于AutoCAD軟件原有的面積計算命令較為簡單,這造成實際操作中很多不便,特別是一些墻體不規(guī)則、結(jié)構(gòu)較復(fù)雜的房屋,如酒店、別墅、商住樓等,處理起來既費時又費力,也容易出錯。
借助AutoCAD繪圖軟件的開放性平臺,引入AutoLISP二次開發(fā)技術(shù),可以使AutoCAD軟件上房屋面積的手工計算二次檢核工作變得可視化、簡便化。利用AutoLISP編程,在AutoCAD軟件上可實現(xiàn)上空部位面積的扣除、陽臺半面積的計算、戶室全面積的計算、外半墻面積的自動生成,最后整幢房屋面積的統(tǒng)計一系列二次檢核工作。
2.1 基本框架和流程
本文結(jié)合浙江省紹興市一個公寓式酒店房屋面積統(tǒng)計的實例,介紹房屋面積檢核的這一程序的實現(xiàn)過程。
房屋面積的計算,一般在分層圖上進行,房屋內(nèi)有戶室、陽臺、上空部位等要素,CAD軟件無法直接對這些面積進行分辨及計算,所以首先應(yīng)該對這些面域按一定的規(guī)則進行屬性的賦加;另外一般分層圖繪制的是中軸圖,分層圖中每層的外半墻是不存在的,CAD軟件無法直接計算,必須先判別出每層的外半墻。所以程序的思路是先解決這兩步,然后完成每層房屋面積的計算和幢總面積的計算,最終完成房屋面積計算的二次檢核工作。程序的基本框架和流程如圖1所示。
圖1 基本框架和流程
2.2 面域?qū)傩缘妮斎?/p>
根據(jù)房屋面積計算的方式房屋面域一般分增加部分、扣除部分、減半部分三種,增加部分如戶室、樓梯等,扣除部分如上空部位,減半部分如不封閉的陽臺、無柱走廊等。子模塊按此三種方式對房屋面域進行屬性的賦加,使程序能通過相應(yīng)的操作進行面積的分類計算。
在CAD軟件中輸入命令“fcmj”,就可以調(diào)用程序,按命令行的提示依次給分層圖上所有面域進行屬性的賦加,圖上各面域自動按增加、扣除、減半三類完成面積的標注。實現(xiàn)界面如圖2所示。
圖2 面域?qū)傩暂斎虢缑?/p>
關(guān)鍵代碼如下:
(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 外半墻面積的計算
多數(shù)情況下房屋外墻的厚度整體統(tǒng)一,房屋分層圖中沒有繪制外框線,這種情況下手工計算外半墻面積將是一項繁瑣的工作,直接用CAD軟件的“bhatch”命令無法完成外邊線的繪制。在編程中我們用了" boundary"函數(shù),實現(xiàn)了自動尋找每層房屋的外框封閉范圍并完成外邊線的繪制。
一般的房屋測量外半墻存在兩種方式,一種是較常見的“外凸型”,另一種是回字形房屋的內(nèi)部,我們稱它為“內(nèi)凹型”。外半墻線的繪制在CAD操作中,常用“offset”命令,但此命令無法自動判斷是向外偏移還是向內(nèi)偏移,這是編程的一個難點。在編程中我們用了"offsetdist"函數(shù),再根據(jù)偏移面積的大小來辨別繪制的線是外凸型還是內(nèi)凹型的外半墻線,較好解決了這一問題。在操作中只要選擇外凸型或內(nèi)凹型,選中外邊線,并輸入外半墻厚度,就可以實現(xiàn)本層外半墻線的繪制并自動完成外半墻面積的計算。
當(dāng)本層所有面域都完成了屬性配賦后,按程序提示進行房屋外半墻的繪制,完成后會自動添加青色的外半墻線,并計算外半墻面積,實現(xiàn)界面如圖3所示。
圖3 外半墻面積計算界面
關(guān)鍵代碼如下:
(setq pt(getpoint"\n如房屋外墻中軸線未封閉請點擊外側(cè)..."))
(command"_.boundary""a""o""p"""pt"")
(setvar "cecolor""4")
(setq obj(entsel "\n選擇房屋外墻中軸線:"))
(entdel(entlast)) (while obj
(setq fbxsx(getstring"\n輸入外半墻屬性(1)外凸型(2)內(nèi)凹型<外凸型>:"))
(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 房屋面積的檢核
房屋面積的統(tǒng)計檢核,一般要考慮每層房屋面積的統(tǒng)計,還有考慮整幢房屋面積的統(tǒng)計,有時為檢查分析錯誤,也需要任意幾個面域或幾個層次的面積統(tǒng)計,這需要程序功能有這種開放性和靈活性。我們利用“ssget”選擇所有的面域數(shù)據(jù)集,讓程序自動分辨屬于需統(tǒng)計的那些數(shù)值,篩選選擇集中非房屋面域的數(shù)據(jù),對賦加了屬性的面域進行分類統(tǒng)計。程序運行后生成一個關(guān)于面積統(tǒng)計的信息框,包括增加面積的累計值、減半面積的累計值、扣除面積的累計值、外半墻的累計值,并自動完成房屋總面積的統(tǒng)計,如圖4所示。
關(guān)鍵代碼如下:
(princ"\n??選擇要統(tǒng)計的房屋面積數(shù)值??") (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 房屋面積統(tǒng)計界面
本程序通過實際應(yīng)用,又通過與WalkFloor房屋面積計算分攤系統(tǒng)、手工統(tǒng)計的計算成果相比較,計算值完全一致。
房屋面域?qū)傩缘馁x加、外半墻面積的計算以及面積統(tǒng)計命令的使用,三個步驟便能輕松完成房屋面積的自動統(tǒng)計實現(xiàn)房屋面積的二次檢核。三個部分既組成整體,又相互獨立,既可單獨計算一個戶室的套內(nèi)面積,也可檢核整幢房屋的總面積,這種獨立性使程序在涉及面積統(tǒng)計的其他領(lǐng)域也可適用,如土地分類面積的統(tǒng)計、竣工測量中房屋建筑占地面積和綠化面積的自動統(tǒng)計??梢钥吹降氖?,利用AutoLISP的二次開發(fā)技術(shù),使房屋面積的手工統(tǒng)計檢核工作從繁重中解放出來。
[1] GB/T 17986-2000.房產(chǎn)測量規(guī)范[S].
[2] 劉武.房地產(chǎn)測繪成果質(zhì)量檢查的實踐[J].測繪通報,2004(4).
[3] 龔子楨,花向紅,徐秀川等.在CAD平臺下實現(xiàn)房屋屬性自動修改的方法[J].測繪通報,2011(9).
[4] 趙文峰.利用AUTOLISP編程進行房產(chǎn)圖尺寸標注[J].測繪工程,2006(2).
[5] 湯峻.AutoCAD 2000高級應(yīng)用與Visual AutoLISP開發(fā)[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—),男,工程師,主要從事房產(chǎn)測繪和工程測量等技術(shù)工作。