【WGS84坐标系】经纬度高度转换为WGS84坐标系对应的坐标值

公式+GeographicLib库计算WGS84坐标

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

给定经纬度和海拔高度数据,计算在WGS84坐标系中对应的坐标值数据。
简单记录一下。

思路

1、依据公式计算,公式查相关资料。

2、借助第三方库GeographicLib计算

解决

1、依据公式计算
/*!
* 计算指定经纬度和海拔的点在WGS84坐标系中的对应的坐标值
* \param [in] dLongitude            经度  东经为正 西经为负
* \param [in] dLatitude             纬度  北纬为正 南纬为负
* \param [in] dHeight               海拔  基于海平面
* \param [out] x
* \param [out] y
* \param [out] z
*/
void CalculateWGS84PointByLongLatHeight(const double& dLongitude,  const double& dLatitude, const double& dHeight, double& x, double& y, double& z)
{
      // WGS84参考 ellipsoid 参数
      const double dLongAxis = 6378137.0;  // 长半轴
      const double dShortAxis = 6356752.31424518;  // 短半轴
      // 经纬度转换为弧度
      double dLat = dLatitude * Z_PI / 180;
      double dLon = dLongitude * Z_PI / 180;
      double N = dLongAxis / (sqrt(1 - ((dLongAxis * dLongAxis -  dShortAxis * dShortAxis) / (dLongAxis * dLongAxis)) * sin(dLat) *  sin(dLat)));
      x = (N + dHeight) * cos(dLat) * cos(dLon);
      y = (N + dHeight) * cos(dLat) * sin(dLon);
      z = ((dShortAxis * dShortAxis * N) / (dLongAxis *  dLongAxis) + dHeight) * sin(dLat);
}
2、借助第三方库GeographicLib计算

GeographicLib库的GitHub链接:https://github.com/geographiclib/geographiclib

#include "Geographiclib/Geocentric.hpp"

...
// 创建Geocentric对象
GeographicLib::Geocentric earth(GeographicLib::Constants::WGS84_a(), GeographicLib::Constants::WGS84_f());

// 将经纬度转换为地心直角坐标系中的坐标
double x,y,z;
earth.Forward(dLatitude, dLongitude, dHeight, x, y, z);
...

ok!搞定!数据结果测试通过!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值