RINEX 与 Compact RINEX 格式的转换

RINEX 格式和 Compact RINEX(CRINEX,即 RINEX D-文件)格式都是常用的 GNSS 观测数据保存格式,说到这两个数据格式之间的转换,你首先想到的可能是 rnx2crxcrx2rnx 两个程序。不错,本文将介绍这两个程序的使用方法,但不仅仅是这两个程序。实际上,你还能从本文了解更多其他的扩展方法。

RNXCMP 程序包

RNXCMP 简介

提起 RNXCMP 程序包可能会觉得有些陌生,但它就包括本文开头提到的 crx2rnxrnx2crx 等程序。除了这两个常见的程序外,该程序包还包含两个脚本 crz2rnxrnx2crz。其中,rnx2crz 将 RINEX 格式转换为 Compact RINEX 后,进一步将其压缩为 .Z 文件格式,而 crz2rnx 是其逆向操作。

环境配置

RNXCMP 程序提供适用于 Windows、UNIX、Linux 等常见操作系统的版本。访问 RNXCMP 程序包的官方下载地址需要科学上网,但源代码已在 Github 网站开源。本站的下载页面亦提供适用于 Windows、Linux 以及苹果 macOS 操作系统的最新程序包(V4.0.7)。

Windows 操作系统

对于 Windows 操作系统,下载程序包后,使用 cd 命令进入程序所在文件夹,运行 crx2rnx 或程序包中任何一个程序文件名即可看到提示。如果你不想每次使用前都进行文件夹跳转操作,可以为其配置环境变量,或直接将其中所含的可执行文件转移至 “C:\Windows\System32” 文件夹内。

UNIX/Linux 操作系统

对于 UNIX 或 Linux 系统,下载适用的程序包后,需首先为其添加可执行权限:

1
2
3
4
$ chmod +x crx2rnx
$ chmod +x crz2rnx
$ chmod +x rnx2crx
$ chmod +x rnx2crz

然后于程序包所在目录中键入其中任何一个程序名,即可使用其对应的功能。

你很可能希望在任何目录中都能直接使用该程序包,此时可以将其中包含的 4 个程序移动至 “/usr/bin” 文件夹。这样就可以在任何目录下的随时调用了。

参数说明与示例

crx2rnx 与 rnx2crx

crx2rnxrnx2crx 程序的参数是一致的(被方括号包裹的内容表示该参数是可选的):

1
2
$ crx2rnx [-] [-f] [-h] <file>
$ rnx2crx [-] [-f] [-h] <file>

参数释义:

  • -:该参数指定将内容输出到标准输出;
  • -f:该参数表示强制覆盖已有的同名文件;
  • -h:用于显示帮助信息;
  • <file>:表示要处理的文件名。

示例,由 bjfs0010.16o 得到 bjfs0010.16d。若文件夹内已有名为 bjfs0010.16d 的文件,将询问是否覆盖:

1
$ rnx2crx bjfs0010.16o

由 bjfs0010.16d 得到 bjfs0010.16o。若文件夹内已有名为 bjfs0010.16o 的文件,直接覆盖(该选项在编写批量处理脚本时特别有用):

1
$ crx2rnx -f bjfs0010.16d

处理 RINEX 3 格式的文件,得到 MAO000USA_S_20170010000_01D_30S_MO.rnx:

1
$ crx2rnx MAO000USA_S_20160010000_01D_30S_MO.crx

crz2rnx 与 rnx2crz

文首已提到,rnx2crz 程序可以将 RINEX 观测文件转换为 Compact RINEX 后,进一步压缩为 .Z 格式,而 crz2rnx 可实现该过程的逆向操作。它们接收的参数也是一致的:

1
2
$ crz2rnx [-c] [-d] [-f] [-h] <file>
$ rnx2crz [-c] [-d] [-f] [-h] <file>

参数释义:

  • -c 将转换后的文件输出到当前文件夹;
  • -d 转换成功后删除源文件;
  • -f 强制覆盖已有的同名文件;
  • -h 用于显示帮助信息;
  • <file> 参数表示要处理的文件名。

示例,由 chan0010.16d.Z 得到 chan0010.16o,保留源文件,若文件夹内已有名为 chan0010.16o 的文件,直接覆盖:

1
$ crz2rnx -f chan0010.16d.Z

由 chan0010.16o 得到 chan0010.16d.Z,并且转换成功后删除源文件:

1
$ rnx2crz -d chan0010.16o

处理 RINEX 3 格式的文件,得到 MAO000USA_S_20160010000_01D_30S_MO.crx.Z:

1
$ rnx2crz MAO000USA_S_20160010000_01D_30S_MO.rnx

使用 GAMIT/GLOBK 内置脚本

你或许不知道,GAMIT/GLOBK 软件中自带了将 RINEX 格式、Compact RINEX 格式以及 .Z 压缩文件格式之间互相转换的命令。这两个命令分别是 sh_rnx2crxsh_crx2rnx。如果你正在使用 GAMIT/GLOBK,了解它们的用法将给你带来许多便利。它们封装了 RNXCMP,以实现对观测文件的批量操作。

两个命令接受的参数是一致的:

1
2
$ sh_rnx2crx -d <y/n> -c <y/n> -f <files>
$ sh_crx2rnx -d <y/n> -c <y/n> -f <files>

参数释义:

  • -d <y/n> 参数指定转换后是否删除原始数据(默认为 yes);
  • -c <y/n> 参数指定是否在转换前/后对其进行解压/压缩(压缩格式为 *.Z,默认为 yes);
  • <files> 代表要处理的文件名,可使用通配符指定。

示例,由 bjfs0010.15o 得到 bjfs0010.15d.Z,原有的 bjfs0010.15o 被删除:

1
$ sh_rnx2crx -c y -d y -f bjfs0010.15o

由 bjfs0010.15o 得到 bjfs0010.15d,原有的 bjfs0010.15o 被删除:

1
$ sh_rnx2crx -c n -d y -f bjfs0010.15o

由 bjfs0010.15d.Z 得到 bjfs0010.15o,原有的 bjfs0010.15d.Z 被保留:

1
sh_crx2rnx -c y -d n -f bjfs0010.15d.Z

由 bjfs0010.15d 得到 bjfs0010.15o,原有的 bjfs0010.15d 被删除:

1
sh_crx2rnx -f bjfs0010.15d

值得一提的是,尽管这两个脚本已经能够处理 RINEX 3 格式的观测数据,但尚不支持该格式的标准文件名。因此,使用这两个脚本处理 RINEX 3 格式的观测数据时,你需要首先使用 sh_rename_rinex3 命令将待处理的文件重命名为 RINEX 2 格式的文件名。sh_rename_rinex3 的详细介绍请参考 GAMIT 的 RINEX 3 文件重命名脚本

使用 Pinot 中的脚本

如果你浏览过本网站的许多页面,你会发现 Pinot 亦存在两个脚本:crnx2rnx.py 和 rnx2crnx.py。实际上,它们也是对 RNXCMP 程序包的封装:借助于 Python 语言的跨平台特性,实现对 RINEX 观测数据的批量处理。相比 GAMIT/GLOBK 内置的脚本,它们具有以下特点:

  • 适用于 Windows、UNIX/Linux 等操作系统;
  • 选择要处理的文件时更灵活(支持多个通配符);
  • 支持 RINEX 2 和 RINEX 3 格式的文件和文件名;
  • 多线程并行处理,某些情况下(配置足够高)可能更快;
  • 处理过程中有进度条显示。

如果你希望详细了解这两个脚本,可以移步本站文章:RINEX 与 Compact RINEX 批量转化脚本