GFZRNX 文件头信息编辑功能详解

文章目录
  1. 1. 信息导出
  2. 2. 信息编辑
    1. 2.1. 更新/插入模式
    2. 2.2. 替换模式
    3. 2.3. 重命名模式
  3. 3. 导出信息样例
    1. 3.1. TXT 格式导出的观测信息
    2. 3.2. JSON 格式导出的观测信息
    3. 3.3. XML 格式导出的观测信息

前文在介绍 GFZRNX 程序的文件编辑命令时,并没有提到其对 RINEX 格式文件的文件头信息的导出和编辑功能。相比 TEQC 程序,该程序的文件头信息编辑的功能更强大,但也更复杂。为协调各文章的篇幅,将其独立成此文。

首先需要说明的是,GFZRNX 支持对 RINEX 格式的观测文件(O-文件)、导航文件(N-文件)和气象文件(M-文件)的操作,但考虑到我们编辑得最多的还是观测文件,因此本文的示例以对 O-文件的操作为主。

信息导出

介绍信息编辑功能前,让我们先顺便了解一下 GFZRNX 程序文件头信息导出的功能。该功能可以将文件头中的信息提取出来,便于查看、归档。

信息导出功能使用 -meta 参数,支持 TXT、JSON、XML 等格式,使用起来非常简单。下面的命令以 TXT 格式导出观测信息:

1
$ gfzrnx -finp shao0420.16o -meta basic:txt > shao0420.txt

下面的命令以 JSON 格式导出观测信息:

1
$ gfzrnx -finp shao0420.16o -meta basic:json > shao0420.json

下面的命令以 XML 格式导出观测信息:

1
$ gfzrnx -finp shao0420.16o -meta basic:xml > shao0420.xml

限于篇幅,为保证行文流畅性,将导出的信息附在文末。

信息编辑

GFZRNX 程序的文件头信息编辑包括三种模式:更新/插入模式、替换模式和重命名模式。其中更新/插入模式主要用于修改文件头中的信息,替换模式用于编辑文件头标志,而重命名模式常用于重命名观测的卫星号和观测量。

使用该程序的信息编辑功能时,必须通过 -crux 参数引入一个配置文件。一份配置文件模板可以使用下面的命令获得:

1
$ gfzrnx -show_crux > example.txt

运行该命令后,得到示例文件 example.txt。但该文件几乎空无一物,并没有太大的演示价值,因此本文将以我的配置文件为例。

更新/插入模式

一份更新/插入模式的配置文件就像这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
update_insert: 
#-------------
O - SHAO.DAEJ:
"REC # / TYPE / VERS": { 1: "TRIMBLE NETG3" }
"ANT # / TYPE": { 1: "TRM59800.00", 2: "NONE" }

O - 2015209:00000 2016365:86399 - SHAO:
"APPROX POSITION XYZ": { 0: -3857167.6484, 1: 3108694.9138, 2: 4004041.6876 }
"ANTENNA: DELTA H/E/N" : { 0: 0.1209, 1: 0.0008, 2: 0.0007 }

O - SHAO:
"OBSERVER / AGENCY": { 0 : "SHAO", 1 : "SHAO CAS" }

O - DAEJ:
"OBSERVER / AGENCY" + 00000000:000000 20130126:235959: { 0: "KASI", 1: "KASI" }
"OBSERVER / AGENCY" + 20130127:000000 00000000:000000: { 0: "KASI", 1: "KASI KOREA" }

该文件首行的“update_insert”即声明了该配置为更新/插入模式。第 2 行为注释,以“#”号开头。

之后的三行作为一组。其中第 3 行的首个字符定义了要编辑的数据类型(O、M、N 分别代表 RINEX 格式的观测文件、气象文件和导航文件)。若省略该字符,则表示将设置应用到所有数据类型。连字符之后是要应用这些设置的目的站点列表,多个点名之间使用“.”号分隔。因此这里的配置指示:将这一组设置应用到 SHAO 和 DAEJ 两个站点。如果你希望将配置应用到所有输入的文件,可以在这里使用 “ALL”。

文件的第 4 行是一个配置项。如你所知,RINEX 文件头信息中包含“REC # / TYPE / VERS”的这一行有 3 个数据项,分别表示接收机编号、接收机类型和接收机版本。如果我们将这一行的数据项以 0 开始编号,那么三项对应的是:

  • 0 :接收机编号;
  • 1 :接收机类型;
  • 2 :接收机版本。

