GLOBK 分步进行网平差

GLOBK 是 GAMIT/GLOBK 程序的另一个主要组件。该程序使用卡尔曼滤波的方式对 GAMIT、GIPSY 和 Bernese 等产出的结果及经典大地测量和 SLR 观测数据进行处理,最后得到观测点的坐标、站速度、EOP 参数和卫星的轨道参数等。

与 GAMIT 操作类似,GLOBK 程序的操作也可以分为分步处理和批处理两种方式。本文将试图介绍使用 GLOBK 程序对 GAMIT 基线解算结果以分步处理的方式进行网平差的过程。

程序简介

GLOBK 程序的主要功能包括:

  • 将单天解合并为多天解;
  • 将多天解合并为多年解,并估计测站速度;
  • 估计测站坐标重复性,进而评价多天观测解的精度。

与 GAMIT 程序类似,GLOBK 也由多个模块组成。其主要功能模块包括 htoglb、glred、globk、glorg,各自的功能如下:

  • htoglb:将 GAMIT 产生的文本 H-文件转换为输入 GLOBK 的二进制 H-文件。
  • glred:合并输入文件并计算单天解的重复性。
  • globk:估计测站的坐标和站速度。
  • glorg:计算添加约束的联合解。

文件组织

GLOBK 程序的输入文件是由 GAMIT 进行基线解算得到的 H-文件。在使用 GLOBK 进行网平差解算时,我们习惯于这样组织文件:

1
2
3
4
· work/
|—— glbf/
|—— gsoln/
|—— tables/

首先创建一个文件夹作为工作目录,该目录的命名可以是任意的。在工作目录下平行地创建上面的 3 个文件夹。其中在 gsoln/ 存放 GAMIT 基线解算结果文件并在文件夹中进行网平差操作,glbf/ 文件夹存放二进制的 H-文件,tables/ 文件夹存放解算时所需的一些配置文件和解算需引入的共用表文件。

当然,上面只是列出了必需的两个文件夹。如果你在之前进行 GAMIT 基线解算的工作目录下继续进行网平差操作,这时很可能 sh_gamit 命令已经为你创建了 gsoln 等文件夹,这时直接应用已有的目录结构即可。

将 GAMIT 解算结果的 H-文件拷贝到 gsoln/ 文件夹中。以前文 GAMIT 分步基线解算的解算结果作为示例,具体的文件结构应为:

1
2
3
4
5
· work/
|—— glbf/
|—— gsoln/
|—— htesta.16050
|—— tables/

参数配置

链接表文件

如果你在之前使用 GAMIT 程序进行基线解算的工作目录下继续进行网平差操作,那么不需要再链接共用表文件,因为基线解算时已经链接过了。但如果你在新建的工作目录下操作,需要在工作目录下执行命令:

1
$ sh_setup -yr 2016 -doy 050

这个命令在之前介绍基线解算的博文中已经出现过多次,本文中不做解释。

当然,如果你处理的 H-文件是在其他的计算机上解算得到的,在链接共用表文件之前也要先检查某些文件是否需要更新。具体的细节之前介绍 GAMIT/GLOBK 更新方法的博文中也已经讲过,这里不再赘述。

参数设置

GLOBK 程序分步网平差的控制文件通常使用这两个:globk_comb.cmd 和 glorg_comb.cmd。这两个文件保存在 GAMIT/GLOBK 安装目录的 tables 文件夹内,你可以将其拷贝到工作目录的 gsoln 文件夹中,也可以在工作目录下使用命令:

1
$ sh_glred -cmd

这个命令将帮你拷贝两个控制文件至 gsoln 文件夹内。

在此类控制文件中,以字符 “*”、“#” 或 “x” 开头的行表示注释,而控制项的第一个字符为空格。浏览 globk_comb.cmd 文件,你将在其中看到已知点坐标来源、地震记录文件来源等配置项,我的控制文件中这两项如下:

eq_file ~/gg/tables/itrf08_comb.eq
apr_file ~/gg/tables/itrf08_comb.apr

这表明解算时将使用 GAMIT/GLOBK 安装目录的 tables 文件夹下 ITRF2008 框架下的 IGS 站坐标作为已知点坐标,而地震信息从 ITRF2008 框架的地震记录文件中读取。如果你需要使用其它文件作为这两项的输入,直接修改其后的文件路径即可。为简单起见,我决定对这两项使用默认配置。

继续向下浏览,你将看到对网平差时各站点的约束配置,其内容大概是这样:

* Coordinate parameters to be estimated and a priori constraints
apr_neu all 10 10 10 0 0 0

