RINEX 与 Compact RINEX 批量转化脚本

前文 RINEX 与 Compact RINEX 格式的转换曾经介绍过使用 RNXCMP 程序包或者 GAMIT/GLOBK 软件的内置脚本将 GNSS 观测数据在标准 RINEX O-文件格式和 Compact RINEX (D-文件)之间转化的方法。但问题是,RNXCMP 程序包不善于对大量数据批量操作,而很多时候又无法使用 GAMIT/GLOBK 内置脚本。

本文介绍 Pinot 中的新增脚本:crnx2rnx.py 和 rnx2crnx.py,可实现对该情况的批量处理。

脚本功能

本文所涉及的两个脚本及其功能如下:

  • crnx2rnx.py:将 Compact RINEX 转化为标准 RINEX;
  • rnx2crnx.py:将标准 RINEX 转化为 Compact RINEX。

运行环境

两个脚本使用 Python 语言(Python 3.5)编写,依赖于 RNXCMP 程序包中的两个程序:crx2rnx 和 rnx2crx。要使用此脚本,需将这两个程序放入脚本执行目录或系统搜索目录内。

需注意的是:对于某些 Windows 操作系统中(如 Windows Server 2008 R2),可能会出现 “’crx2rnx/rnx2crx’ 不是内部或外部命令,也不是可运行的程序或批处理文件。” 的错误,此时需要保证运行脚本的文件夹内有 crx2rnx 或 rnx2crx 程序。

此外,最新的程序实现了进度条显示功能。该功能使用了 tqdm 模块,要安装该模块,在 “命令提示符” 窗口执行:

1
$ pip install tqdm

参数说明

此两个脚本的所接受的参数一致,下面以 crnx2rnx.py 为例。该脚本接受的参数如下:

1
$ python crnx2rnx.py <file> [<file> ...] [-out <directory>] [-k] [-r] [-v] [-h]

参数释义:

  • <file>:输入的待处理文件,你可以使用文件名,也可以使用通配符;
  • -out <directory>:输出转化结果的文件夹。该项默认为当前目录的 rinex(或 crinex) 文件夹;
  • -k、--keep:转化成功后是否保留源文件,不加该参数时默认为不保留;
  • -r--recursive:指定 “**/” 的通配符前缀表示递归搜索子文件夹的内容,不加该参数默认为不递归;
  • -v、--version:显示版本信息;
  • -h、--help:显示帮助。

使用示例

将 crinex/ 文件夹内 BJFS 站和 SHAO 站的所有观测于 2016 年的 Compact RINEX 文件转化为标准 RINEX 格式,将输出保存至 rinex/ 文件夹内,转化成功后删除源文件:

1
$ python crnx2rnx.py crinex/bjfs*.16d crinex/shao*.16d -out rinex

将 crinex/ 文件夹及其子文件夹内所有以 .crx 为后缀名的 Compact RINEX 文件转化为标准 RINEX 格式,将输出保存至 rinex/ 文件夹内并保留源文件:

1
$ python crnx2rnx.py crinex/**/*.crx -out rinex -r -k

将 rinex/ 文件夹内的所有观测于 2016 年第 161 至 168 日的标准 RINEX O-文件压缩为 Compact RINEX 格式,将输出保存至 crinex/ 文件夹并保留源文件:

1
$ python rnx2crnx.py rinex/*16[1-8]?.16o -out crinex -k

下载地址

该脚本及同一工具包的其他脚本均放在 Github 网站上:purpleskyfall/pinot

修改记录

  • 2017-09-10,版本 0.2.0:
    • 去掉 -dir-glob 参数,使用位置参数指定输入文件;
    • 支持多个输入文件或通配符;
    • 支持 RINEX 3 文件名;
    • 添加进度条显示;
    • 添加多线程支持。
  • 2018-03-14,版本 0.2.2:
    • 优化在 UNIX/Linux 中的输出信息显示。
  • 2018-03-16,版本 0.2.3:
    • 适配 UNIX/Linux 操作系统。