java版通过轨道6根数实现计算出经纬度坐标

java版通过轨道6根数实现计算出经纬度坐标_第1张图片

近期公司有个项目,实现卫星六根数实现计算出经纬度坐标,因为在网上找不到java资源。翻阅了大量的文章。然后自己着手去根据matlab代码实现了java语言的转换。

卫星轨道6根数主要有半长轴a、离心率e、轨道倾角i、近心点辐角ω、升交点经度Ω和真近点角φ

java版通过轨道6根数实现计算出经纬度坐标_第2张图片

注图中 红框中98.790,60.00,30.00并不是轨道倾角i、近心点辐角ω、升交点经度,还需要具体运算。得出具体的数值

输入参数:
miu = 3.9860047e14;  %地球引力常数(m^3/s^2)
a_o = 6862.8; %轨道半长轴 (km)
e_o = 0.001884; %偏心率 
i_o = 98.79*pi/180 ;   %轨道倾角 (度)
w_o = 60*pi/180 ;  %近地点幅角(度)
Omiga_o = 30*pi/180; %升交点赤经(度)
t0=[2022 5 1 0 0 0];%过近地点时刻
t=[2022 5 1 17 10 0];%当前时刻

最后用java代码计算的经纬度以及高度值分别为-92.25672304173123, 31.882691687797774, 479170.1556135472。经过验证和真实数值差别不是很大。真实数值为:-92.256756315892990,31.882400836824583,4.791700736332247e+05

具体java代码实现截图如下:

java版通过轨道6根数实现计算出经纬度坐标_第3张图片

java版通过轨道6根数实现计算出经纬度坐标_第4张图片

java版通过轨道6根数实现计算出经纬度坐标_第5张图片 以上只截了部分的java代码

所有的加减乘除都利用bigdecimal实现,防止用double运算 出现精度丢失,计算有误差。

实现的原理为:通过轨道6根数计算出j2000坐标系,然后把j2000坐标系转换成地心地固坐标系(ECFF)。然后再把ECFF转成具体的经纬度。

j2000坐标系转ECFF其实还是有点复杂的。这个在网上也很难找到资源。我通过翻阅国外博客,看到了相关的处理,引用过来的。如果需求可以私我!!!这里不做解析和讲解。如果有不懂的地方也可以联系我!代码我放到这个文章java 实现EME2000(国家大地坐标系)转ECEF坐标系(地心地固坐标系)_王威振的csdn的博客-CSDN博客_java 大地2000

你可能感兴趣的:(java,java,卫星轨道,卫星轨道计算经纬度,6根数计算经纬度)