获取 IGS 数据的几种方法

解算 GNSS 观测数据时,经常需要下载一些由 IGS 等机构提供的数据。比如各卫星系统的广播星历、精密星历、IGS 跟踪站观测文件等等。

如果需要下载的数据不多,使用浏览器或资源管理器等访问 IGS 的 FTP 服务器,找到数据所在目录然后一个一个下载不是问题。但是如果重复性劳动过多,你肯定希望有更简单的方法。本文将以 Windows 和 Linux 操作系统为例,介绍从 IGS 服务下载所需数据的几种方式,希望能使部分读者摆脱一些数据准备的苦力工作。

Windows 操作系统

或许你早就已经注意到了,本站的 “下载” 页面提供了一个名为 “苦力怕” 的 IGS 数据下载程序。这是我之前编写的一个数据下载程序,支持微软 Windows 7 及以上的操作系统。如果你希望在 Windows Vista 及更早的操作系统中使用,需要首先安装 .NET 4.0 运行环境。

目前该程序特性有:

  • 支持设置 IGS 数据中心与登录邮箱;
  • 下载过程中有进度条提示;
  • 下载完成后自动解压。

程序支持的 IGS 数据中心:

  • 武汉大学 GNSS 中心;
  • 喷气推进实验室(JPL);
  • 斯克里普斯海洋研究所(SIO)。

目前支持的数据类型:

  • IGS 跟踪站观测数据(Compact RINEX);
  • GPS 广播星历数据(BRDC);
  • 精密星历(IGSF);
  • 精密钟差(CLK);
  • 电离层文件(ION);
  • 地球自传文件(ERP)。

我会对该程序进行不定期地更新。如果本程序缺少你需要的数据类型,你可以给我发送邮件简单地描述你需要地数据类型及其下载地址,我会考虑在下次更新该程序时将其加入。或者,你还有其他对该程序的修改建议等,也可以通过邮件跟我联系来共同改进此程序。

Linux 操作系统

对于 Linux 操作系统的用户,获取 IGS 数据的方式更多样。不仅有很多写好的脚本可用,你还可以使用脚本语言来 DIY 自己的数据下载脚本。这里介绍两种较简单的方式:使用 GAMIT/GLOBK 提供的脚本命令和自己编写数据下载脚本。

这两种方式都需要使用 FTP 客户端程序,所以最好事先安装它。对于 Debian、Ubuntu 等 Linux 发行版,安装命令为:

1
$ sudo apt-get install ftp

CentOS、Fedora 等发行版对应的命令为:

1
$ sudo yum install ftp

安装之后,你可以运行 ftp 命令测试一下。

使用 GAMIT 内置命令

GAMIT/GLOBK 程序提供了许多的数据下载脚本,这些脚本使用 C Shell 语言编写,位于其安装目录的 com/ 文件夹内。在 GAMIT10.6 中,包含的数据下载命令及其功能为:

  • sh_get_hfiles: 下载 IGS 网的 H-文件;
  • sh_get_ion: 下载电离层文件;
  • sh_get_met : 下载 IGS 站气象数据;
  • sh_get_nav: 下载广播星历文件;
  • sh_get_orbits: 下载精密星历;
  • sh_get_raw: 下载未处理过的原始数据;
  • sh_get_rinex: 下载 IGS 站观测数据;
  • sh_get_stinfo: 下载 IGS 站点的 station.info 文件。

这些命令的用法大同小异,而且在不输入参数运行命令时会显示帮助信息。限于篇幅,本文不逐个给出详细参数说明,只演示命令并说明运行效果。读者可自行查看帮助,非常简单。

获取 SOPAC 发布的 2016 年 9 月 12 日(年积日为 256)全球 IGS 网基线解算得到的 H-文件:

1
$ sh_get_hfiles -yr 2016 -d 256 -net igsall

