拓冰建站拓冰建站
首页 / 资讯中心 / 正文

GAMIT/GLOBK v10.75 在 Ubuntu 上的完整安装与高精度 GNSS 数据处理实践指南

这次我们来看一个在北斗/GNSS高精度数据处理领域堪称“基石”的软件套件——GAMIT/GLOBK。对于从事大地测量、地壳形变监测、精密定位研究的科研人员和工程师来说这套由麻省理工学院MIT和斯克里普斯海洋研究所SIO维护的开源软件是实现毫米级乃至亚毫米级定位精度的核心工具。它的重点不在于概念有多新潮而在于能否在你的计算环境中稳定、正确地跑起来并处理从原始观测数据到最终坐标时间序列的全流程。GAMIT/GLOBK v10.75作为当前广泛使用的版本其部署和应用过程涉及从操作系统准备、依赖库编译、到复杂数据处理的完整链条。整个过程对新手而言颇具挑战但一旦打通你将获得一套完全自主可控的高精度数据处理能力。本文将聚焦于从零开始在Ubuntu系统上完成GAMIT/GLOBK v10.75的安装、配置并带你走通从数据下载、预处理到最终解算的完整实践流程。如果你正在为如何搭建这套环境、解决编译错误或理解处理流程而困扰那么这篇文章提供的步骤和排错思路将直接为你所用。1. 核心能力速览在深入细节之前我们先通过一个表格快速了解GAMIT/GLOBK的核心特性和部署要求这有助于你判断是否值得投入时间以及需要准备什么样的环境。能力项说明软件类型高精度GNSSGPS/北斗等数据处理与平差分析开源软件核心功能卫星轨道确定、基线解算、网平差、坐标时间序列生成、速度场估计精度水平在良好观测条件下相对定位精度可达毫米级短基线至厘米级长基线支持系统类Unix系统主要是Linux如Ubuntu, CentOS官方推荐在Solaris或Linux上运行。不支持Windows原生环境需通过WSL、虚拟机或Cygwin。硬件门槛CPU现代多核处理器可显著加速计算。内存建议8GB以上处理大规模网络或长时间序列时需求更高。磁盘空间至少20GB可用空间用于安装软件、存储全球导航卫星系统GNSS数据及结果。关键依赖Fortran编译器如gfortran、C编译器gcc、Make、csh/tcsh、网络工具curl/wget、库文件如libx11数据处理流程从RINEX观测文件开始历经轨道积分、单天解算、网平差最终得到测站坐标和速度。是否支持“一键启动”否。这是一个需要编译安装、手动配置环境变量和运行脚本的命令行工具集无图形化一键安装包。是否支持API/接口否。软件本身是命令行工具集但可通过Shell脚本或Python等语言编写脚本实现流程自动化批量任务。适合场景科研机构的地壳形变监测、测绘部门的高精度控制网处理、教学实验、需要自主处理GNSS原始数据的工程项目。2. 适用场景与使用边界GAMIT/GLOBK并非一个“开箱即用”的消费级软件理解其适用场景和局限性至关重要。它最适合谁大地测量与地球物理科研人员用于研究板块运动、地震周期形变、冰川均衡调整等。测绘工程师用于建立和维护区域性或国家级的高精度GNSS控制网。高校教师与学生用于GNSS数据处理原理的教学与实验深入理解误差模型和解算策略。对数据自主性和处理流程透明度有高要求的机构希望完全掌控从原始数据到最终成果的每一个环节。它能解决什么问题高精度相对定位计算两个或多个GNSS测站之间的三维基线向量精度远高于单点定位。区域/全球参考框架维持通过网平差将解算结果归算到国际地球参考框架如ITRF。生成时间序列处理多年的每日观测数据生成测站坐标随时间变化的时间序列用于分析长期趋势和季节性信号。估计速度场基于时间序列估算测站在参考框架下的运动速度。它的使用边界与注意事项学习曲线陡峭需要具备一定的Linux操作、Shell脚本和大地测量学基础。处理流程复杂涉及众多步骤和控制文件tables, sestbl., sittbl.等参数设置影响结果精度。非实时处理通常用于事后精密处理处理周期从数小时到数天不等。数据依赖性强需要同步获取GNSS观测站数据、精密星历SP3、地球自转参数ERP等文件。合规与授权处理的数据尤其是涉及国境线或敏感区域的需确保获取和使用符合相关法律法规与数据政策。3. 环境准备与前置条件成功的安装始于一个稳定、纯净的基础系统。以下是详细的准备工作清单。3.1 操作系统选择与安装首选方案Ubuntu LTS。22.04 LTS或20.04 LTS是经过广泛验证的稳定选择。社区支持完善遇到问题容易找到解决方案。安装方式物理机安装获得最佳性能。虚拟机VMware/VirtualBox方便快照和隔离需为虚拟机分配足够的CPU核心建议4核和内存8GB。WSL2 (Windows Subsystem for Linux 2)对于Windows用户是折中方案。注意WSL2的Systemd和某些库文件支持可能需额外配置且性能略有损耗。磁盘分区为Ubuntu根目录分配至少50GB空间/home目录也可适当放大用于存放软件和大量数据。3.2 系统更新与基础工具安装安装系统后第一件事是更新软件源并安装编译和运行所需的基础工具包。# 1. 更新软件包列表 sudo apt update sudo apt upgrade -y # 2. 安装必备的编译工具和库 sudo apt install -y gcc gfortran make tcsh csh sudo apt install -y libx11-dev libxt-dev libmotif-dev sudo apt install -y curl wget git zip unzip sudo apt install -y netpbm # 对于Ubuntu 22.04及以上可能需要安装以下兼容库 sudo apt install -y lib32z1 lib32stdc6关键解释gfortranGAMIT/GLOBK主要由Fortran语言编写这是最重要的编译器。tcsh/cshGAMIT的许多管理脚本基于C Shell编写。libx11-dev,libxt-dev,libmotif-dev用于编译图形交互工具如sh_gamit。netpbm用于处理某些图形输出。3.3 创建专用用户与目录推荐为避免权限问题并保持系统整洁建议创建一个专门用于运行GAMIT/GLOBK的用户。# 创建新用户例如名为‘gg’ sudo adduser gg # 将用户添加到sudo组可选方便安装软件 sudo usermod -aG sudo gg # 切换到新用户 su - gg在新用户的家目录下创建清晰的目录结构mkdir -p ~/gg cd ~/gg mkdir -p src # 存放源代码 mkdir -p bin # 存放编译后的可执行文件后续链接到此 mkdir -p tables # 存放解算所需的表文件 mkdir -p test # 用于测试的数据和工程目录4. 安装部署与启动方式GAMIT/GLOBK的安装是一个标准的“下载-配置-编译-安装”过程。以下步骤假设你在上一步创建的专用用户如gg下操作。4.1 获取源代码GAMIT/GLOBK的源代码需要通过邮件向官方gpshelpchandler.mit.edu申请获取。收到压缩包通常是gamit-10.75.tar.gz后将其上传到服务器的~/gg/src目录。cd ~/gg/src # 假设压缩包已在此目录 tar -xzvf gamit-10.75.tar.gz解压后会生成一个名为gamit的目录里面包含了GAMIT和GLOBK的所有源代码。4.2 配置安装参数进入解压后的目录编辑安装配置文件。cd gamit # 复制模板配置文件 cp Makefile.config Makefile.config.backup # 备份 vi Makefile.config # 或使用 nano, gedit 等编辑器需要关注的关键配置项INSTALLDIR /home/gg/gg/gamit指定GAMIT的安装目录。建议设置为/home/你的用户名/gg/gamit。HELPDIR $(INSTALLDIR)/help帮助文档目录通常跟随INSTALLDIR。X11LIBPATH /usr/lib/x86_64-linux-gnu和X11INCPATH /usr/includeX11库和头文件路径。在Ubuntu上通常就是这两个路径但如果你在编译图形模块时遇到问题可能需要检查这些路径是否正确。确保关于编译器的行是启用的例如LINUX gfortran # 注释掉或删除其他系统如SOLARIS的配置4.3 执行编译与安装配置完成后开始编译。这个过程可能会花费10-30分钟取决于CPU性能。# 在 gamit 源代码目录下执行 make installmake install会依次编译GAMIT的各个模块并将可执行文件、脚本、库文件和帮助文档安装到INSTALLDIR指定的目录。4.4 配置环境变量编译安装完成后需要让系统知道GAMIT/GLOBK命令的位置。编辑用户shell配置文件如果你用的是bash通常是~/.bashrc如果是csh/tcsh则是~/.cshrc或~/.tcshrc。# 编辑 ~/.bashrc vi ~/.bashrc在文件末尾添加以下内容请根据你的实际安装路径修改# GAMIT/GLOBK Environment Variables export GAMIT_HOME/home/gg/gg/gamit export PATH$GAMIT_HOME/bin:$GAMIT_HOME/gamit/bin:$PATH export HELP_DIR$GAMIT_HOME/help然后使环境变量生效source ~/.bashrc4.5 验证安装运行几个关键命令检查安装是否成功。# 检查GAMIT核心程序是否在路径中 which sh_gamit # 输出应为/home/gg/gg/gamit/gamit/bin/sh_gamit # 运行GLOBK的版本检查命令 globk # 如果安装成功会输出GLOBK的版本信息和简单的使用说明 # 运行GAMIT的一个小工具 doy # 输入年月日如 2024 10 1它会计算年积日如果这些命令都能正常执行并输出信息恭喜你GAMIT/GLOBK软件主体已安装成功。5. 获取与更新表文件TablesGAMIT/GLOBK的运行极度依赖一系列“表文件”Tables这些文件包含了卫星天线相位中心改正、地球物理模型、测站信息、处理策略等关键参数。没有它们软件无法运行。5.1 初始表文件获取安装包中可能包含一个基础的tables目录但通常需要从互联网更新到最新版本。# 进入你的工作目录例如之前创建的 ~/gg/tables cd ~/gg/tables # 使用GAMIT提供的脚本从MIT服务器下载最新的表文件 # 你需要知道FTP服务器的地址通常由官方提供例如 ftp://garner.ucsd.edu # 以下命令仅为示例实际地址和脚本名可能不同 # sh_get_rinex -archive sopac -yr 2024 -doy 001 -s “usno” # 这是下载数据的例子非表文件 # 更常见的做法是直接从编译好的安装目录复制或运行专门的更新脚本。 # 假设你的GAMIT安装目录下有完整的tables cp -r $GAMIT_HOME/gamit/tables/* ./5.2 关键表文件说明luntab.月亮星历表。soltab.太阳星历表。pole.极移表。ut1.UT1-UTC表。nutabl.章动表。svnav.dat卫星导航信息PRN号、发射时间等。antmod.dat接收机和卫星天线相位中心模型。rcvant.dat接收机类型与天线对应关系。hi.dat测站先验坐标文件非常重要。sestbl.GAMIT单天解算策略控制文件核心配置。sittbl.测站约束控制文件。5.3 设置表文件路径在你的处理工程目录中需要通过软链接或环境变量告诉GAMIT表文件在哪里。通常在每个处理项目的目录下创建指向中央tables目录的链接。# 在你的工程目录下例如 ~/gg/test/project1 ln -s ~/gg/tables tables6. 数据处理全流程实践现在我们以一个具体的单天解算为例走通从数据准备到基线解算的完整流程。假设我们要处理2024年第001天1月1日几个IGS站的数据。6.1 创建工程目录与结构cd ~/gg/test mkdir -p project1/rinex project1/brdc project1/products project1/results cd project1 ln -s ~/gg/tables tables # 链接表文件6.2 下载所需数据处理需要三种数据1) 测站观测文件RINEX2) 广播星历BRDC3) 精密星历等产品SP3, ERP等。# 1. 下载RINEX观测文件以IGS站usno, alrt, gold为例 # 可以使用GAMIT自带的 sh_get_rinex 脚本或手动从CDDIS、SOPAC等数据中心下载。 # 示例需要网络可达数据中心 sh_get_rinex -archive cddis -yr 2024 -doy 001 -s “usno alrt gold” -d ./rinex # 2. 下载广播星历 sh_get_nav -archive cddis -yr 2024 -doy 001 -d ./brdc # 3. 下载精密星历和地球自转参数事后精密处理需要 sh_get_orbits -archive cddis -yr 2024 -doy 001 -d ./products # 这会下载 sp3, erp, clk 等文件。6.3 准备测站信息文件station.infostation.info文件包含了测站名称、接收机类型、天线类型、天线高、测量方法等信息。你需要根据测站的实际信息创建或修改此文件。可以从IGS站日志文件或数据中心获取。将其放在工程目录下。6.4 配置解算策略sestbl.这是GAMIT解算的“大脑”。你需要从tables目录复制一个模板到工程目录并进行修改。cp tables/sestbl. . vi sestbl.关键参数设置示例Choice of Experiment RELATIVE Orbit integration BASELINE Zenith Delay Model PWL Number of zenith delays 13 Interval zenith delays 2.0 ... Elevation Cutoff 10 Sampling interval 30 Ephemeris IGSF这些设置意味着进行相对定位、采用基线模式轨道积分、使用分段线性天顶延迟模型、截止高度角10度、采样间隔30秒、使用IGS最终精密星历。6.5 配置测站约束sittbl.sittbl.文件用于在平差中对测站坐标施加约束。对于高精度处理通常对一个或多个已知坐标非常好的IGS核心站施加紧约束如2cm对其他站施加松约束或作为待估参数。cp tables/sittbl. . vi sittbl.示例内容usno 0.020 0.020 0.020 0 0 0 alrt 0.500 0.500 0.500 0 0 0 gold 0.500 0.500 0.500 0 0 0表示对usno站在NEU方向施加2cm的约束对alrt和gold施加50cm的约束。6.6 准备先验坐标文件hi.dat 或 .aprGAMIT需要一个测站的先验近似坐标。可以从IGS周解SINEX文件提取或使用sh_rx2apr脚本根据RINEX文件头自动生成近似坐标。sh_rx2apr -f ./rinex/*.24o -t hi.dat -type rh6.7 执行单天解算sh_gamit当所有文件准备就绪后使用sh_gamit脚本驱动整个解算流程。sh_gamit -expt test -d 2024 001 -orbit IGSF -doy 001 -s “usno alrt gold” -noftp参数解释-expt test实验名用于生成结果文件前缀。-d 2024 001处理年份和年积日。-orbit IGSF使用IGSF最终轨道。-s “…”指定要处理的测站列表。-noftp不自动从FTP下载数据因为我们已经手动下载了。6.8 查看结果解算完成后会在当前目录生成一系列结果文件test001.sum解算总结文件最重要。查看RMS、NRMS、基线长度、精度估计等信息。NRMS标准化均方根通常期望接近0.2-0.3。o-test001.包含轨道信息的H文件。q-test001.包含站坐标和协方差信息的Q文件。这个文件是GLOBK进行网平差的输入。7. 使用GLOBK进行网平差与时间序列分析单天解算GAMIT产生了每天的Q文件。GLOBK用于将这些单天解合并进行网平差估计测站坐标和速度并生成时间序列。7.1 准备GLOBK控制文件需要准备两个主要控制文件globk_comb.cmd平差命令文件和glorg_comb.cmd基准定义文件。# 从示例复制并修改 cp $GAMIT_HOME/gamit/globk/globk_comb.cmd . cp $GAMIT_HOME/gamit/globk/glorg_comb.cmd . vi globk_comb.cmd在globk_comb.cmd中你需要指定所有要处理的H文件和Q文件以及各种控制参数如随机游走噪声模型。list h-files.txt list q-files.txt apr_file ../tables/igs_metadata.apr ...你需要创建h-files.txt和q-files.txt列出所有要参与平差的文件路径。7.2 运行GLOBKglobk globk_comb.cmd h-files.txt q-files.txt globk_comb.prt globk_comb.log7.3 运行GLORG定义参考框架glorg glorg_comb.cmd globk_comb.prt glorg_comb.org glorg_comb.log7.4 生成时间序列如果你有长时间跨度的每日Q文件可以使用sh_glred脚本自动进行时间序列分析。sh_glred -expt test -yr 2023 -doy 001 365 -s “usno alrt gold” -opt H G E这会对2023年全年的数据进行Helmert变换H、生成时间序列G和估计速度E。8. 资源占用与性能观察GAMIT/GLOBK是计算密集型软件其性能主要受CPU、内存和磁盘I/O影响。CPU占用sh_gamit运行时会启动多个并行进程如csh_autcln,csh_solve等处理不同测站或不同步骤。使用top或htop命令观察可以看到CPU使用率接近100%多核。基线数量越多、观测时段越长计算时间越长。内存占用处理大规模全球网或长时间数据时内存消耗可能达到数GB。主要消耗在矩阵运算和数据处理中间文件。如果内存不足可能会在solve步骤报错或进程被系统终止。磁盘I/O解算过程中会频繁读写大量的临时文件、表文件和结果文件。使用固态硬盘SSD可以显著提升效率尤其是在处理多天数据时。网络带宽在自动下载RINEX和轨道产品数据时需要稳定的网络连接。CDDIS等数据中心可能对下载速度有一定限制。性能优化建议使用多核CPUGAMIT的部分模块如autcln支持多进程sh_gamit脚本本身也会并行处理部分任务。确保足够内存建议16GB或以上内存用于处理区域或全球网。工作目录放在SSD上减少I/O等待时间。合理设置sestbl.参数例如增加截止高度角如从10度提高到15度可以减少数据量加快计算但可能损失部分低高度角信息。9. 常见问题与排查方法以下是安装和使用过程中最常见的“坑”及其解决方法。问题现象可能原因排查方式解决方案make install编译失败1. 编译器未安装或版本不兼容。2. 依赖库如X11缺失。3.Makefile.config配置错误。查看终端输出的错误信息通常在第一行或最后几行。1. 确认gfortran,gcc,make已安装且版本符合要求。2. 安装libx11-dev,libxt-dev,libmotif-dev。3. 仔细检查Makefile.config中的路径和选项与系统实际路径匹配。sh_gamit找不到命令环境变量PATH未正确设置或未source配置文件。执行echo $PATH查看GAMIT的bin目录是否在其中。执行which sh_gamit。检查~/.bashrc中的export PATH语句确保路径正确。执行source ~/.bashrc。解算时提示找不到表文件1. 表文件未下载或损坏。2. 工程目录下没有正确链接tables目录。3. 环境变量HELP_DIR等未设置。检查工程目录下是否有tables链接并确认链接有效 (ls -l tables)。检查tables目录下是否有luntab.,sestbl.等关键文件。1. 确保从可靠来源获取完整表文件并更新。2. 在工程目录下执行ln -s /path/to/your/tables tables。3. 检查并正确设置所有GAMIT相关环境变量。sh_get_rinex下载数据失败1. 网络连接问题无法访问数据中心如CDDIS。2. 数据中心文件路径或命名规则已更改。3. 测站代码错误或该天无数据。尝试用curl或wget手动访问脚本中构造的FTP/HTTP URL。检查数据中心公告。1. 确保服务器可访问国际网络对于国内用户可能是主要障碍。可尝试其他镜像站如SOPAC, IGN。2. 更新sh_get_rinex等脚本或手动下载所需文件。3. 在数据中心网站验证测站和日期是否有数据。解算结果NRMS值异常高0.51. 先验坐标误差太大。2. 周跳修复不成功。3. 对流层或电离层模型设置不当。4. 观测数据质量差。查看autcln.post.sum或autcln.status文件了解数据清理情况。查看sh_gamit运行日志看有无警告。1. 使用更精确的先验坐标如从IGS周解获取。2. 检查sestbl.中关于周跳修复和编辑的参数。3. 尝试不同的对流层映射函数和延迟估计策略。4. 检查RINEX文件头中的接收机/天线类型是否正确或在station.info中修正。GLOBK平差报错“apr file not found”先验坐标文件.apr路径错误或文件不存在。检查globk_comb.cmd中apr_file指令指定的路径和文件。确保先验坐标文件存在并使用绝对路径或相对于命令执行位置的正确相对路径。生成时间序列图失败缺少图形库或绘图工具如GMT未安装或配置。GAMIT/GLOBK自带的绘图功能依赖gs(Ghostscript)和基础X11。更高级的绘图通常使用GMT需单独安装。安装gs和GMT软件包并正确设置GMT环境变量。对于简单检查可以输出文本格式的时间序列用其他工具如Python Matplotlib绘图。10. 最佳实践与使用建议为了更高效、稳定地使用GAMIT/GLOBK遵循以下实践建议可以节省大量时间。环境隔离与版本管理在服务器或虚拟机上部署避免污染主机系统。考虑使用Docker容器化GAMIT/GLOBK环境以实现一次构建处处运行。对于不同项目或软件版本使用不同的用户或容器。脚本化与自动化手动执行sh_gamit处理单天数据尚可但处理多年数据必须编写Shell脚本或Python脚本来自动化下载、解算、平差和结果提取的整个流程。利用循环和条件判断处理中断和重试。严谨的目录管理采用清晰的目录结构。例如/projects/ ├── config/ # 存放公用的sestbl., sittbl.模板 ├── tables/ # 中央表文件库 ├── data/ │ ├── rinex/2024/001/ │ ├── brdc/2024/001/ │ └── products/2024/001/ └── processing/ ├── project_a/2024001/ ├── project_a/2024002/ └── project_b/...结果验证与交叉检查不要完全信任第一次解算的结果。将你的解算结果与IGS、SOPAC等机构发布的同一天、同一批测站的结果进行对比基线长度、坐标差异。这能有效发现系统配置错误。深入理解控制文件不要盲目复制他人的sestbl.和sittbl.。花时间阅读GAMIT/GLOBK官方文档help/目录下理解每一个参数的含义。针对不同的项目目标如短基线、长基线、区域网、全球网、不同的数据质量调整策略参数。数据备份与日志记录原始观测数据、精密星历产品以及最终的结果文件应定期备份。所有处理脚本都应包含详细的日志记录功能记录每一步的操作、时间、以及关键输出如NRMS便于追溯和复现。合规使用数据确保你下载和使用的GNSS观测数据符合数据提供机构如IGS, UNAVCO, 各国测绘局的使用政策。在发表成果时按规定引用数据来源。打通GAMIT/GLOBK的安装和基础数据处理流程是进入高精度GNSS数据分析领域的关键一步。这个过程虽然初期会遇到各种编译和环境问题但一旦搭建成功你就拥有了一套强大且自由的研究工具。建议从处理少量测站、单天数据开始逐步增加复杂度。重点在于理解整个数据流RINEX - 表文件策略 - 单天解 - 网平差 - 时间序列并学会利用sum文件和日志进行调试。当你能稳定产出可靠的结果时便可以进一步探索其在大规模网络处理、多系统GPS/GLONASS/北斗/Galileo融合、非差精密单点定位等更高级功能上的应用。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门