一种高效的GNSS数据自动化下载方法的实现

2018-09-06 09:55王丞李磊张铭彬
全球定位系统 2018年3期
关键词:文件名测站网速

王丞,李磊,张铭彬

(1.江苏淮安水利勘测设计研究院有限公司,江苏 淮安 223005; 2.中国矿业大学 环境与测绘学院,江苏 徐州 221116)

0 引 言

Linux是一套开源的类UNIX操作系统,其具有支持多用户、多进程、多线程、实时性较好等优点[1-2]。正因为这些优点,国际上很多知名的GNSS数据处理软件基本上都是基于Linux开发,如GAMIT、Bernese、Panda等,因此许多IGS分析中心将Linux系统作为GNSS数据处理平台[3-7]。

目前国际上各大IGS分析中心,每天都需要使用大量的卫星跟踪站的观测数据,其中数据下载速度和完整性直接影响分析中心数据产品的解算精度和时效性。为了确保数据产品的解算精度和时效性,各个分析中心一般是采用提高网速、分站下载、优先测站下载、多台电脑同时下载的策略来确保数据下载的完整性和时效性。但采用提高网速和多台电脑同时下载这种策略显得不够灵活。针对这种情况本文对传统的数据下载方式进行了改进,改进的数据下载方式可在较短的时间内实现数据高效完整的下载。下面将具体介绍改进的数据下载方式程序实现。

1 常用的GNSS数据下载方法

1.1 IGS的数据归档

目前IGS数据中心有5个,分别是美国NASA戈达德空间飞行中心地壳动力学数据信息系统(CDDIS)、美国斯克里普斯海洋地理研究所(SIO)、法国国家地理研究所(IGN)、SOPAC以及中国的武汉大学(WHU)[8-9]。IGS数据中心存储的数据可谓是海量的,清晰的数据归档方式便于用户查找与下载数据[9-11]。IGS各种数据是按照一定的目录进行编排存储,不同的数据中心文件存储目录有一定的不同。下面以CDDIS数据中心为例介绍其数据归档方式,IGS数据归档方式如图1所示。图1中:wwww表示GPS周;yyyy表示年;doy表示年积日;yyn表示GPS导航文件夹;yyl表示GALILEO导航电文;yyo表示观测值文件;yyd表示的压缩的观测值文件,部分文件以及文件的命名规则在此不作具体的介绍。用户可根据需求从相应的路径下载相应文件,下面将具体介绍相应的下载程序。

1.2 mget数据下载方法

Linux系统mget数据下载方法需要ftp这个用来登陆服务器的命令的配合才能进行数据下载。以下载MGEX(Multi-GNSS Experiment)数据为例,其具体实现程序如下

01 set file_name=“”

02 foreach s (`cat $site_list`)

03 set file_name=($file_name $s$doy$chour[$ihour].$yy”o.Z”)

04 end

05 set LOCALPATH=/data/

06 set HOST=“cddis.gsfc.nasa.gov”

07 set USER=“anonymous”

08 set PASS=‘^M’

09 ftp —inv $HOST ≪EOF

10 user $USER $PASS

11 lcd $LOCALPATH

12 cd/gnss/data/campaign/mgex/hourly/rinex3/$yyyy/$doy/$hour/

13 mget $file_name

14 bye

15 EOF

使用mget进行下载数据时需要进行以下三步:

1) 首先将需要下载的文件名存储在一个数组中。如以上程序的03行,将需要下载的数据的文件名存储在file_name中;

2) 然后登陆远程的ftp,进入远程ftp数据存储的路径下。在登陆远程的服务器之前需要设置远程ftp的主机名、登陆的用户名以及用户密码,由于IGS数据中心的数据可以免费下载,可以使用”anonymous”匿名登录,登录密码’^M’(相当于“回车”的作用)。代码的09行就是用来登入远程的服务器,12行是进入远程ftp数据存储的路径;

3) 最后利用mget命令下载需要下载的数据。如以上程序的13行。

mget方法虽然可实现批量下载,但是其缺点是每次批量下载数不能超过50个,并且下载初始化过程中会花费很长的时间,因此mget下载方法效率并不是很高。以上介绍的是mget数据下载方法,接下来将介绍wget数据下载方法。

1.3 wget数据下载方法

