吳曉峰 徐景欣 王大偉
摘 要:隨著現(xiàn)代電子測(cè)量技術(shù)日新月異的發(fā)展,Topcon全站儀以其較高的性?xún)r(jià)比被廣泛用于測(cè)繪行業(yè),操作簡(jiǎn)單易學(xué),數(shù)據(jù)結(jié)構(gòu)科學(xué)合理。由Borland公司推出的Delphi是全新的可視化編程環(huán)境,為我們提供了一種方便、快捷的Windows應(yīng)用程序開(kāi)發(fā)工具,它使用了Microsoft Windows圖形用戶(hù)界面的許多先進(jìn)特性和設(shè)計(jì)思想,采用了彈性可重復(fù)利用的完整的面向?qū)ο蟪绦蛘Z(yǔ)言、當(dāng)今世界上最快的編譯器、最為領(lǐng)先的數(shù)據(jù)庫(kù)技術(shù)。該文結(jié)合Topcon測(cè)圖數(shù)據(jù),利用Delphi實(shí)現(xiàn)了數(shù)據(jù)下載、預(yù)處理、展點(diǎn)一系列方法。
關(guān)鍵詞:Topcon 數(shù)據(jù)格式 展點(diǎn) Delphi 測(cè)繪
中圖分類(lèi)號(hào):TP3 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1674-098X(2016)06(b)-0082-03
1 Topcon數(shù)據(jù)存儲(chǔ)格式
拓普康內(nèi)存中的數(shù)據(jù)分測(cè)量坐標(biāo)數(shù)據(jù)文件和坐標(biāo)數(shù)據(jù)文件,前者是數(shù)據(jù)采集模式下生成的文件,在儀器中用“M”標(biāo)識(shí);后者是為放樣模式準(zhǔn)備的坐標(biāo)文件,在儀器中用“C”標(biāo)識(shí)。對(duì)兩者數(shù)據(jù)下載后進(jìn)行分析,測(cè)量數(shù)據(jù)所記錄的信息是完整的測(cè)量信息,反映的是測(cè)量的過(guò)程與采集成果,而坐標(biāo)數(shù)據(jù)文件相對(duì)簡(jiǎn)單,是點(diǎn)的坐標(biāo)記錄集合。以下分別截取一個(gè)測(cè)量數(shù)據(jù)和坐標(biāo)數(shù)據(jù)片斷,“//”后為注釋。
JOB Z08010, //數(shù)據(jù)采集文件名
INST GTS-330 Ver.3.30 //儀器型號(hào)、內(nèi)置系統(tǒng)版本
UNITS M,D //單位,此處為米、度
STN T44,0.000, //測(cè)站標(biāo)識(shí) 測(cè)站點(diǎn)號(hào) 儀器高
XYZ 504882.246,3803796.484,0.000 //測(cè)站坐標(biāo)標(biāo)識(shí) 測(cè)站點(diǎn)N、E、Z值
BS T45,0.000 //后視標(biāo)識(shí) 后視點(diǎn)號(hào) 棱鏡高
XYZ 504888.430,3803837.337,-1.992 //后視坐標(biāo)標(biāo)識(shí) 后視點(diǎn)N、E、Z值
SS 1,0.000,F(xiàn)W //前視測(cè)點(diǎn)標(biāo)識(shí) 前視點(diǎn)號(hào) 棱鏡高 測(cè)點(diǎn)標(biāo)識(shí)碼
XYZ 504853.177,3803776.161,1.469 //前視坐標(biāo)標(biāo)識(shí) 前視測(cè)點(diǎn)N、E、Z值
SS 2,0.000,L
XYZ 504854.387,3803776.077,1.864
……
1,1125.057,1122.351,50.413,L //前視點(diǎn)號(hào) 前視測(cè)點(diǎn)N、E、Z值,測(cè)點(diǎn)標(biāo)識(shí)碼
2,1132.123,1126.359,50.744,F(xiàn)W
……
2 數(shù)據(jù)下載
配合全站儀使用的下載工具一般由廠家提供,比如拓普康的T_COM軟件,但這種軟件輸出的數(shù)據(jù)格式是由軟件提供者控制的,在操作與使用環(huán)節(jié)上用戶(hù)難以根據(jù)自己的需要靈活定制。在Delphi開(kāi)發(fā)平臺(tái)上,數(shù)據(jù)下載功能可以借助Spcomm控件實(shí)現(xiàn),與數(shù)據(jù)通信相關(guān)的幾個(gè)重要屬性:端口CommName、波特率BaudRate、數(shù)據(jù)位ByteSize、奇偶位ParityCheck、停止位StopBits,這些屬性既可以在程序設(shè)計(jì)過(guò)程中指定,也可以在程序運(yùn)行期間指定。
電腦與儀器通信參數(shù)要保持一致。通過(guò)激發(fā)數(shù)據(jù)下載動(dòng)作,執(zhí)行事件
procedure
TfrmDataChg.Comm1ReceiveData(Sender:Tobject;Buffer:Pointer;Buffer Length: Word);
var
s: string;
begin
SetLength(s, BufferLength);
Move(Buffer^, pchar(s)^, BufferLength);
memo1.Lines.Add(s);
end;
下載的數(shù)據(jù)是可識(shí)別ASSIC格式,顯示在Memo1控件中,可以進(jìn)一步保存或處理。
3 數(shù)據(jù)預(yù)處理
在對(duì)數(shù)據(jù)文件格式及各組成部分含義明確理解的情況下,使用高級(jí)程序語(yǔ)言進(jìn)行數(shù)據(jù)文件信息的提取、分離、處理。該文利用Delphi對(duì)數(shù)據(jù)進(jìn)行讀取與處理。
3.1 算法設(shè)計(jì)
程序的主要算法是:打開(kāi)測(cè)量數(shù)據(jù)文件,逐行讀取數(shù)據(jù)行,查找標(biāo)識(shí)“XYZ”行并定位,以其為參照向前一行定位,查找行首標(biāo)識(shí)“STN、BS、SS”并判斷該行性質(zhì),對(duì)本行進(jìn)行信息分離、提取。
3.2 程序?qū)崿F(xiàn)
(1)文件的打開(kāi),利用Delphi中的OpenDialog控件。
If OpenDialog1.Execute then filename:=OpenDialog1.FileName;
(2)逐行讀取數(shù)據(jù)文件,使用語(yǔ)句Readln(file,LineStr),同時(shí)創(chuàng)建Tstringlist對(duì)象,用于保存讀入的數(shù)據(jù)行,每讀一行,stringlist自動(dòng)加一。
(3)設(shè)計(jì)循環(huán)變量i,查找“XYZ”,使用語(yǔ)句If Pos('XYZ',Strings[i])>0來(lái)判斷,如果為真值表示找到坐標(biāo)數(shù)據(jù)行,分離坐標(biāo)與編碼。
(4)向前定位至Strings[i-1],使用語(yǔ)句If Pos('STN',Strings[i-1])>0 來(lái)判斷是否為測(cè)站,使用語(yǔ)句If Pos('BS',Strings[i-1])>0 來(lái)判斷是否為后視定向點(diǎn),使用語(yǔ)句If Pos('SS',Strings[i-1])>0來(lái)判斷是否為前視點(diǎn),確定本行性質(zhì)后對(duì)元素進(jìn)行分離、提取。
(5)將(3)、(4)分離出來(lái)的信息進(jìn)行拼裝,形成坐標(biāo)記錄。
4 CAD展點(diǎn)
通過(guò)前面的工作,已經(jīng)完成了從原始數(shù)據(jù)到整理后的帶編碼坐標(biāo)數(shù)據(jù),下面介紹利用Delphi將坐標(biāo)數(shù)據(jù)展點(diǎn)到CAD文件中。CAD展點(diǎn)的實(shí)質(zhì)是向CAD模型空間輸入文本或插入塊。Delphi是借助Com技術(shù)實(shí)現(xiàn)的,使用CreateOleObject將啟動(dòng)AutoCad,然后以O(shè)le方式對(duì)AutoCad進(jìn)行控制。具體步驟如下:
(1)在Delphi中定義Ole變量。
var
obj_Acad,obj_ModelSpace,obj_ActiveDoc,Ole_point,obj_lays,obj_lay,obj_TestStyle,obj_TextStyles,obj_txt,obj_blk,obj_att: OleVariant;
(2)創(chuàng)建Ole對(duì)象。
obj_Acad:=CreateOleObject('AutoCad.Application');
(3)取得當(dāng)前文檔與模型空間。
obj_ActiveDoc:= obj_acad.activedocument;
obj_ModelSpace:=obj_ActiveDoc.ModelSpace;
(4)創(chuàng)建圖層并置為活動(dòng)圖層。
obj_lays:=obj_activedoc.layers;
obj_lay:=obj_lays.add('points');
obj_activedoc.activelayer:=obj_lay;
(5)定義輸入文本樣式。
obj_TextStyles:=obj_ActiveDoc.TextStyles;
obj_TestStyle:=obj_TextStyles.Add('SBD');
obj_TestStyle.FontFile:='txt.shx';
obj_TestStyle.width:='0.8';
obj_ActiveDoc.activeTextStyle:=obj_TestStyle;
(6)定義插入點(diǎn),獲取坐標(biāo)。
Ole_point:=VarArrayCreate([0,2],VT_R8);
Ole_point[0]:=py;Ole_point[1]:=px;Ole_point[2]:=pz;
(7)插入文本,完成展點(diǎn)。
txt:=pno+pcode; //點(diǎn)名與編碼
obj_txt:=obj_ModelSpace.AddText(txt,VarArrayRef(Ole_Point),edit4.Text );
obj_txt.color:=clrindex;
(8)對(duì)所有坐標(biāo)點(diǎn)進(jìn)行循環(huán)。
特別注意的是,拓普康下載數(shù)據(jù)會(huì)有“舍棄”大數(shù)的模式,比如點(diǎn)128,3572191.473,509150.692,-1.474,ZL,下載的結(jié)果可能是128,72191.473,9150.692,-1.474,ZL,這時(shí)要通過(guò)程序X加3500000Y加500000進(jìn)行修正。
5 結(jié)語(yǔ)
拓普康全站儀操作簡(jiǎn)單,精度可靠,記錄方便,對(duì)其數(shù)據(jù)格式的理解有助于后續(xù)的數(shù)據(jù)處理工作。該文介紹了一種實(shí)用的數(shù)據(jù)讀取算法并依據(jù)此算法進(jìn)行程序化,同時(shí)針對(duì)生產(chǎn)中經(jīng)常進(jìn)行CAD展點(diǎn),介紹了如何用CAD外部語(yǔ)言實(shí)現(xiàn)的方法。
參考文獻(xiàn)
[1] 李向東,劉學(xué)杰,伍順運(yùn).Topcon全站儀內(nèi)存在測(cè)繪中的應(yīng)用[J].北京測(cè)繪,2003(1):37-39.
[2] 田春來(lái),邢煒光,邢衛(wèi)民,等.全站儀數(shù)據(jù)格式轉(zhuǎn)換程序的設(shè)計(jì)與實(shí)現(xiàn)[J].測(cè)繪通報(bào),2008(9):67-69.
[3] 趙晉睿,蘇宗躍.拓普康GTS-600型全站儀原始數(shù)據(jù)的處理[J].甘肅科技,2009,25(8):28,49-50.
[4] 張永林,杜軍和.VisualBasic編寫(xiě)拓普康通訊程序[J].城市勘測(cè),2006(6):26-28.