因此,这个配置项意为:更新“REC # / TYPE / VERS”这一行的信息,将其中编号为 1 的项目(即接收机类型)修改为“TRIMBLE NETG3”。

文件第 5 行与上一行类似,更新天线类型为“TRM59800.00”,更新天线罩为“NONE”。

第 7 行与第 3 行类似,但在文件类型和站点名之间插入了一段字符“2015209:00000 2016365:86399”。这段字符指明,以下的配置仅应用于观测时间在该时间段之内的数据。其中的起止时刻以年、年积日和秒数的方式指定。之后的两行配置分别更新了观测信息中的先验坐标和天线偏移。

第 10 行和第 11 行配置将 SHAO 站的观测者和观测机构分别修改为“SHAO”和“SHAO CAS”。这里省略了应用配置的起止时刻,因此默认将此配置应用到所有时间段的观测数据。

最后的 3 行对 DAEJ 站的观测者和观测机构进行配置,但在配置项中插入了以“+”号开始的一个起止时刻。这表示,在 2013 年 1 月 26 日 23 点 59 分 59 秒之前的观测数据,其观测者和观测机构修改为“KASI”,在 2013 年 1 月 27 日 0 点 0 分 0 秒之后的观测数据,其观测者和观测机构分别修改为“KASI”和“KASI KOREA”。这里的时刻是以年月日、时分秒的形式指定的。事实上,该配置文件中的日期和时刻的格式分别各有两种,即年积日、年月日和时分秒、日积秒。

要应用该配置文件,可以将配置文件保存为 updist_crux.txt。然后执行类似如下的命令:

1
2
$ gfzrnx -finp daej0420.16o -crux updist_crux.txt -kv > temp/dnew0420.16o
$ gfzrnx -finp shao0420.16o -crux updist_crux.txt -kv > temp/snew0420.16o

以上两个命令将分别得到修改后的文件 dnew0420.16o 和 snew0420.16o。

替换模式

替换模式的配置于之前的更新/插入模式的配置方式有许多相同之处。一份替换模式的配置文件如下所示:

1
2
3
4
5
6
7
8
replace:
#-------
ALL:
string_from: "PGM/RUN BY/DATE"
string_to: "PGM / RUN BY / DATE"
DAEJ.SHAO:
regexp_from: "^(.{60})PGM\s*/\s*RUN\s*BY\s*/\s*DATE\s*$"
regexp_to: "$1PGM / RUN BY / DATE"

首行声明配置为替换模式,之后以“#”号开头的一行为注释。第 3 行和第 6 行各指出了配置项的应用到哪些站点。

对于设置将被替换的项目和替换后的内容,既可以使用字符串指定,如第 4 到 5 行;也可以使用正则表达式指定,如第 7 到 8行。只需分别以“string”和“regexp”作为配置项的前缀。

对于配置项的后缀,“from”指定要被替换的内容,而“to”指定替换后的内容。

与之前类似,要应用该配置文件,可以将配置文件保存为 repl_crux.txt。然后执行类似如下的命令:

1
2
$ gfzrnx -finp daej0420.16o -crux repl_crux.txt -kv > temp/dnew0420.16o
$ gfzrnx -finp shao0420.16o -crux repl_crux.txt -kv > temp/snew0420.16o

重命名模式

重命名模式常用来修改观测卫星号和观测类型标志。实际上,该模式也只有这两个功能。并且在声明时需要明确指明要重命名的是卫星号还是观测类型。

一份修改卫星号的配置文件如下:

1
2
3
4
5
rename: prn
#----------
ON - 20140105:000000 20150101:000000 - E51 - E01: ALL
ON - 20140105:000000 00000000:000000 - E52 - E02: DAEJ.SHAO
E53 - E03: ALL

首行声明配置为重命名卫星编号,之后的一行为注释。

第 3 行一开始的“ON”指定将配置应用于观测文件与导航文件,然后的两个时刻指定应用配置的时间。之后指定将卫星“E51”重命名为“E01”,应用的站点为所有站点。第 4 行与上一行类似,但限制将配置应用到 DAEJ 和 SHAO 两个站点。最后一行没有指定设置要应用的文件类型和时段,因此该设置将应用到所有时段的所有文件。

一份重命名观测类型的配置文件如下所示:

