曾泛林 , 洪 偉, 陳尚貴
(1.廣州市房地產測繪院,廣東 廣州 510030;2.廣東省國土資源測繪院,廣東 廣州 510500)
在進行GPS數據精密處理時,通常需要對GPS觀測數據進行質量檢核分析,根據分析結果對數據進行針對性的編輯和取舍,以提高數據處理的質量。數據質量檢核一般采用功能強大且簡單易用的GPS數據預處理軟件TEQC完成[1]。在TEQC檢核完成后通常采用第三方工具對結果進行圖形化顯示。目前普遍采用的圖形化軟件一類是DOS程序如QCVIEW、CF2PS等,需要以命令行方式操作,在Windows XP之后的版本中必須采用輔助工具如DosBox才能運行,輸出的圖形格式(Postscript)也必須使用專用軟件才能打開[2];另一類是Matlab程序如TEQCPlot等,則依賴Matlab平臺,需要使用者首先熟悉Matlab[3]。這2類軟件每次都只能讀入并顯示一個統計項,在對數據進行編輯之后需要頻繁地重新執行TEQC檢核和生成圖形,操作效率低。本文開發了基于AJAX技術的Web前端GPS數據質量檢核分析應用,可以很便利地在Web頁面提交數據,無需安裝任何軟件,也不依賴任何平臺即可在前端生成交互性極強的數據分析界面。一次讀取即可反復進行剔除衛星、時間軸開窗、單獨顯示某顆衛星數據等功能,具有很好的實用性。
質量檢核是TEQC最主要的功能,通過命令行方式進行。其基本原理是通過偽距和相位觀測量的線性組合計算出觀測量的多路徑效應、電離層延遲對相位的影響、電離層延遲的變化率以及接收機的鐘漂和周跳等[3]。
根據是否采用導航文件,TEQC分qc-lite和qcfull兩種模式進行檢核。qc-lite模式共生成7個結果文件,分別為匯總文件(*.??S)、 載波電離層延遲文件(*.ion)、電離層延遲變化率文件(*.iod)、 載波C/A碼或P碼偽距多路徑效應影響文件(*.mp1)、 載波 P碼偽距多路徑效應影響文件(*.mp2)、 載波信噪比文件(*.sn1)、 載波信噪比文件(*.sn2)等。對于qc-full方式,如果導航數據文件和觀測數據文件在同一目錄下,則TEQC會自動搜索導航數據文件,檢核的結果除了生成上面的7個文件以外,還有另外兩個數據文件:*.azi(方位角文件)、*.ele(高度角文件)[1]。所有統計項都以浮點數值表示。
TEQC統計結果文件的格式除匯總文件*.??S外,其他統計文件的格式都一致,類似RINEX文件分為頭部信息和數據信息,前幾行分別列出衛星編號、采樣間隔、開始時間(約化儒略日)等關鍵信息,從大約第5行開始記錄每次發生鎖星變化時鎖定的衛星數和衛星列表,再下一行為衛星列表中每個衛星在每個歷元的對應觀測值,以-1標識符結束該歷元。根據統計文件的格式,可以編寫程序讀取統計信息,以歷元為橫軸,統計值為縱軸,生成觀測值相對歷元的分布情況圖表,直觀地進行判斷。
開發分前端和后端2部分,前端開發主要采用AJAX技術。AJAX是一種“異步”的數據交互方式,對于較為頻繁的Web端操作以及與服務器端的數據傳輸,可以用最小的數據傳輸量和局部重載來減少響應時間。JSON是一種輕量級的數據交換格式,是Javascript的內置數據結構。由于占用空間小,解析速度快,已成為了使用AJAX技術開發時的首選方式[4]。本文采用jQuery作為前端開發框架,并采用功能強大的開源圖表庫Highcharts進行圖形開發。
服務器端的開發采用Nginx作為Web服務器,采用基于Python語言的Web框架Django以MVC(模型-視圖-控制器)方式進行開發。服務器端的開發主要是調用TEQC進行數據檢核統計,并根據統計結果的文件格式生成JSON格式文件供前端調用。
整個流程如下:Web前端上傳數據提交給服務器,服務器端調用TEQC進行數據質量分析統計,并生成JSON文件保存到網站下指定目錄,在Web前端發生jQuery的getJSON請求之后,JS加載該JSON文件并解析,解析結果傳遞給圖表庫Highcharts,在Web前端生成可見各單項統計結果的圖形,如圖1。在Web前端發生交互如禁用衛星、時間軸開窗等動作時,jQuery重新加載JSON數據并重新初始化Highcharts對象,刷新Web前端的圖表[5]。

