序:网上很多算法,基本都是错的,还得去找论文才行。原理就不讲了,我会贴出论文引用。

1.转换过程

(1)确定站心直角坐标系的原点(X0,Y0,Z0)=(0,0,0)的经纬高(B0,L0,H0)作为基准点。

(2)将基准点(B0,L0,H0)转成地心坐标。

(3)将站心直角坐标系的目标点(X1,Y1,Z1)转成地心坐标(eX1,eY1,eZ1)。

(4)将地心坐标(eX1,eY1,eZ1)转成经纬高(B1,L1,H1)。

2.C#代码

    /// <summary>/// 使用WGS84椭球体/// </summary>public class CoorTransform{#region C#实现方法/三角函数及迭代法/// <summary>/// 地心坐标转经纬高/// </summary>/// <param name="X"></param>/// <param name="Y"></param>/// <param name="Z"></param>/// <param name="aAxis"></param>/// <param name="bAxis"></param>/// <returns></returns>public static Vector3D XYZtoBLH(double X, double Y, double Z, double aAxis = 6378137,             double bAxis = 6356752.3142){double targetH, targetB, targetL;double e1 = (Math.Pow(aAxis, 2) - Math.Pow(bAxis, 2)) / Math.Pow(aAxis, 2);double e2 = (Math.Pow(aAxis, 2) - Math.Pow(bAxis, 2)) / Math.Pow(bAxis, 2);double S = Math.Sqrt(Math.Pow(X, 2) + Math.Pow(Y, 2));double cosL = X / S;double B = 0;double L = 0;L = Math.Acos(cosL);L = Math.Abs(L);double tanB = Z / S;B = Math.Atan(tanB);double c = aAxis * aAxis / bAxis;double preB0 = 0.0;double ll = 0.0;double N = 0.0;//迭代计算纬度do{preB0 = B;ll = Math.Pow(Math.Cos(B), 2) * e2;N = c / Math.Sqrt(1 + ll);tanB = (Z + N * e1 * Math.Sin(B)) / S;B = Math.Atan(tanB);} while (Math.Abs(preB0 - B) >= 0.0000000001);ll = Math.Pow(Math.Cos(B), 2) * e2;N = c / Math.Sqrt(1 + ll);targetH = S / Math.Cos(B) - N;// * (1 - e1);targetB = B * 180 / Math.PI;targetL = L * 180 / Math.PI;return new Vector3D(targetB, targetL, targetH);}/// <summary>/// 经纬高转地心坐标/// </summary>/// <param name="B"></param>/// <param name="L"></param>/// <param name="H"></param>/// <param name="aAxis"></param>/// <param name="bAxis"></param>/// <returns></returns>public static Vector3D BLHtoXYZ(double B, double L, double H, double aAxis = 6378137, double bAxis = 6356752.3142){double targetX, targetY, targetZ;double dblD2R = Math.PI / 180.0;double f = 1 / 298.257223563;double e2 = 2 * f - f * f;//double e1 = Math.Sqrt(Math.Pow(aAxis, 2) - Math.Pow(bAxis, 2)) / Math.Pow(aAxis, 2);double W = Math.Sqrt(1 - e2 * Math.Sin(B * dblD2R) * Math.Sin(B * dblD2R));double N = aAxis / W;//double N = aAxis / Math.Sqrt(1.0 - Math.Pow(e1, 2) * Math.Pow(Math.Sin(B * dblD2R), 2));targetX = (N + H) * Math.Cos(B * dblD2R) * Math.Cos(L * dblD2R);targetY = (N + H) * Math.Cos(B * dblD2R) * Math.Sin(L * dblD2R);targetZ = (N * (1.0 - e2) + H) * Math.Sin(B * dblD2R);return new Vector3D(targetX, targetY, targetZ);}/// <summary>/// 计算站心直角坐标系中的相对坐标在地心坐标系中的坐标/// </summary>/// <param name="X0">站心原点的地心坐标X</param>/// <param name="Y0">站心原点的地心坐标Y</param>/// <param name="Z0">站心原点的地心坐标Z</param>/// <param name="B0">站心原点的纬度</param>/// <param name="L0">站心原点的经度</param>/// <param name="H0">站心原点的高度</param>/// <param name="rX">相对站心原点的目标坐标X</param>/// <param name="rY">相对站心原点的目标坐标Y</param>/// <param name="rZ">相对站心原点的目标坐标Z</param>/// <returns></returns>public static Vector3D CalRelaXYZBasedOnBLH(double X0,double Y0,double Z0,double B0,double L0,double H0,double rX,double rY,double rZ){double dblD2R = Math.PI / 180.0;var AX = -Math.Sin(L0 * dblD2R) * rX + -Math.Sin(B0 * dblD2R) * Math.Cos(L0 * dblD2R) * rY + Math.Cos(B0 * dblD2R) * Math.Cos(L0 * dblD2R) * rZ;var AY = -Math.Cos(L0 * dblD2R) * rX + -Math.Sin(B0 * dblD2R) * Math.Sin(L0 * dblD2R) * rY + Math.Cos(B0 * dblD2R) * Math.Sin(L0 * dblD2R) * rZ;var AZ = 0 + Math.Cos(B0 * dblD2R) * rY + Math.Sin(B0 * dblD2R) * rZ;var relaX = AX + X0;var relaY = AY + Y0;var relaZ = AZ + Z0;return new Vector3D(relaX, relaY, relaZ);}#endregion}

