目录

一、准备以及结果图

二、数据

三、计算

四、全部代码

附:


一、准备以及结果图

软件:eclipse(2020-6版本)带有WindowBuilder插件

编程语言:Java

结果图:

二、数据

t0e

星历的基准时间单位:秒

a_sqrt

轨道半长轴的平方根单位:米

e1

轨道离心率单位:无量纲

i0

倾角(在 t0e时)单位:rad 弧度

omega0

升交点经度(在每星期历元上)单位:rad 弧度

M0

平均近点角(在 t0e时)单位:rad 弧度

I

倾角的变化率单位:rad/s弧度/

omega

升交点经度的变化率单位:rad/s弧度/

ln

对平均角速度的校正值单位:rad/s弧度/

Cuc

对纬度幅角余弦的校正值单位:rad 弧度

Cus

对纬度幅角正弦的校正值单位:rad 弧度

Crc

对轨道半径余弦的校正值单位:米

Crs

对轨道半径正弦的校正值单位:米

Cic

对倾角余弦的校正值单位:rad 弧度

Cis

对倾角正弦的校正值单位:rad 弧度

  • 椭球引力常数:  μ = 3.986005e14 m3s-2(GPS )
  • 地球自转角速度 we = 7.2921151467e-5 (rad/s)
  • t1=4800.0;            // 观测时间
  • toe=0.00000000000000000;    // 星历基准时间
  • toc=0.00000000000000000;    // 卫星钟基准时间
  • a_sqrt =  5153.7127704599998 //轨道半长轴平方根
  • //卫星钟飘参数
  • a0 =  0.00028600683435800001
  • a1 =  1.7053025658199999e-012
  • a2 =  0
  • //平均角速度摄动改正参数
  • ln =  4.1115998360700002e-009
  • //参考时刻的平近点角
  • M0     =  1.2263973009600000
  • //轨道离心率
  • e1     =  0.0053100715158500003
  • //近地点角距
  • w    =  -1.6819446292500000
  • //对轨道半径正弦的修正值
  • Crs   =  -105.43750000000000
  • //在轨道径向方向上周期改正余余弦的振幅
  • Crc   =  175.34375000000000
  • //轨道延迹方向上周期改正余弦振幅
  • Cuc   =  -5.5264681577700003e-006
  • //轨道延迹方向上周期改正正弦振幅
  • Cus   =  1.1192634701700000e-005
  • //轨道倾角周期改正余弦项振幅
  • Cic   =  -9.6857547759999998e-008
  • //轨道倾角周期改正正弦项振幅
  • Cis   =  -7.8231096267699997e-008
  • //参考时刻升交点赤径主项
  • omega0   =  -2.9080127721900002
  • //升交点赤径在赤道平面中的长期变化
  • omega     =  -7.7124641122299999e-009
  • //参考时间轨道倾角
  • i0    =  0.97432927738800001
  • //轨道倾角变化率
  • I    =  1.8643633724999999e-010

三、计算

计算卫星轨道半长轴

double a_sqrt = Double.parseDouble(a_1.getText().trim());
double a = a_sqrt * a_sqrt;
String Sa = "" + a;
a__1.setText(Sa);

计算卫星运动的平均角速度n

double ln = Double.parseDouble(ln_2.getText().trim());
double u = Double.parseDouble(u_2.getText().trim());
double n0 = Math.pow(u / Math.pow(a, 3), 0.5);
double n = n0 + ln;
String Sn = "" + n;
n_2.setText(Sn);

计算规划时间

double toe = Double.parseDouble(toe_1.getText().trim());
double toc = Double.parseDouble(toc_1.getText().trim());
double t1 = Double.parseDouble(t1_1.getText().trim());
double a0 = Double.parseDouble(a0_1.getText().trim());
double a1 = Double.parseDouble(a1_1.getText().trim());
double a2 = Double.parseDouble(a2_1.getText().trim());
double lt = a0 + a1 * (t1 - toc) + a2 * ((t1 - toc) * (t1 - toc));// 计算卫星钟差
double t = t1 - lt;
double tk = t - toe;
String Stk = "" + tk;
tk_1.setText(Stk);