1
2
3
4
5
6
7
rename: obs
#----------
20140105:000000 20150101:000000 - L2X - L2L - G : DAEJ.SHAO
20140105:000000 20150101:000000 - L2L - L2X - G : DAEJ
20140105:000000 20150101:000000 - **X - **L - C : ALL
20140105:000000 20150101:000000 - *2 - *1 - G04.G08 : ALL
*2 - *1 - C : ALL

首行声明配置为重命名观测类型,之后的一行为注释。

第 3 行与第 4 行,指定了应用配置的时间段、需重命名的观测类型、重命名后的类型、卫星系统和应用的站点。第 4 行以通配符的方式指定了要重命名的观测类型与重命名后的类型。第 5 行与上一行类似,但限制了应用范围为 G4 和 G8 卫星。最后一行省略了时段,因此该配置将应用于所有观测时段的数据。

应用重命名模式的命令方式与之前的两个模式一致,这里不在赘述。

导出信息样例

TXT 格式导出的观测信息

以下为上文导出的 shao0420.txt 文件的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
antenna:
height:
x = 0
y = 0
z = 0
name = AOAD/M_T
number = 429
radome = JPLA
data:
epoch:
first = 2016 02 11 00 00 00.0000000
interval = 30.000
last = 2016 02 11 23 59 30.0000000
file:
md5 = c8ad2534683bf037c7a9e77eab2ef0a3
system = G
type = O
version = 2.11
receiver:
firmware = CQ00
name = ASHTECH UZ-12
number = UC2200524020
site:
agency = SHANGHAI OBSERVATORY
name = SHAO
number = 21605M002
observer = GGN
position:
x = -2831733.5830
y = 4675665.9580
z = 3275369.4100

JSON 格式导出的观测信息

以下为上文导出的 shao0420.json 文件的内容(为增加可读性,手动添加了缩进)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
{
"receiver":{
"number":"UC2200524020",
"name":"ASHTECH UZ-12",
"firmware":"CQ00"
},
"site":{
"number":"21605M002",
"position":{
"y":"4675665.9580",
"x":"-2831733.5830",
"z":"3275369.4100"
},
"name":"SHAO",
"agency":"SHANGHAI OBSERVATORY",
"observer":"GGN"
},
"file":{
"system":"G",
"version":"2.11",
"type":"O",
"md5":"c8ad2534683bf037c7a9e77eab2ef0a3"
},
"data":{
"epoch":{
"first":"2016 02 11 00 00 00.0000000",
"last":"2016 02 11 23 59 30.0000000",
"interval":"30.000"
}
},
"antenna":{
"number":"429",
"name":"AOAD/M_T",
"height":{
"y":0,
"x":0,
"z":0
},
"radome":"JPLA"
}
}

XML 格式导出的观测信息

以下为上文导出的 shao0420.xml 文件的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<meta_info>
<antenna>
<height>
<x><![CDATA[0]]></x>
<y><![CDATA[0]]></y>
<z><![CDATA[0]]></z>
</height>
<name><![CDATA[AOAD/M_T]]></name>
<number><![CDATA[429]]></number>
<radome><![CDATA[JPLA]]></radome>
</antenna>
<data>
<epoch>
<first><![CDATA[2016 02 11 00 00 00.0000000]]></first>
<interval><![CDATA[30.000]]></interval>
<last><![CDATA[2016 02 11 23 59 30.0000000]]></last>
</epoch>
</data>
<file>
<md5><![CDATA[c8ad2534683bf037c7a9e77eab2ef0a3]]></md5>
<system><![CDATA[G]]></system>
<type><![CDATA[O]]></type>
<version><![CDATA[2.11]]></version>
</file>
<receiver>
<firmware><![CDATA[CQ00]]></firmware>
<name><![CDATA[ASHTECH UZ-12]]></name>
<number><![CDATA[UC2200524020]]></number>
</receiver>
<site>
<agency><![CDATA[SHANGHAI OBSERVATORY]]></agency>
<name><![CDATA[SHAO]]></name>
<number><![CDATA[21605M002]]></number>
<observer><![CDATA[GGN]]></observer>
<position>
<x><![CDATA[-2831733.5830]]></x>
<y><![CDATA[4675665.9580]]></y>
<z><![CDATA[3275369.4100]]></z>
</position>
</site>
</meta_info>