3.转换代码,为了直观变量名使用中文

double 基准点纬度 = 34, 基准点经度 = 112, 基准点高 = 300;
double 目标站心坐标X = 0, 目标站心坐标Y = 100000, 目标站心坐标Z = 8000;
var 站心原点的地心坐标 = CoorTransform.BLHtoXYZ(基准点纬度, 基准点经度, 基准点高);
var 目标的地心坐标 = CoorTransform.CalRelaXYZBasedOnBLH(站心原点的地心坐标.X, 站心原点的地心坐标.Y, 站心原点的地心坐标.Z, 基准点纬度, 基准点经度, 基准点高, 目标站心坐标X, 目标站心坐标Y, 目标站心坐标Z);
var 目标的纬经高 = CoorTransform.XYZtoBLH(目标的地心坐标.X, 目标的地心坐标.Y, 目标的地心坐标.Z);

4.结果

[注:]

1.直角坐标单位皆为米。

2.本文的站心直角坐标为东、北、天,即X+ => 东,Y+ => 北,Z+ => 天。如果使用北、天、东注意下转换。

引用

[1]凌震莹.大地坐标系与站心地平直角坐标系的坐标转换[J].声学与电子工程,2009(04):31-34.

站心直角坐标系转经纬高相关推荐

  1. 地心直角坐标系转经纬高

    /**@func TheGeoCoordinateSysRotatesToLonAndLat*@brief 地心直角坐标系转经纬高*@input*@output*@return 经纬高*@author ...

  2. 经纬高坐标系-ECEF坐标系-ENU坐标系

    无人机搭载的RTK获得的经纬高坐标要转换为东北天坐标,才能用于局部的导航和定位.为了这个目的,查阅资料,越查越懵逼,竟然这么多的坐标系,略懂之后,将学到的信息记录如下,很多跟我的目的:"RT ...

  3. 经纬高坐标系转到东北天坐标系

    经纬高坐标系转到东北天坐标系 基本思路:首先把经纬高(大地坐标系.lla.llh)转到直角坐标系(地心地固直角坐标系(ECEF).xyz),然后再转为局部坐标系下(东北天坐标系.以第一点作为东北天坐标 ...

  4. 测站坐标系、地心非惯性系、经纬高互转

    目录 一.坐标系转换 1.1 测站坐标系rae(极坐标系)和空间直角坐标系xyz(东北天坐标系)互转 1.1.1.原理 1.1.2.公式 1.1.3.python代码 1.2 空间直角坐标系xyz(东 ...

  5. LLA(经纬高)坐标转换成ENU(东北天)坐标的详细推导

    这是一篇经纬高(LLA)坐标转东北天坐标(ENU)的详细推导,并给出近似转换的过程和结果 参考资料: https://blog.csdn.net/qq_34213260/article/details ...

  6. 经纬高坐标转东北天坐标

    目录 1 问题描述 2 解决方案 2.1 经纬高转ECEF 2.2 ECEF转东北天 2.3 代入求解 2.3.1 东向化简 2.3.2 北向化简 2.3.3 天向化简 2.4 总结 1 问题描述 已 ...

  7. 已知经纬高求其在无人机图像中的像素点坐标

    背景:已知无人机拍摄时刻的经纬高(WGS84坐标系)以及物点的经纬高,求解该物点在图像中的像素点位置 三种像空间坐标系定义: ①德国汉诺威大学(Hannover)定义的像平面坐标系BLUH:原点位于像 ...

  8. 更好的设计 | 苹果cms10《 SKRN》自适应影视站绿色清新精品模板高端大气宽屏轮播

    苹果cms10< SKRN>自适应影视站绿色清新精品模板高端大气宽屏轮播 可以拿来做影视站的经典侧栏样式模板.自定义幻灯,包含了专题.剧情.明星.留言页面等样式及全部功能 此款为私人10k ...

  9. 利用不同卫星的仰角方位角绘制站心星空图

    简介 站心坐标系,是以接收机位置作为zh,正北方向为方位角零度方向,天顶方向为仰角90°方向的坐标系.计算不同卫星相对于接收机位置的仰角与方位角,确定卫星在坐标系中的位置,即可绘制站心星空图.中心 读 ...

最新文章

  1. 运用策略路由实现双出口数据的分流
  2. Windows phone 应用开发[12]-Pex 构建自动化白盒测试[下]
  3. Acey.ExcelX组件如何保证稳定性?
  4. UltraEdit v18及注册
  5. Java 洛谷 P1425 小鱼的游泳时间
  6. base cap 分布式_干货分享:基于本地消息表的分布式事务解决方案总结
  7. 个人觉的不错的文章[来自CSDN]
  8. C#LeetCode刷题之#206-反转链表(Reverse Linked List)
  9. mysql触发器的基本操作_MySQL基本操作-触发器
  10. 47 - 算法 - Leetcode-160 -相交链表
  11. elasticsearch 导入基础数据并索引之 geo_shape
  12. ecshop 邮件模板 html,给ecshop后台增加新的邮件模板
  13. 特征金字塔:FPN网络 - Pytorch实现
  14. modbus主机、从机、虚拟串口调试软件
  15. 无线模块的参数介绍和选型要点
  16. gc算法 java_Java的GC机制及算法
  17. 小龙女的真面目和杨过跳崖真相--其实不想走!
  18. uni-app时间格式转换
  19. rsync网络文件传输
  20. [Lua]字符串及字符串匹配

热门文章

  1. ​ChatGPT 国产平替上线;FTC 阻止微软 690 亿美元收购动视暴雪;PHP 8.2.0 发布|极客头条
  2. excel柱形图详细绘制教程
  3. [Usaco2009 Dec] 过路费
  4. 配资的时候如何分辨虚拟盘
  5. 界面功能分析——微信6.7.3 与最新版微信7.0.2
  6. win10 HBuilderX最新版本微信开发者工具运行失败
  7. 【DDL】GRANT和REVOKE
  8. 物联网BLE裸机程序开发 -- (1)nRF52840配置GPIO输出驱动LED
  9. 远程控制软件anydesk简介
  10. 26 | MySQL主从延迟分析以及HA保障(柯南版的中篇)