[ 作者簡(jiǎn)介:蒲生亮(1986 - ),男,助理工程師,主要從事水利水電工程測(cè)量,2009年畢業(yè)于武漢大學(xué),大學(xué)本科。]
(內(nèi)蒙古自治區(qū)水利水電勘測(cè)設(shè)計(jì)院,內(nèi)蒙古 呼和浩特 010020)
摘要: 常見(jiàn)的縱橫斷面數(shù)據(jù)處理方法主要從數(shù)據(jù)或格式著手,往往容易忽略了其“圖形”意義,本文嘗試從“圖形化”角度編寫(xiě)了基于VISUAL LISP 的縱橫斷面數(shù)據(jù)處理程序,可以應(yīng)用于各種縱橫斷面測(cè)量數(shù)據(jù)處理。
關(guān)鍵詞: 圖形化,縱橫斷面測(cè)量,數(shù)據(jù)處理,VISUAL LISP, AUTOCAD二次開(kāi)發(fā)
A Graphical Data Processing Method and Implementation of Vertical and Horizontal Cross-Section
PU Shengliang1
(Inner Mongolia Water Resources and Hydropower Survey and Design Institute,Inner Mongolia Hohhot 010020)
Abstract : The common methods of data processing of vertical and horizontal cross-section mainly started from data or format, often easy to overlook its "graphics" meaning, this paper attempts from the "graphical" point of view to write the vertical and horizontal cross-section of data processing program based on VISUAL LISP, can be applied to the kinds of vertical and horizontal cross-section measurement data processing.
Keywords: Graphical, Vertical And Horizontal Cross-Section Measurement, Data Processing, VISUAL LISP, AUTOCAD Secondary Development
引言
隨著GPS-RTK技術(shù)在測(cè)量工作中的廣泛應(yīng)用,傳統(tǒng)的測(cè)量手段得到了大程度地提升,以測(cè)點(diǎn)為主要方式的測(cè)繪任務(wù)面臨著“多文件”、“大體積”的數(shù)據(jù)整理及處理困境。雖然眾多斷面測(cè)量軟件大放異彩,可是各有其千秋,并且大多基于純程序設(shè)計(jì)語(yǔ)言的文本操作得以實(shí)現(xiàn),有的以“固定”格式的數(shù)據(jù)成圖為主,有的僅以本職工作出發(fā)編寫(xiě)而其他行業(yè)應(yīng)用有限或繁瑣,而且都有一個(gè)共同的特點(diǎn):無(wú)不使程序使用者容易陷于“文(件)山點(diǎn)?!保瑯O為不方便,且不得不犧牲了測(cè)點(diǎn)數(shù)據(jù)的可見(jiàn)性與直觀性,稍有特色者也不過(guò)參考點(diǎn)圖而已。正是基于以上思考,本文嘗試從點(diǎn)數(shù)據(jù)的圖形角度出發(fā),增加了縱橫斷面數(shù)據(jù)整理及處理過(guò)程的形象直觀性、簡(jiǎn)易性。
1 需求分析與功能設(shè)計(jì)
首先,我們必須知道“要解決的問(wèn)題是什么?”也即如何從測(cè)點(diǎn)源數(shù)據(jù)得到目標(biāo)數(shù)據(jù),從而生成測(cè)繪最終成果。其次,也要知道“是否有行得通的解決辦法?”也即采用何種編程方法,達(dá)到什么樣的功能效果,實(shí)現(xiàn)數(shù)據(jù)的轉(zhuǎn)化,因而本文選擇了AUTOCAD VISUAL LISP集成開(kāi)發(fā)環(huán)境作為程序編碼與測(cè)試工具。最后,要弄明白“怎樣具體實(shí)現(xiàn)?”也是程序開(kāi)發(fā)最關(guān)鍵的步驟,需要反復(fù)進(jìn)行模塊編碼、調(diào)試、精化與集成,從而實(shí)現(xiàn)程序編寫(xiě)所預(yù)期的各項(xiàng)功能。
圖表 1.1 E-R圖
(1)開(kāi)發(fā)目標(biāo)。如圖1.1 所示,我們要實(shí)現(xiàn)測(cè)量點(diǎn)的集合AI到成果元數(shù)據(jù)的集合BJ的轉(zhuǎn)化,I為源點(diǎn)數(shù)據(jù)的數(shù)目,J為目標(biāo)元數(shù)據(jù)的數(shù)目,也是眾多縱橫斷面數(shù)據(jù)處理程序的設(shè)計(jì)思路和目標(biāo),而我們要實(shí)現(xiàn)“圖形化”的目的,即要完成數(shù)據(jù)圖形化(DI)和圖形數(shù)據(jù)化(ID)兩個(gè)過(guò)程,其功能轉(zhuǎn)化過(guò)程如圖1.2 所示。
圖表 1.2 功能圖
(2)應(yīng)用范圍。從理論上講,可以實(shí)現(xiàn)縱橫斷面設(shè)計(jì)與成圖。在實(shí)際測(cè)量工作中可以應(yīng)用于渠道、河道縱橫斷面等相關(guān)數(shù)據(jù)成果的生產(chǎn)過(guò)程。
2 流程設(shè)計(jì)與編碼實(shí)現(xiàn)
(1)根據(jù)圖表 1.2 ,其功能所對(duì)應(yīng)的程序流程圖如圖表2.1 所示:
圖表 2.1 程序流程圖
(2)根據(jù)圖表 2.1 我們可以編寫(xiě)相關(guān)函數(shù),以實(shí)現(xiàn)功能,函數(shù)列表如下:
主程序單元 C:ZD () C:HD ()
縱斷面數(shù)據(jù)處理程序 橫斷面數(shù)據(jù)處理程序
一級(jí)調(diào)用單元 C:E2C() C:L2C ()
高程點(diǎn)生成數(shù)據(jù)文件 復(fù)合線輸出XY坐標(biāo)
二級(jí)調(diào)用單元 C:STRPARSE () C:L1R ()
字符串轉(zhuǎn)換為字符串列表 判斷點(diǎn)在直線上的位置
圖表 2.2 函數(shù)功能及其關(guān)系調(diào)用
(3)根據(jù)圖表2.2 我們可以得到其抽象數(shù)據(jù)類(lèi)型定義,如下所示:
ADT ZD_HD {
數(shù)據(jù)對(duì)象:C={AI,BI|AI為點(diǎn)數(shù)據(jù)集合;BI為元數(shù)據(jù)集合}
數(shù)據(jù)關(guān)系:R={
基本操作:
C:ZD (/ LSTS LSTZ B D Z C ZA ZZ S SA FF Z1 ZA1 ZZ1)
// 操作結(jié)果:返回一個(gè)非NIL值
C:HD (/ LSTS LSTZ P PP P1 FF STR B Z C ZA S SA ZZ ZN FLAG D)
// 操作結(jié)果:返回一個(gè)非NIL值
E2C (/ SN LSTS P1 P2 SS I SI PT Y X H)
// 操作結(jié)果:返回一個(gè)XYH點(diǎn)列表
L2C (/ PL ENTDATE A N LSTZ FIND KEY YY XX)
// 操作結(jié)果:返回一個(gè)XYH點(diǎn)列表
STRPARSE (STR DELIMITER / SEARCHSTR STRINGLEN RETURN N CHAR)
// 操作結(jié)果:返回一個(gè)子字符串列表
L1R (P1 P2 P3 / B C P)
// 操作結(jié)果:返回一個(gè)INT值,等于0時(shí)點(diǎn)在線上,大于0時(shí)點(diǎn)在線的左側(cè),小于0時(shí)點(diǎn)在線的右側(cè)。
} ADT ZD_HD
3 程序測(cè)試與成果生成
(1)打開(kāi)AUTOCAD,加入CASS環(huán)境,展繪點(diǎn)號(hào)和高程點(diǎn)。輸入命令A(yù)PPLOAD,選擇和加載文件“*.FAS/*.LSP/*.VLX”;若命令無(wú)效可重復(fù)加載。開(kāi)啟圓心和節(jié)點(diǎn)捕捉,從上游至下游(前進(jìn)方向)連接縱斷線,從前進(jìn)方向左端至右端連接橫斷線。輸入命令“ZD”,框選高程點(diǎn)(包含縱斷線),生成縱斷數(shù)據(jù)文件及成果圖。輸入命令“HD”,框選高程點(diǎn)(包含橫斷線),選擇(橫斷線),選擇中心樁和方向點(diǎn)(前進(jìn)方向),輸入中心樁號(hào),生成縱斷數(shù)據(jù)文件及成果圖。
(2)以某長(zhǎng)1KM縱橫斷測(cè)量項(xiàng)目所采集數(shù)據(jù)為實(shí)例,其原始數(shù)據(jù)格式為“點(diǎn)名,注釋?zhuān)瑬|坐標(biāo),北坐標(biāo),高程”,展繪后散點(diǎn)圖如3.1所示。目標(biāo)縱斷成果和橫斷成果格式為“距離,高程”,并生成橫斷面圖(以第一條為例,如圖3.2所示)和縱斷面圖(如圖3.3所示)。
圖表 3.1 測(cè)點(diǎn)數(shù)據(jù)散點(diǎn)圖
圖表 3.2 縱斷面成果圖
圖表 3.3 橫斷面成果圖
4 結(jié)語(yǔ)
(1)通過(guò)該程序的設(shè)計(jì)、編碼與測(cè)試,以及成果生成,取得了預(yù)期的結(jié)果,操作更加簡(jiǎn)便、尤其適合于電腦操作不太熟練的同志。
(2)通過(guò)斷面線的繪制,避免了多人協(xié)作測(cè)量數(shù)據(jù)凌亂無(wú)章的特點(diǎn),斷面點(diǎn)的選擇也更具靈活性,斷面數(shù)據(jù)的可靠性更高,出錯(cuò)率更低。
(3)LISP語(yǔ)言在人工智能方面有著稱(chēng)奇的優(yōu)勢(shì),雖然本程序在生產(chǎn)實(shí)踐中應(yīng)用尚可,但是仍立足于簡(jiǎn)單數(shù)據(jù)源、圖元素,本質(zhì)上還是文本操作處理,因而將來(lái)在數(shù)據(jù)處理智能化方面有著很大的空間,需要結(jié)合本職工作進(jìn)行更深一步的學(xué)習(xí)和研究。
參考文獻(xiàn):
[ 1 ] 閻聚群.AUTOCAD 2000 VISUAL LISP開(kāi)發(fā)[M ] .武漢:華中理工大學(xué)出版社, 2000.
[ 2 ] 孫江宏,丁立偉,米潔. VISUAL LISP編程與應(yīng)用[M]. 北京:科學(xué)出版社,1999.
[ 3 ] 郭劍峰,陳杉,王寧. 用VISUAL LISP開(kāi)發(fā)AUTOCAD 2000應(yīng)用程序[M]. 北京:人民郵電出版社, 2000.
[ 4 ] 魯玉甫. 用LISP程序擴(kuò)展AUTOCAD在測(cè)量上應(yīng)用[A]. 河南省土木建筑學(xué)會(huì)2009年學(xué)術(shù)大會(huì)論文集[C], 2009 .
[ 5 ] 陳馳原,劉占奎. VISUAL LISP編程在渠道縱斷面設(shè)計(jì)中的應(yīng)用[J]. 新疆水利, 2009, (02) .