xyz坐标转换ybc_GNSS仰角和方位角的计算及代码,XYZ转BLH坐标的代码及原理
function [E,A]= Get_EA(sx,sy,sz,x,y,z)
%GET_EA Summary of this function goes here
%sx,sy,sz:站点的XYZ坐标,x,y,z:卫星的XYZ坐标
% Detailed explanation goes here
[sb,sl]=XYZtoBLH(sx,sy,sz);
T=[-sin(sb)*cos(sl) -sin(sb)*sin(sl) cos(sb);
-sin(sl) cos(sl) 0;
cos(sb)*cos(sl) cos(sb)*sin(sl) sin(sb)];%transition matrix(XYZ to NEU)
deta_xyz=[x,y,z]-[sx,sy,sz];
NEU=T*(deta_xyz)';
E=atan(NEU(3)/sqrt(NEU(1)*NEU(1)+NEU(2)*NEU(2)));
A=atan(abs(NEU(2)/NEU(1)));
if NEU(1)>0
if NEU(2)>0
else
A=2*pi-A;
end
else
if NEU(2)>0
A=pi-A;
else
A=pi+A;
end
end
end
计算仰角\(E\)和方位角\(A\)的公式:
\[E=arctan\left(\frac{cos(\phi_2-\phi_1)\times cos\beta-0.15}{\sqrt{1-\left[cos(\phi_2-\phi_1)\times cos\beta\right]^2}}\right)\tag{1}
\]
\[A=arctan\left(\frac{tan(\phi_2-\phi_1)}{sin\beta}\right)\tag{2}
\]
对于输入时是XYZ坐标的卫星位置和接收机位置还要进行坐标转换
先将接收机位置的XYZ坐标转换成大地坐标系(BLH),转换公式为:
\[L=arctan\left(\frac{Y}{X}\right)\tag{3}
\]
\[B=arctan\left(\frac{Z(N+H)}{\sqrt{(X^2+Y^2)[N(1-e^2)+H]}}\right)\tag{4}
\]
\[H=\frac{Z}{sinB}-N(1-e^2)\tag{5}
\]
\(N\)为卵冒圈的半径,\(e\)表示椭球扁率,\(a\)和\(b\)分别表示长半轴和短半轴。
\[N=\frac{a}{\sqrt{1-e^2sin^2B}},\ \ e^2=a^2-b^2\tag{6}
\]
利用上面的式子有一个问题就是式\((4)\)和\((5)\)中有交叉变量。因此一般采用下面的方法迭代计算:
首先计算出\(B\)的初值
\[B=arctan\left(\frac{Z}{\sqrt{X^2+Y^2}}\right)\tag{7}
\]
然后利用\(B\)的初值求出\(H、N\)的初值,再求定\(B\)的值
\[N=\frac{a}{\sqrt{1-e^2sin^2B}}\tag{8}
\]
XYZ坐标转换为BLH坐标的matlab程序为:
function [B,L] = XYZtoBLH(X,Y,Z)
%WGS84坐标转换到大地经纬度
% Detailed explanation goes here
a=6378137;
e2=0.0066943799013;
L=atan(abs(Y/X));
if Y>0
if X>0
else
L=pi-L;
end
else
if X>0
L=2*pi-L;
else
L=pi+L;
end
end
B0=atan(Z/sqrt(X^2+Y^2));
while 1
N=a/sqrt(1-e2*sin(B0)*sin(B0));
H=Z/sin(B0)-N*(1-e2);
B=atan(Z*(N+H)/(sqrt(X^2+Y^2)*(N*(1-e2)+H)));
if abs(B-B0)<1e-6;break;end
B0=B;
end
N=a/sqrt(1-e2*sin(B)*sin(B));
end
也可以采用如下的方法直接转换
\[L=arctan(\frac{Y}{X})\tag{9}
\]
\[e'^2=\frac{a^2-b^2}{b^2},\ \ \ \theta=arctan\left(\frac{Z·a}{\sqrt{X^2+Y^2}·b}\right)\tag{10}
\]
\[B=arctan\left(\frac{Z+e'^2bsin^3\theta}{\sqrt{X^2+Y^2}-e'^2acos^3\theta}\right)\tag{11}
\]
\[H=\frac{\sqrt{X^2+Y^2}}{cosB}-N\tag{12}
\]
xyz坐标转换ybc_GNSS仰角和方位角的计算及代码,XYZ转BLH坐标的代码及原理相关推荐
- 【北斗导航】GNSS仰角和方位角的计算和XYZ与BLH的坐标转换(附原理matlab源代码)
目录 GNSS仰角和方位角的计算和XYZ与BLH的坐标转换 GNSS仰角和方位角的计算和XYZ与BLH的坐标转换 本代码是计算GNSS卫星仰角和方位角,并且实现了XYZ与BLH之间的坐标转换.下面是具 ...
- 北斗导航 | GNSS仰角和方位角的计算和XYZ与BLH的坐标转换(附原理matlab源代码)
================================================ 博主github:https://github.com/MichaelBeechan 博主CSDN:h ...
- 根据卫星仰角和方位角使用html5绘制天空图(投影图)
本文记录根据卫星仰角和方位角使用html5绘制天空图(投影图). 也就是根据这两个角度绘制坐标点在圆形上的投影. 术语: 方位角:从标准方向的北端起,顺时针方向到直线的水平角称为该直线的方位角.方位角 ...
- GNSS基本概念(1):仰角和方位角(Elevation and Azimuth)
仰角和方位角描述了物体在天空相对于观察者的位置,如下图所示: 一.仰角(Elevation) 有时也称海拔高度.当方位角测量完毕之后,需要用仰角来描述被观察物体相对于观察者的高度.如果观察者在地面上, ...
- 太阳 仰角和方位角(Elevation and Azimuth)
太阳 仰角和方位角(Elevation and Azimuth) 引用 一.仰角和方位角(Elevation and Azimuth) 仰角和方位角描述了物体在天空相对于观察者的位置. 二.仰角(El ...
- gps两点距离 php,PHP应用:PHP计算百度地图两个GPS坐标之间距离的方法
<PHP应用:PHP计算百度地图两个GPS坐标之间距离的方法>要点: 本文介绍了PHP应用:PHP计算百度地图两个GPS坐标之间距离的方法,希望对您有用.如果有疑问,可以联系我们. 本文实 ...
- 自己写的计算时间坐标的代码
1 数据库sql查询的数据 2 最终echarts画出来的图 3 代码如下 计算主方法方法 /*** echarts算时间轴代码(算流量的代码),这里的时间间隔为5秒钟,一分钟的流量,totalSiz ...
- php 地图 距离,PHP计算百度地图两个GPS坐标之间距离的方法
这篇文章主要介绍了PHP计算百度地图两个GPS坐标之间距离的方法,是针对百度地图接口开发的典型应用,需要的朋友可以参考下 本文实例讲述了PHP计算百度地图两个GPS坐标之间距离的方法.分享给大家供大家 ...
- php实现两个大整数求和,PHP计算两个特别大的整数实例代码
这篇文章主要介绍了关于PHP计算两个特别大的整数实例代码,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 废话不多说了,具体代码如下所示: function getIntAdd($a,$ ...
- 栈应用_计算按运算符优先级分布的算式(代码、分析、汇编)
目录: 代码: 分析: 汇编: 代码: LinkList.h LinkList.c LinkStack.h LinkStack.c 栈-线性表 main.c #include <stdio.h& ...
最新文章
- Linux大文件处理,伪分区
- 使用MySQL的geometry类型处理经纬度距离问题
- J2EE业务层模式:服务门面,应用服务,以及业务委托,服务定位器
- SharePoint KB
- 个人电脑 公司电脑 代理_这样的电脑谁来用?一体式水冷,磁悬浮风扇!
- Redis系列 --第一篇
- 百度第三季度研发费用62亿元,同比增长35%,持续高强度研发投入
- c++ primer5 第一章练习题答案 尚未完成 后续补充(基本已经完结)
- 高三!忏悔ing~(在这儿的第一篇随笔)
- mysql(5.6及以下)解析json
- 190702每日一句 孤独之前是迷茫,孤独之后是成长
- MemTest64内存测试
- 宏观经济学 马工程教材个人笔记整理
- 电容单位F法拉、mF毫法、纳法nF、皮法pF之间是如何转换
- dede标签详细的dede标签大全,dede标签在线学习
- Faceboxes pytorch代码解读(一) box_utils.py(上篇)
- 数据之美:迄今 10 佳数据可视化示例
- 怎样制作一个漂亮的艺术二维码?
- 信息论小课堂:纠错码(海明码在信息传输编码时,通过巧妙的信道编码保证有了错误能够自动纠错。)
- 微信公众平台消息体加解密实现
热门文章
- 注意力、自注意力和多头注意力
- 【Java编程】写一个将华氏温度转换成摄氏温度的程序,转换的公式是:°F = (9/5)*°C + 32 其中C表示摄氏温度,F表示华氏温度。
- 实现px和vw的转换
- Win10账户锁定的解除方法
- 达梦 DCA 培训总结
- word转PDF时,英文单词的字母间距问题
- 北京地区的图像处理公司
- 张小龙是高球冠军,大前研一是物理学家:​为什么牛人在很多领域都是世界第一?...
- #python#生物信息学 提取文本某列信息 #提取氨基酸序列并且提取氨基酸结构序列与之对应
- MySQL 查询题型总结