相同参考系统(椭球)大地坐标与空间直角坐标相互转换

一、大地坐标(B, L, H>>空间直角坐标(X, Y, Z

分享给有需要的人,代码质量勿喷。

//B、L的单位是弧度,H的单位是米;X、Y、Z的单位是米
//大地坐标(B,L,H)-->空间直角坐标(X,Y,Z)
std::vector<double> CoordinateTransform::GeodeticBLH__SpaceRectangularXYZ(
const double &B, const double &L, const double &H, const Ellipsoid &paraEllipsoid)
{
	/* N是卯酉圈曲率半径 */
	double N0 = paraEllipsoid.e1*paraEllipsoid.e1* std::sin(B)*std::sin(B);
	double N = paraEllipsoid.a / std::sqrt(1 - N0);

	double X = (N + H)*std::cos(B)*std::cos(L);
	double Y = (N + H)*std::cos(B)*std::sin(L);
	double Z = (H + N * (paraEllipsoid.b*paraEllipsoid.b / paraEllipsoid.a / paraEllipsoid.a))*std::sin(B);

	std::vector<double> vXYZ = { X,Y,Z };
	return vXYZ;
}

二、空间直角坐标(X, Y, Z>>大地坐标(B, L, H

2.1 方法1

2.2 方法2

分享给有需要的人,代码质量勿喷。

//X、Y、Z的单位是米;B、L的单位是弧度,H的单位是米
//空间直角坐标(X,Y,Z)-->大地坐标(B,L,H)
std::vector<double> CoordinateTransform::SpaceRectangularXYZ__GeodeticBLH(
const double &X, const double &Y, const double &Z, const Ellipsoid &paraEllipsoid)
{
	double L = std::atan2(Y, X);

	double oo = std::atan(Z*paraEllipsoid.a / paraEllipsoid.b / (std::sqrt(X*X + Y * Y)));
	double B0 = Z + (paraEllipsoid.a*paraEllipsoid.a / paraEllipsoid.b / paraEllipsoid.b - 1)*paraEllipsoid.b*std::pow(std::sin(oo), 3);
	double B1 = std::sqrt(X*X + Y * Y) - paraEllipsoid.e1*paraEllipsoid.e1*paraEllipsoid.a*std::pow(std::cos(oo), 3);
	double B = std::atan(B0 / B1);

	double N0 = 1 - paraEllipsoid.b*paraEllipsoid.b / paraEllipsoid.a / paraEllipsoid.a;
	N0 *= std::sin(B)*std::sin(B);
	double N = paraEllipsoid.a / std::sqrt(1 - N0);

	double H = std::sqrt(X*X + Y * Y) / std::cos(B) - N;

	std::vector<double> vBLH = { B / PI * 180,L / PI * 180,H };
	return vBLH;
}

三、参考

[1]孔祥元,郭标明,刘宗泉. 大地测量学基础[M]. 武汉:武汉大学出版社,2001.36-39.

[2] http://blog.sina.com.cn/s/blog_7cdaf8b60102wksh.html

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

累了就要打游戏

把我养胖,搞代码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值