运行命令后,等待程序运行完成,获取到 7 个全球 IGS 网数据处理文件:higs1a.16256.Z ~ higs7a.16256.Z。

获取 IGNI 发布的, 2016 年 5 月 7 日(年积日为 128)全球电离层数据:

1
$ sh_get_ion -yr 2016 -doy 128 -archive igni

等待程序运行完成,获得电离层文件:igsg1280.16i.Z。

获取 DAEJ 站自 2016 年 9 月 12 日起共两天的气象观测数据:

1
$ sh_get_met -yr 2016 -doy 256 -ndays 2 -sites daej

等待程序运行完成,获得气象数据:daej2560.16m,daej2570.16m。

获取由 CDDIS 发布的,2016 年 9 月 12 日 GPS 系统的广播星历数据:

1
$ sh_get_nav -archive cddis -yr 2016 -doy 256

等待程序运行完成,获得 GPS 系统的广播星历数据:brdc2560.16n.Z。如果你希望下载多系统的混合广播星历数据(brdm),可以为其添加一个 navdir navmgex 参数。

获取 2016 年 5 月 7 日的 GPS 精密星历数据:

1
$ sh_get_orbits -yr 2016 -doy 128

等待程序运行完成,获得精密星历数据:igs18956.sp3。

获取 GLONASS 系统的,2016 年 9 月 12 日的快速星历数据:

1
$ sh_get_orbits -yr 2016 -doy 256 -pre r -gnss R

等待程序运行完成,获得精密星历数据:igr19141.sp3。

获取 BJFS 和 WUHN 站点在 2016 年 9 月 12 日的观测数据:

1
$ sh_get_rinex -yr 2016 -doy 256 -sites bjfs wuhn

等待程序运行完成,获得观测数据:bjfs2560.16d.Z,wuhn2560.16d.Z。

获取包含所有 IGS 站点的最新 station.info 文件(供 GAMIT 程序使用):

1
$ sh_get_stinfo -format new

等待程序运行完成,获得新版本的最新 station.info 文件。

对于 sh_get_raw 命令,运行之后一直提示下载失败,所以暂时没有这个脚本的例子。

以上的脚本仅适用于少量的下载任务,下载大量数据时易出现假死。另外,对于以上所有的命令,都可以通过增加一个参数 -ftp_prog ncftp 将下载程序由 FTP 切换到 NCFTP,但此程序也需要额外安装。

编写数据下载脚本

如果上文提到的脚本命令尚不能满足你的需求,你可以尝试自己编写一个脚本,调用前文所安装的 FTP 程序进行下载。只要你知道目标 FTP 服务器的登录名、密码以及数据所在目录即可。这里以下载 Bernese 数据处理时常用的精密钟差文件为例。

我们知道:精密钟差文件可以在 CDDIS 提供的 FTP 服务器下载,该服务器支持匿名登录;精密钟差文件在 FTP 服务器上的路径为 “/pub/gps/products/” 目录内以 GPS 周命名的文件夹下。因此我们只需用户输入需要下载的文件所对应的 GPS 周以及周内天数。

新建一个文本文件,在其中加入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/csh
######## get IGS*****.CLK from cddis.gsfc.nasa.gov ########
echo -n "Input the GPS week(like: 1812): "
set gpsw = $<
echo -n "Input the day of week: "
set dow = $<
set clkname = igs${gpsw}${dow}.clk
echo "get $clkname from cddis.gsfc.nasa.gov ..."
echo "#################################################"
######## start file download ########
ftp -inv <<EOF
open cddis.gsfc.nasa.gov
user anonymous youremail@163.com
cd pub/gps/products/$gpsw/
mget ${clkname}.Z
quit
EOF

将该文件保存为 getclk.sh,为其添加可执行权限:

1
$ chmod +x getclk.sh

然后运行这个脚本:

1
$ getclk.sh

根据命令提示输入 GPS 周(如 1812)和周内天数(如 0),待脚本运行完成即可看到其工作成果。