GNSS 数据批量标准化脚本
在处理大量的 GNSS 数据时,我们常常需要编辑大量的 RINEX 观测文件(Obs)。有些测站由于观测人员的设置等原因,导致观测数据的文件头信息不标准或不正确。也有些观测数据的采样间隔、观测卫星系统或观测量等不一致。这就需要对数据进行标准化工作。
TEQC 或 GFZRNX 程序可以做到这一点,但这些程序比较适合处理单个或单个测站的观测文件,对于处理大量的数据时显得略不便。本文将介绍 Pinot 中实现的批量标准化程序 unificate.py。该脚本以多线程的方式执行,运行快速。
运行环境
本脚本使用 Python 3 语言编写,依赖于 TEQC 程序和 PyYAML 模块。要使用此脚本,需保证系统已配置 TEQC 程序和 PyYAML 程序。TEQC 程序配置请参考本站 TEQC 程序配置及其数据转换功能的使用,PyYAML 配置请参考本站 PyYAML 安装与使用演示。
脚本在 Windows XP、Windows Server 2008 R2 以及 Windows 10 等操作系统测试通过。由于程序的文件编辑操作依赖于 TEQC 程序,需注意的是:对于 Windows 10 操作系统,只需将 TEQC 程序放入系统能搜索到的路径下,即在任意目录中启动命令提示符执行 teqc 命令能显示 TEQC 程序的提示信息;但对于更低版本的 Windows 系统,若出现 “’teqc’ 不是内部或外部命令,也不是可运行的程序或批处理文件。” 的错误,此时需保证运行脚本的文件夹内有 TEQC 程序。
此外,最新的程序实现了进度条显示功能。该功能使用了 tqdm 模块,要安装该模块,在 “命令提示符” 窗口执行:
1 | $ pip install tqdm |
参数说明
该脚本可接受以下参数:
1 | $ python unificate.py <file> [<file> ...] -out <directory> -cfg <config> [-r] [-v] [-h] |
参数释义:
<file>
输入的待处理文件,你可以使用文件名,也可以使用通配符 ;-out <directory>
处理结果的输出路径,默认为当前路径下的 unificated 文件夹;-cfg <config>
配置文件路径,该文件使用 YAML 语言编写,默认为当前目录下的 _sitesinfo.yml 文件;-k、--keep
标准化成功后是否保留源文件,不加该参数时默认为不保留;-r
、--recursive
指定 “**/” 的通配符前缀表示递归搜索子文件夹的内容,不加该参数默认为不递归;-v
、--version
显示版本信息;-h
、--help
显示帮助。
配置文件
配置文件使用 YAML 语言编写。目前支持的编辑项目有:
- agency: 观测机构;
- antenna: 天线类型;
- delta: 天线相位中心偏移;
- interval: 数据采样间隔;
- obs_type: 保留的观测类型;
- observer: 观测者;
- position: 站点概略坐标;
- receiver: 接收机类型;
- rm_sys: 要删掉的卫星系统。
这些配置项既可以写在各站点的配置内,也可以放在 “all” 项目中作为默认配置项目。若 “all” 和站点内都设置了某一项信息,则使用站点中的配置。
配置文件示例
配置文件中的站点名,需使用小写字母。下面是一个配置文件示例:
1 | all: |
在该配置文件中,通过 “all” 配置了全局的观测者、观测机构、删掉的卫星系统、保留的观测类型、采样间隔和天线中心偏移量。
在 “bjfs” 中,配置了该站点使用的接收机类型、天线类型、概略坐标位置和天线中心偏移。在 “chan” 中,配置了该站点的接收机类型、天线类型和概略坐标。其中未配置的项目,将使用 “all” 中的信息。
使用示例
处理 rinex/ 文件夹中所有的 RINEX O-文件,其中使用的配置文件为当前目录中的 _sitesinfo.yml,将最终的处理成果输入到当前路径的 unificated 文件夹:
1 | $ python unificate.py rinex/*[Oo] -out unificated -cfg _sitesinfo.yml |
处理 rinex/ 文件夹中观测年为 2016,年积日为 042 至 045 的 RINEX O-文件,其中配置文件为当前目录中的 _sitesinfo.yml,将最终的处理成果输入到当前路径的 unificated 文件夹:
1 | $ python unificate.py rinex/*04[2-5]0.16[Oo] -out unificated -cfg _sitesinfo.yml |
处理 rinex/ 文件夹中 BJFS 站观测于 2016 年的 RINEX O-文件,其中配置文件使用当前目录的 _sitesinfo.yml,将最终的处理成果输入到当前路径的 unificated 文件夹:
1 | $ python unificate.py rinex/bjfs*.16[Oo] -cfg _sitesinfo.yml -out unificated |
处理 rinex/ 文件夹中的 001,002,003 文件夹中的文件,其中配置文件使用当前目录的 _sitesinfo.yml,将最终的处理成果保存至 unificated 文件夹:
1 | $ python unificate.py rinex/00[1-3]/*[Oo] -cfg _sitesinfo.yml -out unificated |
下载地址
该脚本及同一工具包的其他脚本均放在 Github 网站上:purpleskyfall/pinot。
修改记录
- 2017-09-10,版本 0.5.0:
- 去掉
-dir
和-glob
参数,使用位置参数指定输入文件; - 支持多个输入文件或通配符;
- 添加进度条显示;
- 基于 concurrent.futures 的多线程支持。
- 去掉
- 2018-03-14,版本 0.5.1:
- 优化在 UNIX/Linux 中的输出信息显示。