張福利 李 奇 丁亞南
(河南省中緯測(cè)繪規(guī)劃信息工程有限公司,河南焦作 454000)
Trimble GPS&TGO(簡(jiǎn)稱TGO)是當(dāng)前測(cè)繪行業(yè)廣泛使用的GPS靜態(tài)數(shù)據(jù)處理軟件之一,可識(shí)別多種儀器導(dǎo)出的多個(gè)版本的RINEX文件,是多品牌GPS接收機(jī)聯(lián)合觀測(cè),聯(lián)合平差的首選軟件之一,由于軟件設(shè)定了基線解算的GPS周不能超過(guò)1 652,所以UTC時(shí)間2011年9月10日以后的數(shù)據(jù)TGO不再解算基線?;诖藸顩r,本文先對(duì)RINEX文件的組織結(jié)構(gòu)進(jìn)行分析,然后介紹VB.NET程序的設(shè)計(jì)思路和代碼的組織編寫(xiě),幫助測(cè)量工作者方便快捷的解決這一問(wèn)題。
RINEX 是“The Receiver Independent Exchange Format”(接收機(jī)通用數(shù)據(jù)交換格式)的縮寫(xiě),它已經(jīng)成為GPS測(cè)量和精密導(dǎo)航應(yīng)用等的標(biāo)準(zhǔn)交換和存儲(chǔ)格式文件。當(dāng)前的RINEX格式文件主要由4種文本文件所組成,分別為O:觀測(cè)數(shù)據(jù)文件;N:導(dǎo)航數(shù)據(jù)文件;M:氣象數(shù)據(jù)文件;G:GLONASS導(dǎo)航數(shù)據(jù)文件。一般我們使用的主要是O文件、N文件和G文件(本文對(duì)G文件不做論述),由于不同接收機(jī)配備的軟件有其獨(dú)自的RINEX格式轉(zhuǎn)換模塊,本文以中海達(dá)儀器的O文件及N文件為例,重點(diǎn)對(duì)文件中與時(shí)間記錄相關(guān)的信息進(jìn)行論述。
RINEX觀測(cè)數(shù)據(jù)文件由文件頭和數(shù)據(jù)區(qū)兩部分組成,文件頭的第1行用來(lái)標(biāo)識(shí)文件的類型和文件版本,文件頭的結(jié)尾以“END OF HEADER”字符串為標(biāo)識(shí),在文件的中部以帶“MARKER NAME”的字符行標(biāo)識(shí)GPS點(diǎn)號(hào),以“TIME OF FIRST OBS”字符行標(biāo)識(shí)GPS記錄的起始時(shí)間,以“TIME OF LAST OBS”字符行標(biāo)識(shí)GPS記錄的結(jié)束時(shí)間。
不同的GPS軟件導(dǎo)出的O文件頭行數(shù)并不固定,但使用項(xiàng)目的RINEX星歷數(shù)據(jù),生成GPS觀測(cè)時(shí)間區(qū)間的星歷數(shù)據(jù)所需的起止時(shí)間是不可缺少的,如圖1,圖2所示。
圖1 RINEX觀測(cè)值文件文件頭
RINEX導(dǎo)航文件也是由文件頭和數(shù)據(jù)區(qū)兩部分組成,通過(guò)文件頭的第1行來(lái)識(shí)別文件的類型和文件的版本,文件頭的結(jié)尾以“END OF HEADER”為標(biāo)識(shí)。在數(shù)據(jù)區(qū)每段數(shù)據(jù)的第1行前19個(gè)字符“03 10 9 2 6 0 0.0”記錄了衛(wèi)星的編號(hào)和記錄日期,第6行的第3列則記錄了GPS周數(shù),如圖3所示。
圖2 RINEX觀測(cè)值文件數(shù)據(jù)區(qū)
圖3RINEX導(dǎo)航文件
RINEX格式是純ASCII碼的文本文件非常便于用程序代碼操作,VB.NET集成了豐富的內(nèi)部函數(shù),如:DATEADD,DATEDIFF可以方便的對(duì)時(shí)間進(jìn)行換算,STRCOMP函數(shù)可以對(duì)兩個(gè)字符串進(jìn)行比較,REPLACE函數(shù)可對(duì)一個(gè)字符串內(nèi)的某個(gè)字符串進(jìn)行替換。對(duì)RINEX文件的修改主要就是時(shí)間字符串的替換,由于GPS周的起點(diǎn)為UTC時(shí)間的1980年1月6日,我們就可將2個(gè)文件的每個(gè)觀測(cè)值時(shí)標(biāo)更換為GPS周1 653之前的某n周,保持相同的星期幾;將2個(gè)文件的每個(gè)觀測(cè)值的UTC時(shí)間更換為某n周之前的UTC時(shí)間,保持相同的時(shí)刻,如2012年1月1日,是1 669周第1天(星期日),可將其更換為20周前的時(shí)間,即2011年8月14日,GPS周1 649周第1天(星期日)的數(shù)據(jù),對(duì)于O文件的修改如下:
1)將文件頭中記錄觀測(cè)數(shù)據(jù)的起止時(shí)間:
程序的界面設(shè)計(jì)如圖4所示,界面上的命令按鈕讀者可只添加“打開(kāi)RINEX文件”“保存文件夾”和“轉(zhuǎn)換”3個(gè)按鈕;添加的文本框控件用于輸入需提前的GPS周數(shù)量,添加的列表框控件用于顯示打開(kāi)的文件列表及文件轉(zhuǎn)換后的結(jié)果。
圖4 程序設(shè)計(jì)界面
1)“打開(kāi)RINEX文件”的代碼主要是對(duì)OpenFileDialog控件進(jìn)行瀏覽選擇文件的操作,當(dāng)設(shè)置OpenFileDialog.Multiselect=True時(shí)允許同時(shí)選中多個(gè)文件,當(dāng)設(shè)置文件類型過(guò)濾器OpenFile-Dialog.Filter=“標(biāo)準(zhǔn) RINEX 文件|* .OBS;* .??N;* .??O|所有文件(*.*)|*.*”時(shí),可以瀏覽帶通配符的多種擴(kuò)展名稱的文件。
2)“選擇保存文件夾”是引用FolderBrowserDialog控件在程序運(yùn)行時(shí)通過(guò)FolderBrowserDialog.SelectedPath方法獲取一個(gè)保存路徑,這些是VB的基礎(chǔ)操作,在此不再贅述。
3)UTC時(shí)間與GPS周的相互運(yùn)算。
要將UTC時(shí)間轉(zhuǎn)換為GPS周,首先要計(jì)算出GPS的UTC時(shí)間與GPS周起算的UTC時(shí)間的天數(shù)差;第二,以天數(shù)差為除數(shù),每個(gè)GPS周7天為被除數(shù),所求的整數(shù)即為GPS周數(shù),余數(shù)為GPS周當(dāng)中的第幾天(星期日為第1天)。在VBNET中DateDiff函數(shù)可以直接求得兩個(gè)時(shí)間的時(shí)間差,用MOD函數(shù)可求得兩個(gè)整數(shù)相除的余數(shù)。
代碼編寫(xiě)如下:
5)程序的運(yùn)行。
記錄靜態(tài)GPS網(wǎng)的RINEX文件比較多,程序代碼編寫(xiě)時(shí)盡量設(shè)計(jì)為循環(huán)模式。文中的示例程序在打開(kāi)文件時(shí)將選擇的多個(gè)RINEX文件的名稱和路徑添加到列表框控件中,代碼執(zhí)行時(shí)循環(huán)讀取列表中的每個(gè)文件,通過(guò)讀文件頭判斷文件的格式,依據(jù)文件格式提取存儲(chǔ)GPS記錄的UTC時(shí)間和GPS周的字符串格式,進(jìn)而用計(jì)算出的新時(shí)間字符替換舊時(shí)間字符,程序采用了順序文件的讀寫(xiě)方法,運(yùn)行速度理想,如圖5,圖6所示。
圖5 程序運(yùn)行界面
圖6TGO基線解算固定界面
限于篇幅,未能列出完整的程序代碼,但對(duì)于長(zhǎng)期從事測(cè)繪工程又有計(jì)算機(jī)基礎(chǔ)的人員,相信會(huì)有所獲,自行編寫(xiě)出各種各樣的RINEX文件修改器應(yīng)用到實(shí)際工作中,提高生產(chǎn)效率,節(jié)約資源投入。
[1]GB/T 18314-2009,全球定位系統(tǒng)(GPS)測(cè)量規(guī)范[S].
[2]曹祖圣.Visual Basic 2005完全開(kāi)發(fā)指南[M].北京:科學(xué)出版社,2007.
[3]徐紹銓.GPS測(cè)量原理及應(yīng)用[M].武漢:武漢大學(xué)出版社,2003.
[4]張 曜.Visual Basic函數(shù)實(shí)用手冊(cè)[M].北京:冶金工業(yè)出版社,2002.