在本次网平差任务中,我计划以 BJFS、CHAN 和 SHAO 这 3 个站点作为固定站,其三方向(NEU)约束设置为 0.05 m,0.05 m,0.1 m。因此需要编辑此处配置为如下这样(注意保持非注释行第一列为空格):

* Coordinate parameters to be estimated and a priori constraints
apr_neu all 10 10 10 0 0 0
apr_neu bjfs 0.05 0.05 0.1 0 0 0
apr_neu chan 0.05 0.05 0.1 0 0 0
apr_neu shao 0.05 0.05 0.1 0 0 0

再浏览 glorg_comb.cmd 文件,会发现这里也有一些类似的配置项。找到其中对固定站的配置,其内容像这样:

# This should match the well-determined sites in the apr_file
stab_site clear
source ~/gg/tables/igb08_hierarchy.stab_site

这里的第一行为注释,第二行将之前配置的固定站列表清空,第三行从 GAMIT/GLOBK 安装目录的 tables 文件夹中加载 “igb08_hierarchy.stab_site” 文件作为固定站列表。我们直接将第三行注释掉,然后在其之前添加一个固定站列表即可。最终这一项配置如下(注意保持非注释行第一列为空格):

# This should match the well-determined sites in the apr_file
stab_site clear
stab_site +bjfs
stab_site +chan
stab_site +shao
x source ~/gg/tables/igb08_hierarchy.stab_site

初始文件生成

配置好解算参数后,现在开始生成 GLOBK 程序需要的二进制格式的 H-文件。这需要使用 htoglb 命令:

1
$ htoglb <outPath> <emphmerisPath> <hFiles>

这里的 <outPath> 表示二进制 H-文件输出路径,<emphmerisPath> 表示卫星状态文件路径,<hFiles> 为要转换的 H-文件列表。

具体到本次任务,在 gsoln 文件夹内执行的是:

1
$ htoglb ../glbf/ ~/gg/tables/svnav.dat htesta.16050

现在,查看工作目录下的 glbf 文件夹,将看到转换出的两个文件:松散约束下的模糊度实数解 .glr 文件以及松散约束下的模糊度整数解 .glx 文件。这两种文件选取一种作为 GLOBK 的输入即可。

一般而言,处理短基线时,建议采用 .glx 文件;而对于数千公里的长基线,才采用 .glr 解。本次任务中,最长的基线是 CHAN(长春)和 SHAO(上海)之间的连线。利用高德地图的“测距”功能,发现这两个城市的距离大约为 1400 km,并不算太长。因此,本次任务中我将选用 .glx 文件作为输入。

在得到所需的二进制 H-文件之后,我们需要制作一个 .gdl 文件作为使用的二进制 H-文件列表。生成这个文件通常使用 Linux 系统的 ls 命令,若使用 .glx 文件,可以使用命令:

1
$ ls ../glbf/*.glx > <expt>_glx.gdl     # <expt> 表示项目名

该命令将 glbf 目录下所有的 .glx 文件写入生成的 .gdl 文件中。类似的,使用 .glr 文件时创建 .gdl 文件的命令为:

1
$ ls ../glbf/*.glr > <expt>_glx.gdl

具体到本次任务:

1
$ ls ../glbf/*.glx > test_glx.gdl

开始解算

网平差解算主要使用两个命令:glredglobk。它们的输入参数类似:

1
2
$ glred <stdOut> <printFile> <logFile> <hList> <cmdFile>
$ globk <stdOut> <printFile> <logFile> <hList> <cmdFile>

参数释义:

  • <stdOut> 表示输出路径,常设为 6 使其输出到当前窗口;
  • <printFile> 表示结果文件的输出路径;
  • <logFile> 表示解算记录文件输出路径;
  • <hList> 即上文制作的 .gdl 文件;
  • <cmdFile> 表示输入的 .cmd 文件。

具体到本次任务,使用的命令为:

1
2
$ glred 6 glred.org glred.log test_glx.gdl globk_comb.cmd
$ globk 6 globk.org glred.log test_glx.gdl globk_comb.cmd

成果查看

如果 GLOBK 程序运行成功,其网平差结果将保存在 .org 文件中。例如对于本次解算任务,GLRED 程序的运行成果在 glred.org 文件内,GLOBK 程序的运行成果保存在 globk.org 文件内。如果你足够仔细,会发现本次任务输出的两个结果文件的内容是一样的。

若程序运行中出现错误,错误信息将保存在 gsoln 文件夹的 GLOBK.fatal 文件内,可以根据其提示对数据处理过程进行适当调整。

有时可能出现网平差解算出的结果中,已知点不能成功固定的现象。如果你的操作和设置没有问题,那么可能是网形结构等原因导致的,可以尝试通过调整联测和平差时的固定点重新解算来解决。