计算真近点角Vk

double M0 = Double.parseDouble(M0_1.getText().trim());
double e1 = Double.parseDouble(e_1.getText().trim());
double Mk = M0 + n * tk;
String SMk = "" + Mk;
Mk_1.setText(SMk);double Ek_old = Mk;
double Ek_new = Mk + e1 * Math.sin(Ek_old);
int i = 1;
while (Math.abs(Ek_new - Ek_old) > 10e-8) {Ek_old = Ek_new;Ek_new = Mk + e1 * Math.sin(Ek_old);i += 1;if (i > 10)// ?break;}double Ek = Ek_new;String SEk = "" + Ek;Ek_1.setText(SEk);double Vk1 = (Math.pow(1 - e1 * e1, 0.5) * Math.sin(Ek)) / (1 - e1 * Math.cos(Ek));// sinVk
double Vk2 = (Math.cos(Ek) - e1) / (1 - e1 * Math.cos(Ek)); // cosVk
double Vk;if (Vk2 == 0) {if (Vk1 > e1)Vk = Math.PI / 2;elseVk = -Math.PI / 2;} else {Vk = Math.atan(Vk1 / Vk2);if (Vk2 < 0) {if (Vk1 >= 0)Vk += Math.PI;elseVk -= Math.PI;}}
String SVk = "" + Vk;
Vk_1.setText(SVk);

计算升交距角u0

double w = Double.parseDouble(w_1.getText().trim());
double u0 = Vk + w;
String Su0 = "" + u0;
u0_1.setText(Su0);

计算经过摄动改正的升交距角uk、卫星的地心距离rk、轨道倾角ik

double Crs = Double.parseDouble(Crs_1.getText().trim());
double Crc = Double.parseDouble(Crc_1.getText().trim());
double Cuc = Double.parseDouble(Cuc_1.getText().trim());
double Cus = Double.parseDouble(Cus_1.getText().trim());
double Cic = Double.parseDouble(Cic_1.getText().trim());
double Cis = Double.parseDouble(Cis_1.getText().trim());
double i0 = Double.parseDouble(i0_1.getText().trim());
double I = Double.parseDouble(I_1.getText().trim());
double u_k = Cus * Math.sin(2 * u0) + Cuc * Math.cos(2 * u0);
double r_k = Crs * Math.sin(2 * u0) + Crc * Math.cos(2 * u0);
double i_k = Cis * Math.sin(2 * u0) + Cic * Math.cos(2 * u0);String Su_k = "" + u_k;
u_k_1.setText(Su_k);
String Sr_k = "" + r_k;
r_k_1.setText(Sr_k);
String Si_k = "" + i_k;
i_k_1.setText(Si_k);double uk = u0 + u_k;
double rk = a * (1 - e1 * Math.cos(Ek)) + r_k;
double ik = i0 + i_k + I * tk;String Suk = "" + uk;
uk_1.setText(Suk);
String Srk = "" + rk;
rk_1.setText(Srk);
String Sik = "" + ik;
ik_1.setText(Sik);

计算卫星的轨道平面直角坐标

double xk = rk * Math.cos(uk);
double yk = rk * Math.sin(uk);String Sxk = "" + xk;
xk_1.setText(Sxk);
String Syk = "" + yk;
yk_1.setText(Syk);

坐标转换

double omega = Double.parseDouble(omega_1.getText().trim());
double omega0 = Double.parseDouble(omega0_1.getText().trim());
double we = Double.parseDouble(we_1.getText().trim());
double omegak = omega0 + omega * (t - toe) - we * t;
String Somegak = "" + omegak;
omegak_1.setText(Somegak);double xk1 = xk * Math.cos(omegak) - yk * Math.cos(ik) * Math.sin(omegak);
double yk1 = xk * Math.sin(omegak) + yk * Math.cos(ik) * Math.cos(omegak);
double zk1 = yk * Math.sin(ik);String Sxk1 = "" + xk1;
xk1_1.setText(Sxk1);
String Syk1 = "" + yk1;
yk1_1.setText(Syk1);
String Szk1 = "" + zk1;
zk1_1.setText(Szk1);

四、全部代码见另一篇

附:

结果图数据:

a_sqrt:5153.7127704599998

ln:4.1115998360700002e-009

u:3.986005e14

a0:0.00028600683435800001

a1:1.7053025658199999e-012

a2:0

toc:0

toe:0

t1:4800

M0:1.2263973009600000

e1:0.0053100715158500003

w:-1.6819446292500000

Crs:-105.43750000000000

Crc:175.34375000000000

Cuc:-5.5264681577700003e-006

Cus:1.1192634701700000e-005

Cic:-9.6857547759999998e-008

Cis:-7.8231096267699997e-008

i0:0.97432927738800001

I:1.8643633724999999e-010

omega:-7.7124641122299999e-009

omega0:-2.9080127721900002

we:7.2921151467e-5

代入数据结果图:

a=a_sqrt*a_sqrt

半轴长

n=ln+(u/a^3)^1/2

经校正的平均角速度

lt= a0+a1(t-toc)+a2(t-toc)^2

计算卫星种差

tk = t - toe

从星历历元算起的时间

Mk = M0 + n * tk

平均近点角

Ek= Mk + e1 * sin(Ek)

k为偏心近点角,必须用迭代法解出

sinVk=(Math.pow(1 - e1 * e1, 0.5) * sin(Ek)) / (1 - e1 * cos(Ek))

cosVk=(cos(Ek) - e1) / (1 - e1 * cos(Ek))

真近点角

u0 = Vk + w

升交距角

u_k = Cus * sin(2 * u0) + Cuc * cos(2 * u0)

升交距角校正值

r_k = Crs * Math.sin(2 * u0) + Crc * Math.cos(2 * u0)

向径校正值

i_k = Cis * Math.sin(2 * u0) + Cic * Math.cos(2 * u0)

倾角校正值

uk = u0 + u_k

经校正的升交距角

rk = a * (1 - e1 * Math.cos(Ek)) + r_k

经校正的向径

ik = i0 + i_k + I * tk

经校正的倾角

omegak = omega0 + omega * (t - toe) - we * t

经校正的升交点经度 地球自转角速度

xk = rk * Math.cos(uk)

在轨道平面中的x位置

yk = rk * Math.sin(uk)

在轨道平面中的y位置

xk1 = xk * Math.cos(omegak) - yk * Math.cos(ik) * Math.sin(omegak)

ECEF x坐标

yk1 = xk * Math.sin(omegak) + yk * Math.cos(ik) * Math.cos(omegak)

ECEF y坐标

zk1 = yk * Math.sin(ik)

ECEF z坐标

GPS卫星位置计算(卫星位置计算小程序)java版相关推荐

  1. 微信小程序java版Spring Cloud+Spring Boot+mybatis+security+uniapp+Redis+MQ+VR全景

    @源码地址来源: https://minglisoft.cn/honghu2/business.html 微信小程序登录代码: /*** Copyright © 2012-2017 <a hre ...

  2. 小程序:位置信息(Location)及微信小程序LBS解决方案实践

    目前在做的小程序需要使用到map组件以及小程序个性地图,涉及到的功能如下: 1# 获取用户当前位置,返回对应的省市区 2# 根据目的地的具体地址,显示在地图中的位置 3# 根据用户当前位置,计算出 与 ...

  3. 小学生的计算题自动生成小程序「python」

    小学生的计算题自动生成小程序「python」 #!/usr/bin/python # -*- coding: UTF-8 -*- #liuqiping fred from docx import Do ...

  4. 微信小程序 科学计算器(微信小程序+java+python)

    微信小程序之科学计算器 (微信小程序+java+python) 先把自己的小程序和页面贴出来 1.前后端实现步骤: 1.前端采用的就是微信小程序开发工具,后端采用的是以springboot为基础,调用 ...

  5. 微信小程序横版日历,tab栏

    代码地址如下: http://www.demodashi.com/demo/14243.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.c ...

  6. 微信运动步数:小程序+Java后端,源码可下载

    微信运动步数:小程序+Java后端 更多资源:www.jeeweixin.com 功能说明: 1.获取和展示用户的微信运动步数,计算卡路里: 2.用户打开小程序即可实现步数打卡入库: 3.通过日历展示 ...

  7. 同城跑腿小程序开源版开发

    同城跑腿小程序开源版开发 同城跑腿小程序,支持帮取.帮送模式,包含用户端.骑手端.运营后台,支持一键接单/抢单, 为跑腿团队提供技术解决方案,无加密源码,可私有化部署. 功能特性,为你介绍同城跑腿小程 ...

  8. 小程序 a标签_微慕WordPress小程序增强版V2.0新版上线

    2020年7月10日,我进行了一场微信小程序的直播,直播主题:微慕小程序增强版v2.0版新功能说明, 在直播里对微慕增强版v2.0版全面阐述了新版本增加的功能. 微慕小程序增强版定位是使用wordpr ...

  9. textarea支持a标签_微慕小程序开源版A标签优化说明

    微慕WordPress小程序所有版本里,对于文章详情里文字内容的解析,都是通过开源组件:wxParse:不过这个组件已经停止维护,微慕小程序在这个组件上做了一些优化,让文章里文字在小程序显示更加完美. ...

  10. 微信小程序开发笔记2——如何发布小程序体验版

    如何发布微信小程序体验版 学习链接:https://blog.csdn.net/futruejet/article/details/53224408 -- 至此完毕,更多精彩请看下一笔记. 转载于:h ...

最新文章

  1. 亮剑:PHP,我的未来不是梦(13)
  2. 使用Servlet上传多张图片——Service层(ProductInfoService.java和ProductInfoServiceImpl)
  3. 安卓 adb 的原理浅析
  4. 经典水墨素材点缀中国风海报|简约国际范
  5. C#窗体无法接受Keydown事件
  6. Poj(1274),二分图匹配
  7. 分享nbsp;康奈尔大学做笔记的方法
  8. innodb system table
  9. 联想服务器ThinkServer TS80x板载RAID设置教程
  10. 微星B450mMortar迫击炮+AMD速龙3000GE安装Windows7 SP1并使用UEFI+Nvme启动
  11. 面试大厂被MyBatis问到“哑口无言”?这份MyBatis源码笔记助你吊打面试官!
  12. 从本子文件名中提取本子的名字
  13. CVPR2021 | 2D目标检测论文解读
  14. 玩机搞机----安卓全机型修改 开机动画 步骤教程
  15. XBG和LGB和CATBOOST 要用哪一种? 深度分析
  16. Photoshop-置换贴图-实例
  17. MySQL高集群方案
  18. lseek illegal seek不能使用 linux 串口,lseek-lseek
  19. C#Lesson09 面向对象
  20. Java包(package)的命名规范 规则

热门文章

  1. 考研复试-操作系统面试题
  2. State的学习与使用
  3. Flink:把状态State全都扒光,远走他乡(一):State初始
  4. SELinux 的一次探讨 -- quotacheck Permission Denied
  5. rs232接口_4-20mA转RS485和转RS232的区别
  6. 将el-table导出Excel文件
  7. linux设备上的Onvif 实现6:获取摄像头的流媒体地址完整流程
  8. 小图放大神器 MAX-Image-Resolution-Enhancer
  9. cryptodome包安装
  10. 冯炜权与他的万事达卡