吳曉峰 徐景欣 王大偉

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