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