0. 引子
在测绘、地质勘探、地球物理等领域,经常需要将大地高(椭球高) 转换为正常高(85高程),或者获取某点的重力异常、垂线偏差、地磁场要素。传统做法是分别使用Geoid模型、重力场模型和地磁场模型,手动计算、拼接,效率低且易出错。
本文将介绍一款自研的高程异常计算器(C# WinForms),它集成了:
-
大地水准面模型(如EGM2008/EGM2020,.pgm格式)
-
重力场模型(.egm格式,可计算重力位、垂线偏差)
-
地磁场模型(内置WMM2025,可计算磁偏角/磁倾角/总强度)
-
局部拟合功能(平面/二次曲面,用于残差精化)
-
批量处理、KML导出、精度评估等实用功能
软件核心算法基于C# + MathNet.Numerics(SVD求解)、GeographicLib等库,全部代码可编译运行。
本文适合:测绘工程师、GIS开发者、地球物理爱好者、C#桌面开发学习者。
1. 软件主要功能概览
| 功能模块 | 说明 |
|---|---|
| 模型加载 | 支持.pgm网格Geoid文件、.egm重力场文件夹、自动加载WMM2025地磁模型 |
| 批量计算 | 导入CSV/TXT点位(点名,纬度,经度,椭球高),一键输出高程异常、正常高、重力分量、垂线偏差、地磁要素 |
| 区域拟合 | 利用已知点(椭球高+正常高)计算ΔH残差,构建平面/二次曲面模型,提高局部精度 |
| 检查点评估 | 用独立检查点计算残差统计(平均值、标准差、RMS),评价拟合质量 |
| 未知点预测 | 输入未知点大地高,输出经模型修正的正常高 |
| 结果导出 | CSV表格、KML点位(可在Google Earth中可视化) |
| 注册保护 | 基于硬盘序列号的MD5注册机制,适合商业化分发 |
2. 核心算法与原理
2.1 高程异常与正常高转换
-
高程异常
ζ = h - H85,其中h为大地高,H85为正常高。 -
软件通过Geoid模型直接获取
ζ,进而H85 = h - ζ。
2.2 拟合模型(残差精化)
有时Geoid模型在局部区域存在系统偏差,利用实测正常高点计算残差:
ΔH = (h - H85_实测) - ζ_模型
然后建立残差与地理坐标的拟合函数:
-
平面拟合 :
ΔH = a*x + b*y + c -
二次曲面拟合 :
ΔH = a*x² + b*y² + c*x*y + d*x + e*y + f
经过标准化 后使用SVD分解求解最小二乘,保证数值稳定性。
2.3 重力场与垂线偏差
利用.egm模型文件(如EGM2008),可计算:
-
重力位
W -
重力矢量分量
gx, gy, gz -
垂线偏差分量
ξ(子午圈),η(卯酉圈),输出单位为角秒
2.4 地磁场
使用 CoordinateSharp.Magnetic 库内置的WMM2025模型,计算:
-
总强度 (nT)
-
磁偏角 Declination (°)
-
磁倾角 Inclination (°)
3. 软件界面与使用步骤
3.1 首次运行与注册

-
点击"读取机器码" → 复制机器码 → 向作者索要注册码 → 输入并注册。
-
注册成功后所有功能启用。
3.2 加载模型
-
Geoid :选择
.pgm文件(如egm2008-5.pgm)。 -
重力场 (可选):选择包含
.egm文件的文件夹。 -
地磁场:点击"加载地磁场",自动加载WMM2025。
-

3.3 批量计算(Tab1)
-
准备数据文件(示例):
A01,39.9042,116.4074,45.6 A02,31.2304,121.4737,12.3 -
点击"导入" → 设置年份(如
2025.5)→ 点击"批量计算"。 -
结果自动填充到表格,包括:
-
高程异常 ζ (m)
-
正常高 H85 (m)
-
重力位及分量
-
垂线偏差 (″)
-
地磁场三要素
-
3.4 区域拟合精化(Tab2)
适用场景:局部区域实测了若干水准点(已知正常高),希望修正Geoid模型在该区域的系统误差。
步骤:
-
已知点 :导入
点名,经度,纬度,椭球高,正常高(至少3个平面/6个二次)。- 点击"计算ΔH" → 得到每点的残差。
-
检查点(可选):相同格式,用于评估拟合质量。
-
拟合模型:选择"平面拟合"或"二次曲面拟合" → 点击"拟合模型"。
-
精度检查:点击"精度检查"查看已知点/检查点的残差统计(均值、标准差、RMS)。
-
未知点 :导入
点名,经度,纬度,椭球高→ 点击"计算未知点" → 输出经拟合修正后的正常高。
3.5 导出KML
在"批量计算"页,点击"导出KML"可将所有点位生成Google Earth可读文件,方便外业核查。
4. 代码关键技术解析
4.1 度分秒解析
支持 31°23'45.67" 或 31 23 45.67 或传统 3123.4567(度分秒连写)格式。核心函数:
csharp
private double DMSToDegrees(string dms)
{
// 正则匹配度°分′秒″,或空格分隔,或旧格式 DDDMMSS.SS
}
4.2 SVD最小二乘拟合
使用 MathNet.Numerics.LinearAlgebra 的SVD分解求解超定方程组:
private double[] SolveLeastSquaresSVD(double[,] A, double[] b)
{
var matrix = Matrix<double>.Build.DenseOfArray(A);
var svd = matrix.Svd(true);
// 伪逆求解
}
该方法对病态矩阵稳定,避免传统法方程求逆。
4.3 数据标准化
标准化后系数更具可解释性。
4.4 硬件机器码生成
5. 运行环境与依赖库
-
.NET Framework 4.7.2 或更高版本
-
NuGet包:
-
MathNet.Numerics(线性代数) -
GeographicLib(地理计算,可选)
-
6. 软件获取与二次开发
本软件源码可联系作者获取,或作为商业软件定制。欢迎测绘、地信相关专业的同学参考学习。

7. 总结
该工具集成了多种地球物理模型,通过简单界面即可完成:
-
高程系统转换(椭球高 → 正常高)
-
重力场与地磁场查询
-
局部区域拟合精化
-
批量数据处理及可视化
适合测绘外业数据处理、教学演示、科研辅助。后续可增加更多Geoid格式支持、动态投影、实时GPS数据接入等功能。