wget数据下载方法相对mget命令的区别在于其每下载一次数据需要登陆一下对方的ftp。理论上下载效率不如mget,但是在实际测试过程中,其下载效率比mget好。wget的下载方法具体实现如下

path=/cddis.gsfc.nasa.gov/pub/gnss/data

set site_list=site_list_mgex

set chour=(a b c d e f g h i j k l m n o p q r s t u v w x)

set ihour=$hour+1

foreach s (`cat $site_list`)

wget ftp://$path/hourly/$yyyy/$doy/$hour/$s$doy$chour[$ihour].$yy"o.Z"

wget ftp://$path/hourly/$yyyy/$doy/$hour/$s$doy$chour[$ihour].$yy"l.Z"

wget ftp://$path/hourly/$yyyy/$doy/$hour/$s$doy$chour[$ihour].$yy"g.Z"

wget ftp://$path/hourly/$yyyy/$doy/$hour/$s$doy$chour[$ihour].$yy"n.Z"

end

其中:$path为多模GNSS数据下载路径;$yyyy、$doy、$hour分别为年、年积日、小时,均可以作为变量输入;$site_list为多模观测值数据的测站列表;以UTC时的2015年5月22日0时为例。其中$yyyy=2015、$doy=142、$hour=05;其中$site_list的部分列表如表1所示。

表1 2015-05-22的不同小时文件夹下多模观测值数据存储情况

由表1结果可以看出mgex数据每小时更新情况可分为三种:

1) 部分测站只更新观测值数据例如aira测站;

2) 部分测站既更新观测值数据也更新导航数据,但是在某一时段会不更新某一系统导航文件,例如dund测站;

3) 部分测站会在某一时段不更新数据,例如areg测站。

据统计mgex观测站有110多个,IGS观测站约460多个,按传统下载方式进行下载,将会出现大量无数据下载登陆的情况,这样会浪费大量下载时间。在20 Mbit/s网速下wget一次登陆与登出不进行数据下载大约需要2 s,假设按300次无数据下载登陆,那么至少浪费10 min下载时间。为了节约时间对现有的下载方式进行改进,下面将具体介绍改进的数据下载方式。

据统计mgex的观测站有110多个,IGS(International GNSS Service)的观测站约460多个,如果按照传统的下载方式进行下载,将会出现很多次的无数据下载登陆,这样会浪费大量的下载时间。在20 Mbit/s的网速下wget一次登陆和登出不进行数据下载大约需要2 s,假设按照300次的无数据下载的登陆,那么至少要浪费10 min的下载时间。在与下载高频的数据相比较其下载所要浪费的时间将会增加4倍。为了节约时间需要对现有的下载方式进行改进,下面将具体介绍改进的方式。

2 改进的数据下载方式

针对1.2节和1.3介绍的数据下载时出现的情况,作者提出新的数据下载方式。新的下载方式是,事先登陆对方的ftp然后获取存储路径下存在的数据的文件名,然后再利用wget进行下载,这样可避免无数据下载的登陆,大大节省了数据的下载时间。具体的程序实现如下:

01 set HOST=“cddis.gsfc.nasa.gov”

02 set USER=“anonymous”

03 set PASS=‘^M’

04 set LOCALPATH=/data/

05 set PATH=/gnss/data/campaign/mgex/hourly/rinex3

06 ftp —inv $HOST ≪EOF

07 user $USER $PASS

08 lcd $LOCALPATH

09 cd/$PATH/$yyyy/$doy/$hour/

10 ls/$PATH/$yyyy/$doy/$hour/$LOCALPATH> site_list.log

11 bye

12 EOF

13 awk `{print $9}` site_list.log> site_list

14 set path=/cddis.gsfc.nasa.gov/pub/gnss/data

15 foreach s (`cat $site_list`)

16 wget ftp://$path/hourly/$yyyy/$doy/$hour/$s

17 end

改进的数据下载方式需要进行三步:

1) 获取数据存储路径下的各个文件的详细信息。代码的01~03行设置目标ftp、登录的账号和密码,04~05设置本地的数据存储路径和ftp数据存储路径,代码的06~12行表示的是登陆并且登出ftp,其中09行表示进入ftp数据存储路径下的文件夹,10行就是获取mgex小时数据存储路径下的文件的详细信息,其信息存储在site_list.log文件中;

