田 甜 龍北平
(江西省煤田地質(zhì)局測繪大隊(duì) 江西南昌 330001)
AUTOLISP語言在權(quán)籍調(diào)查項(xiàng)目中的應(yīng)用
田甜龍北平
(江西省煤田地質(zhì)局測繪大隊(duì)江西南昌330001)
摘要:結(jié)合實(shí)踐經(jīng)驗(yàn),提出使用AUTOLISP語言來有效解決權(quán)籍?dāng)?shù)據(jù)處理的一些難題,通過介紹AUTOLISP語言在權(quán)籍調(diào)查項(xiàng)目中2個(gè)程序應(yīng)用實(shí)例,說明在實(shí)際工作中可大大提高生產(chǎn)效率。
關(guān)鍵詞:權(quán)籍調(diào)查;AUTOLISP語言
當(dāng)前,眾多的權(quán)籍類調(diào)查項(xiàng)目正在全國開展,比如三權(quán)調(diào)查項(xiàng)目、農(nóng)村土地承包經(jīng)營權(quán)調(diào)查項(xiàng)目、農(nóng)房普查項(xiàng)目等。在使用基于AUTOCAD軟件平臺(tái)開發(fā)的南方CASS軟件處理內(nèi)業(yè)時(shí)出現(xiàn),該軟件雖已具備權(quán)籍?dāng)?shù)據(jù)處理的一些功能,但這些功能不能完全滿足當(dāng)前正在開展的各類權(quán)籍調(diào)查項(xiàng)目,特別是有些信息系統(tǒng)建庫軟件還沒有確定,但是調(diào)查項(xiàng)目又必須進(jìn)行,此時(shí)如果可以應(yīng)用AUTOCAD軟件內(nèi)嵌式編程語言AUTOLISP,通過編制程序,來解決權(quán)籍?dāng)?shù)據(jù)處理的一些重復(fù)性工作,就顯得很有必要。
熟練掌握AUTOLISP語言的編程環(huán)境、方法和技巧,就可以對(duì)AUTOCAD進(jìn)行二次開發(fā)。編程和調(diào)用的基本步驟:(1)、針對(duì)要解決的操作問題,用文本編輯器編寫*.lsp程序;(2)、使用AUTOCAD軟件平臺(tái)“加載AUTOLISP”菜單加載*.lsp程序;(3)、以編寫程序中設(shè)置好的命令,像使用AUTOCAD標(biāo)準(zhǔn)命令一樣,輸入軟件平臺(tái)的命令行,以完成特定的操作。
3.1運(yùn)用AUTOLISP語言提取界址點(diǎn)坐標(biāo)
在宗地勘測定界、農(nóng)房普查等項(xiàng)目中,界址點(diǎn)通常就是宗地勘測邊界、房屋邊界等封閉圖形的節(jié)點(diǎn)。假定使用南方CASS軟件,則首先需要畫出權(quán)屬線再生成界址點(diǎn)坐標(biāo)表,最后將界址點(diǎn)坐標(biāo)排版格式轉(zhuǎn)換為需要的格式,這樣使得工作復(fù)雜化,如果能夠使用一個(gè)命令,直接提取界址點(diǎn)坐標(biāo),并按項(xiàng)目成果提交格式輸出界址點(diǎn)坐標(biāo),則可以提高工作效率。
1)編寫AUTOLISP程序“tj”,主要代碼如下:
(defunc:tj()
(princ)
(setqename(ssname(ssget)0));;取圖元名
(setq$acdName1(cdr(assoc0(entget ename))))
(if(wcmatch$acdName1"LWPOLYLINE,AcD-bPolyline");判斷是否多段線
(setq$temp-nameename)
(setq$temp-namenil)
);_結(jié)束if,
(setqOutPutFormat(getint"輸入文件格式:(1)測量成果表格式 (2)MySMTool計(jì)算格式[1]:"))
(if(=OutPutFormatnil)
(setqOutPutFormat1)
);if
;定義擴(kuò)展名
(if(=OutPutFormat1)
(setqExtendName"csv")
)
(if(=OutPutFormat2)
(setqExtendName"dat")
)
(if$temp-name
(progn
(setqpllist(Getlist2$temp-name))
;;調(diào)用子程序取多段線頂點(diǎn)坐標(biāo)
(initget4)
(setqnum(getint"請(qǐng)輸入小數(shù)位數(shù):[3]"))
(if(=numnil)
(setqnum3)
)
(setqfilename
(getfiled"選擇文件存儲(chǔ)目錄""界址點(diǎn)坐標(biāo)"ExtendName5)
)
(iffilename
(progn
(plout:OutFilepllistfilename(itoanum)OutPutFormat)
(setqmessage(strcat" 輸出至文件:"filename))
(princ)
(princmessage)
))))
2)編制好程序代碼后,在AUTOCAD中工具一欄中點(diǎn)擊AUTOLISP,加載程序“tj”,確定加載后,只需要在CAD命令行中鍵入“tj”,便可選擇自己所需輸出文件的格式,如下圖1:
按照命令框提示輸入完成后,就可按照預(yù)先設(shè)置好的格式直接輸出界址點(diǎn)坐標(biāo)表,如下圖2:
3.2AUTOLISP語言在地塊公示圖中的應(yīng)用
公示信息,即指確認(rèn)物權(quán)設(shè)立、變動(dòng)的依據(jù)(如:登記數(shù)據(jù))。公示圖的存在就是為了讓他人清楚地知道誰是權(quán)利人,以維護(hù)權(quán)利人、與交易有關(guān)的人的合法權(quán)益。在各個(gè)權(quán)籍調(diào)查項(xiàng)目中,都可以看到公示圖的身影,因此,公示圖的制作自然顯得格外重要。
例如在林權(quán)調(diào)查或土地承包經(jīng)營權(quán)調(diào)查等項(xiàng)目的公示圖制作中,公示圖中不僅要清楚的表示地塊的四至,更要在圖上標(biāo)明權(quán)利人信息,宗地號(hào)、面積等信息。既要做到公示圖既清晰明了,又內(nèi)容具體。在原有的南方CASS軟件中,是無法將這些信息直接都通過現(xiàn)有的命令一步到位標(biāo)注到公示地塊中,特別是有不少公示的圖件要求以 “畝”為單位來注記。
為了使制作公示圖步驟簡化,使公示圖更加規(guī)范,可以利用AUTOLISP語言來解決這個(gè)問題。主要核心程序代碼如下:
(1);計(jì)算多段線構(gòu)成的封閉面面積,并換算成畝。
(setqent1(ssname(ssget)0))
(setqpoint_list(Getlist2ent1))
(setqpoint_num(lengthpoint_list))
(setqcounter0)
(setqpl_area0)
(repeat(-point_num1)
(progn
(setqx1(car(nthcounterpoint_list)))
(setqy1(cadr(nthcounterpoint_list)))
(setqcounter(+counter1))
(setqx2(car(nthcounterpoint_list)))
(setqy2(cadr(nthcounterpoint_list)))
(setqpl_area(+pl_area(-(*x1y2)(*y1 x2))))
);progn
);repeat
(setqpl_area(abs(*pl_area0.5)))
(setqpl_area_M(*pl_area0.0015))
(setqpl_area(rtospl_area21))
(setqpl_area_M_str(rtospl_area_M22))
(2)宗地編號(hào),可以通過創(chuàng)建宗地編號(hào)文件,也可以當(dāng)場輸入編號(hào)。下面程序含有下個(gè)宗地自動(dòng)編號(hào)加1的功能。權(quán)利人信息讀取和輸入也可以參照這個(gè)方法進(jìn)行編程。
鑒于篇幅問題,附主要代碼如下:
;在指定路徑創(chuàng)建臨時(shí)文件宗地編號(hào).txt
(setqIsFile(open(strcatWorkSpace"宗地編號(hào).txt")"r"))
(if(=IsFilenil)
(progn
(setqfp(open(strcatWorkSpace"宗地編號(hào). txt")"w"))
(write-line"010001"fp)
(closefp)
);progn
()
);if
;從臨時(shí)文檔處獲取當(dāng)前宗地編號(hào)
(setqfp(open(strcatWorkSpace"宗地編號(hào). txt")"r"))
(setqzd_Num(read-linefp))
(if(=zd_Numnil)(setqzd_Num"010001")())
(setqzd_NumMsg(strcat"當(dāng)前宗地編號(hào)為:" zd_Num",其后宗地將以此為基礎(chǔ)順次+1進(jìn)行編號(hào)。 "))
(princzd_NumMsg)
(setqIsRealNum1)
(princ"是否使用該編號(hào)?")
(princ"(1)是(2)重新編號(hào)[1]:")
(setqIsRealNum(getreal))
(if(=IsRealNum2)
(progn
(closefp)
(setqfp(open(strcatWorkSpace"宗地編號(hào). txt")"w"))
(setqzd_Num(getstring"輸入新的起始編號(hào):"))
(write-linezd_Num)
(closefp)
(setqzd_NumMsg(strcat"當(dāng)前宗地編號(hào)為:" zd_Num",其后宗地將以此為基礎(chǔ)順次+1進(jìn)行編號(hào)。 "))
);progn
(closefp)
);if
(princzd_NumMsg)
同上述,只需在AUTOCAD中加載編寫的總程序后在命令行中鍵入總程序設(shè)置好的命令名,則可按照指示就可輕松的將此復(fù)雜性的問題簡單化,實(shí)現(xiàn)一步到位。如下圖3:
其實(shí)權(quán)籍調(diào)查項(xiàng)目還有很多復(fù)雜性高、重復(fù)性高的內(nèi)業(yè)操作,比如:根據(jù)不同項(xiàng)目需求,輸出不同規(guī)定格式的地塊圖和報(bào)表,輸出特定的圖框和參數(shù),或者調(diào)入EXCEL文本數(shù)據(jù)讀入到地塊屬性等,如果通過AUTOLISP語言編程的方法予以輔助,便可使AUTOCAD平臺(tái)的權(quán)籍調(diào)查數(shù)據(jù)處理工作真正達(dá)到高效、快捷的效果。結(jié)合實(shí)踐經(jīng)驗(yàn),本文只通過兩實(shí)例簡要說明了AUTOLISP語言在權(quán)籍調(diào)查項(xiàng)目中的運(yùn)用,對(duì)于AUTOLISP語言其強(qiáng)大功能也有待更深的研究與探討。
參考文獻(xiàn):
[1]藍(lán)屹生.AUTOLISP學(xué)習(xí)導(dǎo)引[M].北京:中國鐵道出版社,2003.
[2]郭朝勇等.《AUTOCAD的定制與開發(fā)》人民郵電出版社,1998.9
[3]梁雪春等.AutoCAD二次開發(fā)技術(shù)指南[M].北京:清華大學(xué)出版社,2001
[4]TDT1001—2012.地籍調(diào)查規(guī)程[s]
[5]NY/T2537—2014.農(nóng)村土地承包經(jīng)營權(quán)調(diào)查規(guī)程[s]