曾泛林 , 洪 偉, 陳尚貴
(1.廣州市房地產(chǎn)測(cè)繪院,廣東 廣州 510030;2.廣東省國(guó)土資源測(cè)繪院,廣東 廣州 510500)
在進(jìn)行GPS數(shù)據(jù)精密處理時(shí),通常需要對(duì)GPS觀測(cè)數(shù)據(jù)進(jìn)行質(zhì)量檢核分析,根據(jù)分析結(jié)果對(duì)數(shù)據(jù)進(jìn)行針對(duì)性的編輯和取舍,以提高數(shù)據(jù)處理的質(zhì)量。數(shù)據(jù)質(zhì)量檢核一般采用功能強(qiáng)大且簡(jiǎn)單易用的GPS數(shù)據(jù)預(yù)處理軟件TEQC完成[1]。在TEQC檢核完成后通常采用第三方工具對(duì)結(jié)果進(jìn)行圖形化顯示。目前普遍采用的圖形化軟件一類是DOS程序如QCVIEW、CF2PS等,需要以命令行方式操作,在Windows XP之后的版本中必須采用輔助工具如DosBox才能運(yùn)行,輸出的圖形格式(Postscript)也必須使用專用軟件才能打開(kāi)[2];另一類是Matlab程序如TEQCPlot等,則依賴Matlab平臺(tái),需要使用者首先熟悉Matlab[3]。這2類軟件每次都只能讀入并顯示一個(gè)統(tǒng)計(jì)項(xiàng),在對(duì)數(shù)據(jù)進(jìn)行編輯之后需要頻繁地重新執(zhí)行TEQC檢核和生成圖形,操作效率低。本文開(kāi)發(fā)了基于AJAX技術(shù)的Web前端GPS數(shù)據(jù)質(zhì)量檢核分析應(yīng)用,可以很便利地在Web頁(yè)面提交數(shù)據(jù),無(wú)需安裝任何軟件,也不依賴任何平臺(tái)即可在前端生成交互性極強(qiáng)的數(shù)據(jù)分析界面。一次讀取即可反復(fù)進(jìn)行剔除衛(wèi)星、時(shí)間軸開(kāi)窗、單獨(dú)顯示某顆衛(wèi)星數(shù)據(jù)等功能,具有很好的實(shí)用性。
質(zhì)量檢核是TEQC最主要的功能,通過(guò)命令行方式進(jìn)行。其基本原理是通過(guò)偽距和相位觀測(cè)量的線性組合計(jì)算出觀測(cè)量的多路徑效應(yīng)、電離層延遲對(duì)相位的影響、電離層延遲的變化率以及接收機(jī)的鐘漂和周跳等[3]。
根據(jù)是否采用導(dǎo)航文件,TEQC分qc-lite和qcfull兩種模式進(jìn)行檢核。qc-lite模式共生成7個(gè)結(jié)果文件,分別為匯總文件(*.??S)、 載波電離層延遲文件(*.ion)、電離層延遲變化率文件(*.iod)、 載波C/A碼或P碼偽距多路徑效應(yīng)影響文件(*.mp1)、 載波 P碼偽距多路徑效應(yīng)影響文件(*.mp2)、 載波信噪比文件(*.sn1)、 載波信噪比文件(*.sn2)等。對(duì)于qc-full方式,如果導(dǎo)航數(shù)據(jù)文件和觀測(cè)數(shù)據(jù)文件在同一目錄下,則TEQC會(huì)自動(dòng)搜索導(dǎo)航數(shù)據(jù)文件,檢核的結(jié)果除了生成上面的7個(gè)文件以外,還有另外兩個(gè)數(shù)據(jù)文件:*.azi(方位角文件)、*.ele(高度角文件)[1]。所有統(tǒng)計(jì)項(xiàng)都以浮點(diǎn)數(shù)值表示。
TEQC統(tǒng)計(jì)結(jié)果文件的格式除匯總文件*.??S外,其他統(tǒng)計(jì)文件的格式都一致,類似RINEX文件分為頭部信息和數(shù)據(jù)信息,前幾行分別列出衛(wèi)星編號(hào)、采樣間隔、開(kāi)始時(shí)間(約化儒略日)等關(guān)鍵信息,從大約第5行開(kāi)始記錄每次發(fā)生鎖星變化時(shí)鎖定的衛(wèi)星數(shù)和衛(wèi)星列表,再下一行為衛(wèi)星列表中每個(gè)衛(wèi)星在每個(gè)歷元的對(duì)應(yīng)觀測(cè)值,以-1標(biāo)識(shí)符結(jié)束該歷元。根據(jù)統(tǒng)計(jì)文件的格式,可以編寫(xiě)程序讀取統(tǒng)計(jì)信息,以歷元為橫軸,統(tǒng)計(jì)值為縱軸,生成觀測(cè)值相對(duì)歷元的分布情況圖表,直觀地進(jìn)行判斷。
開(kāi)發(fā)分前端和后端2部分,前端開(kāi)發(fā)主要采用AJAX技術(shù)。AJAX是一種“異步”的數(shù)據(jù)交互方式,對(duì)于較為頻繁的Web端操作以及與服務(wù)器端的數(shù)據(jù)傳輸,可以用最小的數(shù)據(jù)傳輸量和局部重載來(lái)減少響應(yīng)時(shí)間。JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,是Javascript的內(nèi)置數(shù)據(jù)結(jié)構(gòu)。由于占用空間小,解析速度快,已成為了使用AJAX技術(shù)開(kāi)發(fā)時(shí)的首選方式[4]。本文采用jQuery作為前端開(kāi)發(fā)框架,并采用功能強(qiáng)大的開(kāi)源圖表庫(kù)Highcharts進(jìn)行圖形開(kāi)發(fā)。
服務(wù)器端的開(kāi)發(fā)采用Nginx作為Web服務(wù)器,采用基于Python語(yǔ)言的Web框架Django以MVC(模型-視圖-控制器)方式進(jìn)行開(kāi)發(fā)。服務(wù)器端的開(kāi)發(fā)主要是調(diào)用TEQC進(jìn)行數(shù)據(jù)檢核統(tǒng)計(jì),并根據(jù)統(tǒng)計(jì)結(jié)果的文件格式生成JSON格式文件供前端調(diào)用。
整個(gè)流程如下:Web前端上傳數(shù)據(jù)提交給服務(wù)器,服務(wù)器端調(diào)用TEQC進(jìn)行數(shù)據(jù)質(zhì)量分析統(tǒng)計(jì),并生成JSON文件保存到網(wǎng)站下指定目錄,在Web前端發(fā)生jQuery的getJSON請(qǐng)求之后,JS加載該JSON文件并解析,解析結(jié)果傳遞給圖表庫(kù)Highcharts,在Web前端生成可見(jiàn)各單項(xiàng)統(tǒng)計(jì)結(jié)果的圖形,如圖1。在Web前端發(fā)生交互如禁用衛(wèi)星、時(shí)間軸開(kāi)窗等動(dòng)作時(shí),jQuery重新加載JSON數(shù)據(jù)并重新初始化Highcharts對(duì)象,刷新Web前端的圖表[5]。
圖1 總體流程圖
Web前端的交互過(guò)程為:
1)頁(yè)面載入時(shí)即加載jQuery,為改善用戶體驗(yàn),在初次載入頁(yè)面時(shí)默認(rèn)加載某一統(tǒng)計(jì)項(xiàng)的JSON格式文件,初始化Highcharts對(duì)象;
2)點(diǎn)擊面板切換時(shí)根據(jù)面板內(nèi)容采用getJSON方法加載對(duì)應(yīng)的統(tǒng)計(jì)結(jié)果JSON格式文件;
3)解析JSON數(shù)據(jù),獲取起始時(shí)間、觀測(cè)時(shí)長(zhǎng)、采樣間隔、衛(wèi)星列表、衛(wèi)星列表中每顆衛(wèi)星在每個(gè)歷元對(duì)應(yīng)觀測(cè)值等數(shù)據(jù);
4)給Highcharts對(duì)象賦值,更新Highcharts的div塊數(shù)據(jù),頁(yè)面局部刷新;
5)發(fā)生禁用衛(wèi)星、時(shí)間軸開(kāi)窗等交互動(dòng)作時(shí)重新加載JSON并初始化Highcharts對(duì)象數(shù)組。
服務(wù)器端采用Linux系統(tǒng)為平臺(tái),Nginx為Web服務(wù)器提供靜態(tài)解析,基于Python語(yǔ)言的Django框架進(jìn)行開(kāi)發(fā),uwsgi進(jìn)行Python語(yǔ)言的解析。開(kāi)發(fā)的重點(diǎn)是視圖(View),思路是在數(shù)據(jù)上傳完成時(shí)生成shell命令,調(diào)用Linux版本的TEQC對(duì)數(shù)據(jù)進(jìn)行檢核。
在Django項(xiàng)目urls.py中增加視圖對(duì)應(yīng)的URL,在上傳完成時(shí)跳轉(zhuǎn)該URL進(jìn)行視圖函數(shù)調(diào)用[6]。
urlpatterns = patterns('',
url(r'teqc/', views.teqc),
……
在執(zhí)行完成TEQC質(zhì)量檢核后,使用Python語(yǔ)言的JSON模塊從統(tǒng)計(jì)結(jié)果文件中抓取相關(guān)數(shù)據(jù)并生成對(duì)應(yīng)的JSON格式文件。JSON文件的格式如下所示:
{"svinfo": [ //衛(wèi)星數(shù)據(jù)數(shù)組
{"sv": "05","epoch": [//衛(wèi)星編號(hào)和從開(kāi)始?xì)v元起每個(gè)歷元對(duì)應(yīng)的數(shù)值
{"v": "0.000","e": 0},{"v": "-0.227","e": 1}……
]}
"epochnumber": 604,//總歷元數(shù)
"interval": 10, //采樣間隔
"satslist": ["05","15","21","24","26","29","18","14","22","12"],//衛(wèi)星列表
"starttime": [2013, 11, 30, 8, 53, 40]//起始時(shí)間
}
Web前端提交數(shù)據(jù)采用jQuery控件jQuery File Upload,該控件以XHR作為上傳方式,并且可以實(shí)現(xiàn)類似批量上傳、超大文件上傳、圖片預(yù)覽、拖拽上傳、上傳進(jìn)度顯示、跨域上傳等功能,并可以通過(guò)CSS控制顯示樣式,可以制作美觀友好的上傳界面,如圖2。
圖2 上傳文件控件
jQuery中使用getJSON方法來(lái)調(diào)用并獲取遠(yuǎn)程的JSON字符串,將其轉(zhuǎn)換為JSON對(duì)象。如果成功,則執(zhí)行回調(diào)函數(shù)。getJSON方法將Javascript的AJAX方法進(jìn)行封裝,不需要檢查瀏覽器和緩存,調(diào)用方便。方法定義為:
jQuery.getJSON( url, data, callback);[7]
設(shè)計(jì)目標(biāo)是通過(guò)選項(xiàng)卡(tabs)切換來(lái)調(diào)用不同的JSON文件生成各個(gè)統(tǒng)計(jì)項(xiàng)結(jié)果,因此需要將各個(gè)統(tǒng)計(jì)項(xiàng)JSON格式文件與選項(xiàng)卡關(guān)聯(lián)起來(lái)。當(dāng)鼠標(biāo)點(diǎn)中某個(gè)選項(xiàng)卡時(shí),獲取該選項(xiàng)卡對(duì)應(yīng)的JSON文件名:
$j(".casting li").click(function(){
jsonname = $j(".casting.active").attr("id");
});
再將Class為casting li的選項(xiàng)卡綁定getJSON方法,當(dāng)點(diǎn)擊選項(xiàng)卡時(shí)即根據(jù)jsonname讀取對(duì)應(yīng)的JSON文件:
$j(".casting li").click(function(){
$j.getJSON("json/" + jsonname + '.js', function(json){
……
Highcharts是一款Javascript開(kāi)源庫(kù),提供數(shù)10種圖表類型以及豐富的組合選項(xiàng),能輕易在Web前端生成美觀協(xié)調(diào)、功能完善的圖表。本文采用Spline類型的圖表,考慮到要實(shí)現(xiàn)的功能,主要設(shè)置如下:
1)橫軸xAxis選擇datetime類型以顯示時(shí)間軸,間隔pointInterval以ms為單位,將其設(shè)置為JSON文件中實(shí)際采樣間隔,歷元開(kāi)始時(shí)間則是將JSON文件中的開(kāi)始時(shí)間轉(zhuǎn)換成UTC時(shí)間。zoomType設(shè)置為”X”則開(kāi)啟窗選放大功能,可實(shí)現(xiàn)時(shí)間軸開(kāi)窗功能。
2)以TEQC統(tǒng)計(jì)項(xiàng)數(shù)值為縱軸yAxis賦值,根據(jù)選項(xiàng)卡ID選擇對(duì)應(yīng)的數(shù)值單位。
3)plotOptions用于設(shè)置圖表中的數(shù)據(jù)點(diǎn)相關(guān)屬性,在圖表中存在多個(gè)數(shù)據(jù)列時(shí),Highcharts提供了一個(gè)非常有用的設(shè)置項(xiàng)即showcheckbox,可以對(duì)每列數(shù)據(jù)產(chǎn)生一個(gè)checkbox,單擊可以顯示或隱藏該列數(shù)據(jù),并實(shí)時(shí)刷新圖表,可用來(lái)實(shí)現(xiàn)禁用某顆衛(wèi)星。
4)以JSON文件中的衛(wèi)星列表大小確定Highcharts的options選項(xiàng)的數(shù)組數(shù)量options.series,按列表中對(duì)應(yīng)衛(wèi)星數(shù)據(jù)分別按歷元賦值,無(wú)數(shù)據(jù)的歷元賦值null,在完成賦值后調(diào)用$j('#teqcview).highcharts(options),立即生成圖表。
以圖2中提交的RINEX數(shù)據(jù)為例,首先對(duì)數(shù)據(jù)進(jìn)行命令行方式的質(zhì)量檢核,命令為:
teqc +qc G1723340.13o
從生成的匯總文件G1723340.13S中提取相關(guān)統(tǒng)計(jì)信息如下:觀測(cè)時(shí)長(zhǎng):1.678 h;采樣間隔:10 s;數(shù)據(jù)可用率:79%;L1多路徑影響值MP1:0.37;L2多路徑影響值MP2:0.57;歷元和周跳的比值O/Slip:64。
從統(tǒng)計(jì)信息中可見(jiàn),該數(shù)據(jù)的MP2數(shù)值較大,而數(shù)據(jù)可用率較低。將數(shù)據(jù)在Web前端提交,服務(wù)器端調(diào)用TEQC進(jìn)行統(tǒng)計(jì)后共生成8個(gè)JSON文件,在前端以選項(xiàng)卡的形式生成統(tǒng)計(jì)圖表,點(diǎn)中MP2選項(xiàng)卡,查看MP2統(tǒng)計(jì)結(jié)果,如圖3。
圖3 以選項(xiàng)卡形式顯示數(shù)據(jù)MP2統(tǒng)計(jì)結(jié)果
從圖3可以看到,有幾顆衛(wèi)星的MP2值有比較大的波動(dòng)。將鼠標(biāo)移動(dòng)到曲線上查看衛(wèi)星編號(hào)和對(duì)應(yīng)歷元的MP2數(shù)值,確定這幾顆衛(wèi)星編號(hào)分別為05、14、29。另外在觀測(cè)時(shí)段最后一段大約從10:20起MP2值普遍較大,因此在圖表界面進(jìn)行下面的操作:
1)在圖表下面勾掉S05、S14、S29三個(gè)checkbox,即剔除這三顆衛(wèi)星的數(shù)據(jù);
2)從觀測(cè)開(kāi)始位置進(jìn)行窗選,到X軸10:20位置結(jié)束。
執(zhí)行完這兩步操作后圖表將進(jìn)行AJAX方式刷新,刷新后的圖表即為剔除這三顆衛(wèi)星并截除最后一段數(shù)據(jù)后的新的MP2圖表,如圖4。從該新圖表中可以看出總體均勻分布在零軸兩側(cè),且沒(méi)有過(guò)大的數(shù)值。
圖4 剔除衛(wèi)星并截取時(shí)段后MP2統(tǒng)計(jì)結(jié)果
此時(shí)重新使用TEQC命令行方式執(zhí)行該編輯策略,命令為:
teqc–G05,14,29 –e20131130102000 G1723340.13o>G1723341.13o
再對(duì)新生成的觀測(cè)數(shù)據(jù)文件執(zhí)行質(zhì)量檢核,并與未編輯數(shù)據(jù)進(jìn)行對(duì)比,對(duì)比結(jié)果如表1。
表1 編輯前和編輯后RINEX數(shù)據(jù)TEQC統(tǒng)計(jì)結(jié)果對(duì)比
從表1可以看出,MP1、MP2明顯降低,數(shù)據(jù)可用率也有了提高。使用附近3個(gè)CORS站數(shù)據(jù)作為起算點(diǎn),采用GAMIT軟件對(duì)編輯前和編輯后兩個(gè)數(shù)據(jù)分別進(jìn)行單點(diǎn)基線解算[8],結(jié)果見(jiàn)表2。
表2 編輯前和編輯后基線解算精度統(tǒng)計(jì)
從表2可以看出,經(jīng)過(guò)編輯后基線解算結(jié)果各項(xiàng)精度指標(biāo)都有所提高,驗(yàn)證了經(jīng)過(guò)圖形化的檢核分析后進(jìn)行的數(shù)據(jù)編輯能夠有效提高解算質(zhì)量。
通過(guò)實(shí)驗(yàn)驗(yàn)證,基于AJAX技術(shù)、使用開(kāi)源jQuery控件如jQuery File Upload和Highcharts、結(jié)合前后端技術(shù)開(kāi)發(fā)的GPS數(shù)據(jù)檢核分析應(yīng)用,相對(duì)于常規(guī)的GPS數(shù)據(jù)質(zhì)量分析方式,具有以下明顯優(yōu)勢(shì):
1)操作簡(jiǎn)便,不依賴任何平臺(tái)和軟件,直接提交即可在Web頁(yè)面生成圖表;
2)一次性生成全部統(tǒng)計(jì)圖表,可以用選項(xiàng)卡的方式點(diǎn)擊切換,生成圖表清晰美觀,可全部或單獨(dú)顯示衛(wèi)星的對(duì)應(yīng)數(shù)值;
3)可直接在圖表上進(jìn)行衛(wèi)星剔除、時(shí)間軸開(kāi)窗等操作,無(wú)需重新加載數(shù)據(jù)可刷新圖表,相比常規(guī)軟件,效率提高數(shù)倍;
4)圖片可直接另存為png/jpg/pdf/svg等常用格式,無(wú)需使用第3方工具??上仍趫D表中進(jìn)行操作以剔除較差的數(shù)據(jù)和時(shí)段,再以生成的圖形制定編輯策略使用TEQC進(jìn)行編輯,以提高數(shù)據(jù)處理的效率和質(zhì)量。
[1]范世杰,郭際明,彭秀英.TEQC在GPS數(shù)據(jù)預(yù)處理中的應(yīng)用與分析[J].測(cè)繪信息與工程,2004,29(2):33-35
[2]趙紅強(qiáng),郭際明,李宗華,等.繪圖工具QCVIEW在GPS數(shù)據(jù)預(yù)處理中的應(yīng)用[J].測(cè)繪通報(bào),2008(11):44-46,67
[3]賈寶媛,黃張?jiān)?,楊富春,?基于Matlab的TEQC在GPS數(shù)據(jù)預(yù)處理中的應(yīng)用[J].海洋測(cè)繪,2012,32(2):52-54
[4]欒紹鵬,朱長(zhǎng)青.Ajax在WebGIS中的應(yīng)用研究[J].測(cè)繪科學(xué),2006,32(5):158-160
[5]王濤濤.基于AJAX技術(shù)的Web前端星歷預(yù)報(bào)方法與實(shí)現(xiàn)[J].地理空間信息,2013,11(5):52-54
[6]Forcier J, Bissex P, 徐旭銘.Django Web開(kāi)發(fā)指南[M].北京:機(jī)械工業(yè)出版社,2009
[7]單東林,張曉菲,魏然.鋒利的jQuery[M].北京:人民郵電出版社,2009
[8]王志強(qiáng),李軍.GAMIT使用指南[J].全球定位系統(tǒng),2002(2):36-39