一、概述
- 主要内容:本文基于GeographicLib开源库,实现了一个地理空间坐标转换功能,主要用于根据观测站的位置和目标的相对方位信息,计算目标在地球坐标系中的绝对位置。
- 输入:观测站的经纬度坐标(纬度、经度、海拔高度)和目标的相对观测参数(方位角、俯仰角、距离)
- 输出:目标在地心固定坐标系(ECEF)中的三维坐标(X,Y,Z)
二、代码
#include <iostream>
#include <iomanip>
#include <cmath>
#include <GeographicLib/Geocentric.hpp>
#include <GeographicLib/LocalCartesian.hpp>#ifndef M_PI
#define M_PI (3.14159265358979323846)
#endifvoid calculateTargetPosition(double station_lat, double station_lon, double station_alt,double azimuth, double elevation, double distance,double& target_x, double& target_y, double& target_z) {// 验证输入参数if (distance <= 0) {std::cerr << "错误:距离必须为正数" << std::endl;return;}// 初始化局部坐标系GeographicLib::LocalCartesian proj(station_lat, station_lon, station_alt,GeographicLib::Geocentric::WGS84());// 计算局部ENU坐标(东北天)double east = distance * cos(elevation) * sin(azimuth);double north = distance * cos(elevation) * cos(azimuth);double up = distance * sin(elevation);// 转换为地心固定坐标系下的经纬高double lat=0., lon=0., alt=0.;proj.Reverse(east, north, up, lat, lon, alt);// 转换为地心固定坐标系下的XYZconst GeographicLib::Geocentric& earth = GeographicLib::Geocentric::WGS84();earth.Forward(lat, lon, alt, target_x, target_y, target_z);
}int main() {// 示例:站址坐标(纬度,经度,高度)double station_lat = 40.0; // 北纬40度double station_lon = 116.0; // 东经116度double station_alt = 100.0; // 海拔100米// 观测目标参数double azimuth = 206.043782 * M_PI/180.0; // 方位角double elevation = 15.318917 * M_PI/180.0; // 俯仰角double distance = 929807.813; // 距离(米)// 计算结果double target_x, target_y, target_z;calculateTargetPosition(station_lat, station_lon, station_alt,azimuth, elevation, distance,target_x, target_y, target_z);std::cout << std::fixed << std::setprecision(3) << "Target ECEF (X,Y,Z): "<< target_x << ", "<< target_y << ", "<< target_z << std::endl;return 0;
}
三、运行结果
在Windows/GeographicLib-2.1.1环境下,上述代码程序运行输出结果如下(正确性已验证):
Target ECEF (X,Y,Z): -2100493.586, 5204826.766, 3618737.188
四、GeographicLib库简单介绍
1、GeographicLib 功能定位
- GeographicLib 库聚焦于地表及近地空间的地理计算和地固坐标系转换(如地心地固坐标系ECEF、大地坐标系BLH),未包含天球惯性坐标系(如 J2000)的转换功能。J2000 转换依赖岁差章动、恒星时等动态天文参数,需实时地球定向数据(EOP),而GeographicLib 未集成此类模型。
- 其官方网址为: https://geographiclib.sourceforge.io
2、GeographicLib 的核心能力
(1)大地测量计算
- 大圆距离与方位角计算(如两点间测地线距离、多个点包围的球面面积)
- 测地线路径规划(如航线生成)
- 地表曲率、子午线弧长等椭球模型计算
(2)坐标系统转换
- 经纬高(BLH)↔地固直角坐标(ECEF)(支持 WGS84、GRS80 等椭球体)
- 局部坐标系转换(如ENU/NED与ECEF互转)
- 投影坐标系转换(UTM、UPS、MGRS)
(3)地球物理模型
- 重力场计算(如 EGM2008 模型)
- 地磁场模拟(如 WMM2020 模型)