RTKLIB 中 convbin 模块的使用
RTKLIB 是著名的 GNSS 数据处理软件,提供标准单点定位(SPP)和精密单点定位(PPP)等功能。它由东京海洋大学的 Tomoji Takasu 编写,并开源在 Github 网站上。但本文的关注点并不是该程序如何使用,只是介绍其中用于数据转换的一个小模块:convbin。
convbin 是包含在 RTKLIB 中的一个命令行程序,它可以将 RTCM2、RTCM3、u-blox 或 BINEX 等格式的 GNSS 数据转换到 RINEX 2.11。你可以使用该模块完成从原始数据文件到 RINEX 格式的转换。
安装与简介
对于 Windows 操作系统,RTKLIB 提供了预编译好的可执行程序,你可以直接下载并执行它们。对于 UNIX/Linux 操作系统,则需要下载源代码在本地编译来获得可用的 RTKLIB 软件。作为 RTKLIB 的一部分,convbin 随 RTKLIB 一同发布。但该程序并不依赖其他程序或模块,因此你也可以单独下载使用它。convbin 目前支持的格式或协议有:
- RTCM 2/3;
- NovAtel OEMV/4,OEMStar;
- NovAtel OEM3;
- u-blox LEA-4T/5T/6T;
- NovAtel Superstar II;
- Hemisphere;
- SkyTraq S1315F;
- GW10;
- Javad;
- NVS;
- BINEX;
- Trimble RT17;
- RINEX。
参数说明
上文已经说过,convbin 是一个命令行程序,它的使用方式为:
1 | $ convbin [options] <file> |
这里的 <file>
为输入的文件,[options]
为参数选项。为保持行文流畅,只列出最常用的参数选项,完整的参数选项请参考文末的附表:
-ts <y/m/d h:m:s>
:输出文件的开始时刻,默认为开始记录时刻;-te <y/m/d h:m:s>
:输出文件的结束时刻,默认为结束记录时刻;-tr <y/m/d h:m:s>
:RTCM 数据的近似观测时刻;-span <span>
:观测时段长(h),默认为所有时长;-r <format>
:输入文件格式,多数时候 convbin 能根据扩展名识别文件类型,但某些时候需要指定;-c <station>
:使用该参数设定的站名构造输出的 RINEX 文件名;-hm <marker>
:测量标志名;-ho <observer/agency>
:观测者与观测机构,以 / 分隔;-hr <rec_id/type/version>
:接收机编号、类型与版本,以 / 分隔;-ha <antenna_id/type>
:天线编号与天线类型,以 / 分隔;-hp <position>
:站点概略坐标(XYZ),以 / 分隔;-hd <delta_H/E/N>
:站点天线偏移量(HEN),以 / 分隔;-v <version>
:RINEX 版本号,默认为 RINEX 2.11;-d <directory>
:数据的输出文件夹,默认为输入数据所在的文件夹。
使用示例
处理单个文件
convbin 最常见的使用场景就是将某个 RTCM 文件转换为 RINEX 格式。对于单个输入文件,可以如下命令:
1 | $ convbin rtcm/demo-180311-01.rtcm3 -tr 2018/03/11 1:0:0 -hm DEMO -d rinex/ |
以上命令将 rtcm/ 文件夹内的 demo-180311-01.rtcm3 转换为 RINEX 格式。需注意的是:此处必须使用 -tr
参数来指定数据的近似观测时刻,否则生成的文件中观测时刻都是错误的;并且,由于 RTCM 数据不包含 RINEX 文件头中的元信息,因此这里使用 -hm
指定观测站名。执行完毕后,你可以在 rinex/ 文件夹内找到输出观测文件:demo-180311-01.obs。
使用 RINEX 命名风格
你已经看到,上一个命令输出的文件并非 RINEX 格式的命名风格,这一点可能让人不快。实际上,你可以使用 -c
参数来指定站点名,这样程序就可以使用它来构造正确的 RINEX 输出文件名了。示例:
1 | $ convbin rtcm/demo-180311-01.rtcm3 -tr 2018/03/11 1:0:0 -hm DEMO -d rinex/ -c DEMO |
执行该命令后,将在 rinex/ 目录内找到输出文件 DEMO0700.18O,这里的年积日是根据输入的近似观测时间来计算出来的。
处理时切割
有时候 RTCM 文件中包含的数据很多,而我们只需要其中的一段。你可以使用 convbin 指定输出数据的开始和结束观测时刻,实现数据转换时的时间切割。示例:
1 | $ convbin rtcm/demo-180217-01.rtcm3 -tr 2018/02/17 1:0:0 -ts 2018/02/17 1:0:0 -te 2018/02/17 1:30:0 -hm DEMO -d rinex/ |
在这个命令中,使用 -ts
和 -te
参数,以 “年/月/日 时:分:秒” 的形式指定输出数据的开始和结束时刻。执行完成后,得到文件 DEMO0480.18O。
处理时合并
前面的使用方式都只能处理一个文件,但 convbin 亦支持在数据转换的同时进行文件合并。对于大量的数据,你可以这样将输出数据拼接在一起:
1 | $ convbin rtcm/demo-180217-*.rtcm3 -tr 2018/02/17 0:0:0 -hm DEMO -d rinex/ -c DEMO -scan |
这里的输入文件是一个通配符,然后使用 -scan
参数告诉程序按照这个规则查找所有匹配的文件名作为输入。因此这个命令可以处理 DEMO 站于 2018 年 2 月 17 日观测的所有数据。执行完成后,将得到 DEMO0480.18O 等。
元信息指定
以上所有的命令生成的 RINEX 数据,其文件头中都没有观测者、观测机构等信息。这可以说是一种缺陷,因为完善的此类信息更有利于处理和使用。为了后续过程的便利,你可以在转换时将接收机等信息一并写入到输出文件内。示例:
1 | $ convbin rtcm/demo-180217-01.rtcm3 -tr 2018/02/17 1:0:0 -hm DEMO -hr 1234567/TPS NETG3/1.00 -ha 7654321/TRM29659.00 GSI -d rinex/ |
在这个命令中,分别使用 -hr
和 -ha
参数来指定输入数据的接收机和天线的信息。等待命令运行完后,将得到输出文件 DEMO0480.18O。
完整的参数表
1 | -ts <y/m/d h:m:s> # 开始时刻,默认为开始记录时刻 |
补充
除了使用本文介绍的 convbin 模块外,在 Windows 操作系统下,你还可以使用相同文件夹内的 rtkconv 这个模块。它是一个具有图形用户界面的 GNSS 数据格式转换程序。相比 convbin,其操作方式更友好,但它只能对单个文件进行操作,在处理大量数据时的效率较低。