2) 从site_list.log文件中提取文件名信息。上面代码13行就是获取存储路径下存在的文件名信息。其存储方式如表1各个时间段存在的文件名一样;

3) 下载数据。代码15~17行就是利用wget下载site_list中存在的文件。

下面将介绍数据自动化下载实现方式,以及对比分析传统的下载方式与改进的下载方式的效率。

2.1 数据自动化下载

crontab命令允许指定Linux系统何时运行脚本[2,8,9,12]。自动化下载是通过Linux定时执行配置的数据下载脚本而实现的,及用户将定时所要执行的下载任务写在一个新的文件中,例如文件名为autorun:45 */1 * * */bin/csh/root/shell/sh_get_hourly>/root/log/sh_get_hourly.log 2>&1

该命令的时间“45 */1 * * *”为每年、每月、每天的每小时45分运行“sh_get_hourly”脚本。由于自动运行全部在后台,不会输出任何显示信息,因此 “>/root/log/sh_get_hourly.log 2>&1”表示的含义是将“sh_get_hourly”运行信息赋给一个sh_get_hourly.log日志文件,这样方便检查运行的状态及出现的错误。编辑好autorun这个定时任务文件后执行“crontab autorun”命令,将其加载到后台中,这样autorun中的定时任务会在指定的时间上运行。为了防止自动运行的脚本到了规定时间还没有结束而影响其他的进程,可以用“kill”命令将其强制结束。数据自动化下载流程如图2所示,其运行过程为

1) Linux,Crontab定时任务触发器,触发数据下载任务开始;

2) 运行get_data_list,脚本获取数据中心中存在的数据测站列表;

3) 调用下载数据脚本,如调用get_hourly_data脚本,获取数据中心小时数据文件;

4) 结束数据下载脚本运行。

2.2 数据下载效率对比

实验环境是: DELL T5810工作站,CentOS6.5linux系统平台,20 Mbit/s电信宽带网速。在以上实验条件下分别采用改进的数据下载方式和传统的数据下载方式下载高频观测值数据和小时观测值数据、比较其下载效率。

2.2.1 小时数据下载

选择下载年积日为132的 00时、12时、22时三个时段IGS的n、g、d和MGEX的n、l、g、d文件为例。比较分析改进的下载方式与传统的下载方式在下载小时数据方面的下载效率,具体实验结果如表2和表3所示。由实验结果可得,改进的数据下载方式下载IGS数据平均每小时可节约34 min,下载MGEX的数据平均每小时可节约17 min.

表2 不同小时的MGEX数据下载效率对比

表3 不同小时IGS数据下载效率对比

2.2.2 高频数据下载

选择下载年积日为132的 00时、12时、22时三个时段的IGS、MGEX高频的d文件为例,比较分析改进的下载方式与传统的下载方式在下载高频数据方面的下载效率。具体实验结果如表4和表5所示。由实验结果可得,改进的数据下载方式下载IGS数据平均每小时可节约80 min,下载MGEX的数据平均每小时可节约13 min.

表4 不同小时的高频IGS数据下载效率对比

表5 不同小时的高频MGEX数据下载效率对比

由实验结果可以看出,随着数据下载文件个数越多,改进的数据下载方式下载效率越明显。

3 结束语

本文是作者根据实际工作经验,发现原有的数据下载方式下载效率较低,为此改进了原有的数据下载方法。改进的数据下载方式的设计是在数据下载之前先获取数据存储路径下存在的数据文件名,然后再对其进行下载,这样可避免无数据的下载登陆与登出,有效地缩短下载数据的时间。

由表2~表4的对比结果可知改进的数据下载方式显得更加灵活,在数据量越大的情况下改进的数据下载方式的下载效率更高。

在实际应用过程中由于IGS数据出现延迟上传的情况,导致数据下载不完整,为了解决这一问题通过补下数据的方式来确保数据下载的完整性。本次实验未对IGMAS数据中心的数据进行下载实验,主要因为其数据中心在国内数据下载速度快,无需考虑数据下载效率问题。

猜你喜欢
文件名测站网速
WiFi室内定位测站布设优化的DOP数值分析
利用探空产品评估GNSS-PPP估计ZTD精度
美伊冲突中的GPS信号增强分析
英国网速快慢相差800倍
右键调用多重更名更方便
Excel轻松提取文件名
把我的秘密藏起来
网速太慢
基于VC++6.0的文件名批量转换