近期公司有个项目,实现卫星六根数实现计算出经纬度坐标,因为在网上找不到java资源。翻阅了大量的文章。然后自己着手去根据matlab代码实现了java语言的转换。
卫星轨道6根数主要有半长轴a、离心率e、轨道倾角i、近心点辐角ω、升交点经度Ω和真近点角φ
注图中 红框中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代码
所有的加减乘除都利用bigdecimal实现,防止用double运算 出现精度丢失,计算有误差。
实现的原理为:通过轨道6根数计算出j2000坐标系,然后把j2000坐标系转换成地心地固坐标系(ECFF)。然后再把ECFF转成经纬度。
j2000坐标系转ECFF其实还是有点复杂的。这个在网上也很难找到资源。我通过翻阅国外博客,看到了相关的处理,引用过来的。如果需求可以私我!!!这里不做解析和讲解。如果有不懂的地方也可以联系我!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)