圖1 總體流程圖
Web前端的交互過程為:
1)頁面載入時即加載jQuery,為改善用戶體驗,在初次載入頁面時默認加載某一統計項的JSON格式文件,初始化Highcharts對象;
2)點擊面板切換時根據面板內容采用getJSON方法加載對應的統計結果JSON格式文件;
3)解析JSON數據,獲取起始時間、觀測時長、采樣間隔、衛星列表、衛星列表中每顆衛星在每個歷元對應觀測值等數據;
4)給Highcharts對象賦值,更新Highcharts的div塊數據,頁面局部刷新;
5)發生禁用衛星、時間軸開窗等交互動作時重新加載JSON并初始化Highcharts對象數組。
服務器端采用Linux系統為平臺,Nginx為Web服務器提供靜態解析,基于Python語言的Django框架進行開發,uwsgi進行Python語言的解析。開發的重點是視圖(View),思路是在數據上傳完成時生成shell命令,調用Linux版本的TEQC對數據進行檢核。
在Django項目urls.py中增加視圖對應的URL,在上傳完成時跳轉該URL進行視圖函數調用[6]。
urlpatterns = patterns('',
url(r'teqc/', views.teqc),
……
在執行完成TEQC質量檢核后,使用Python語言的JSON模塊從統計結果文件中抓取相關數據并生成對應的JSON格式文件。JSON文件的格式如下所示:
{"svinfo": [ //衛星數據數組
{"sv": "05","epoch": [//衛星編號和從開始歷元起每個歷元對應的數值
{"v": "0.000","e": 0},{"v": "-0.227","e": 1}……
]}
"epochnumber": 604,//總歷元數
"interval": 10, //采樣間隔
"satslist": ["05","15","21","24","26","29","18","14","22","12"],//衛星列表
"starttime": [2013, 11, 30, 8, 53, 40]//起始時間
}
Web前端提交數據采用jQuery控件jQuery File Upload,該控件以XHR作為上傳方式,并且可以實現類似批量上傳、超大文件上傳、圖片預覽、拖拽上傳、上傳進度顯示、跨域上傳等功能,并可以通過CSS控制顯示樣式,可以制作美觀友好的上傳界面,如圖2。

圖2 上傳文件控件
jQuery中使用getJSON方法來調用并獲取遠程的JSON字符串,將其轉換為JSON對象。如果成功,則執行回調函數。getJSON方法將Javascript的AJAX方法進行封裝,不需要檢查瀏覽器和緩存,調用方便。方法定義為:
jQuery.getJSON( url, data, callback);[7]
設計目標是通過選項卡(tabs)切換來調用不同的JSON文件生成各個統計項結果,因此需要將各個統計項JSON格式文件與選項卡關聯起來。當鼠標點中某個選項卡時,獲取該選項卡對應的JSON文件名:
$j(".casting li").click(function(){
jsonname = $j(".casting.active").attr("id");
});
再將Class為casting li的選項卡綁定getJSON方法,當點擊選項卡時即根據jsonname讀取對應的JSON文件:
$j(".casting li").click(function(){
$j.getJSON("json/" + jsonname + '.js', function(json){
……
Highcharts是一款Javascript開源庫,提供數10種圖表類型以及豐富的組合選項,能輕易在Web前端生成美觀協調、功能完善的圖表。本文采用Spline類型的圖表,考慮到要實現的功能,主要設置如下:
1)橫軸xAxis選擇datetime類型以顯示時間軸,間隔pointInterval以ms為單位,將其設置為JSON文件中實際采樣間隔,歷元開始時間則是將JSON文件中的開始時間轉換成UTC時間。zoomType設置為”X”則開啟窗選放大功能,可實現時間軸開窗功能。
2)以TEQC統計項數值為縱軸yAxis賦值,根據選項卡ID選擇對應的數值單位。
3)plotOptions用于設置圖表中的數據點相關屬性,在圖表中存在多個數據列時,Highcharts提供了一個非常有用的設置項即showcheckbox,可以對每列數據產生一個checkbox,單擊可以顯示或隱藏該列數據,并實時刷新圖表,可用來實現禁用某顆衛星。
4)以JSON文件中的衛星列表大小確定Highcharts的options選項的數組數量options.series,按列表中對應衛星數據分別按歷元賦值,無數據的歷元賦值null,在完成賦值后調用$j('#teqcview).highcharts(options),立即生成圖表。
以圖2中提交的RINEX數據為例,首先對數據進行命令行方式的質量檢核,命令為:
teqc +qc G1723340.13o
從生成的匯總文件G1723340.13S中提取相關統計信息如下:觀測時長:1.678 h;采樣間隔:10 s;數據可用率:79%;L1多路徑影響值MP1:0.37;L2多路徑影響值MP2:0.57;歷元和周跳的比值O/Slip:64。
從統計信息中可見,該數據的MP2數值較大,而數據可用率較低。將數據在Web前端提交,服務器端調用TEQC進行統計后共生成8個JSON文件,在前端以選項卡的形式生成統計圖表,點中MP2選項卡,查看MP2統計結果,如圖3。

圖3 以選項卡形式顯示數據MP2統計結果
從圖3可以看到,有幾顆衛星的MP2值有比較大的波動。將鼠標移動到曲線上查看衛星編號和對應歷元的MP2數值,確定這幾顆衛星編號分別為05、14、29。另外在觀測時段最后一段大約從10:20起MP2值普遍較大,因此在圖表界面進行下面的操作:
1)在圖表下面勾掉S05、S14、S29三個checkbox,即剔除這三顆衛星的數據;
2)從觀測開始位置進行窗選,到X軸10:20位置結束。
執行完這兩步操作后圖表將進行AJAX方式刷新,刷新后的圖表即為剔除這三顆衛星并截除最后一段數據后的新的MP2圖表,如圖4。從該新圖表中可以看出總體均勻分布在零軸兩側,且沒有過大的數值。

圖4 剔除衛星并截取時段后MP2統計結果
此時重新使用TEQC命令行方式執行該編輯策略,命令為:
teqc–G05,14,29 –e20131130102000 G1723340.13o>G1723341.13o
再對新生成的觀測數據文件執行質量檢核,并與未編輯數據進行對比,對比結果如表1。

表1 編輯前和編輯后RINEX數據TEQC統計結果對比
從表1可以看出,MP1、MP2明顯降低,數據可用率也有了提高。使用附近3個CORS站數據作為起算點,采用GAMIT軟件對編輯前和編輯后兩個數據分別進行單點基線解算[8],結果見表2。

表2 編輯前和編輯后基線解算精度統計
從表2可以看出,經過編輯后基線解算結果各項精度指標都有所提高,驗證了經過圖形化的檢核分析后進行的數據編輯能夠有效提高解算質量。
通過實驗驗證,基于AJAX技術、使用開源jQuery控件如jQuery File Upload和Highcharts、結合前后端技術開發的GPS數據檢核分析應用,相對于常規的GPS數據質量分析方式,具有以下明顯優勢:
1)操作簡便,不依賴任何平臺和軟件,直接提交即可在Web頁面生成圖表;
2)一次性生成全部統計圖表,可以用選項卡的方式點擊切換,生成圖表清晰美觀,可全部或單獨顯示衛星的對應數值;
3)可直接在圖表上進行衛星剔除、時間軸開窗等操作,無需重新加載數據可刷新圖表,相比常規軟件,效率提高數倍;
4)圖片可直接另存為png/jpg/pdf/svg等常用格式,無需使用第3方工具。可先在圖表中進行操作以剔除較差的數據和時段,再以生成的圖形制定編輯策略使用TEQC進行編輯,以提高數據處理的效率和質量。
[1]范世杰,郭際明,彭秀英.TEQC在GPS數據預處理中的應用與分析[J].測繪信息與工程,2004,29(2):33-35
[2]趙紅強,郭際明,李宗華,等.繪圖工具QCVIEW在GPS數據預處理中的應用[J].測繪通報,2008(11):44-46,67
[3]賈寶媛,黃張裕,楊富春,等.基于Matlab的TEQC在GPS數據預處理中的應用[J].海洋測繪,2012,32(2):52-54
[4]欒紹鵬,朱長青.Ajax在WebGIS中的應用研究[J].測繪科學,2006,32(5):158-160
[5]王濤濤.基于AJAX技術的Web前端星歷預報方法與實現[J].地理空間信息,2013,11(5):52-54
[6]Forcier J, Bissex P, 徐旭銘.Django Web開發指南[M].北京:機械工業出版社,2009
[7]單東林,張曉菲,魏然.鋒利的jQuery[M].北京:人民郵電出版社,2009
[8]王志強,李軍.GAMIT使用指南[J].全球定位系統,2002(2):36-39