曾泛林 , 洪 伟, 陈尚贵
(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