GPS卫星位置计算(卫星位置计算小程序)java版
目录
一、准备以及结果图
二、数据
三、计算
四、全部代码
附:
一、准备以及结果图
软件: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版相关推荐
- 微信小程序java版Spring Cloud+Spring Boot+mybatis+security+uniapp+Redis+MQ+VR全景
@源码地址来源: https://minglisoft.cn/honghu2/business.html 微信小程序登录代码: /*** Copyright © 2012-2017 <a hre ...
- 小程序:位置信息(Location)及微信小程序LBS解决方案实践
目前在做的小程序需要使用到map组件以及小程序个性地图,涉及到的功能如下: 1# 获取用户当前位置,返回对应的省市区 2# 根据目的地的具体地址,显示在地图中的位置 3# 根据用户当前位置,计算出 与 ...
- 小学生的计算题自动生成小程序「python」
小学生的计算题自动生成小程序「python」 #!/usr/bin/python # -*- coding: UTF-8 -*- #liuqiping fred from docx import Do ...
- 微信小程序 科学计算器(微信小程序+java+python)
微信小程序之科学计算器 (微信小程序+java+python) 先把自己的小程序和页面贴出来 1.前后端实现步骤: 1.前端采用的就是微信小程序开发工具,后端采用的是以springboot为基础,调用 ...
- 微信小程序横版日历,tab栏
代码地址如下: http://www.demodashi.com/demo/14243.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.c ...
- 微信运动步数:小程序+Java后端,源码可下载
微信运动步数:小程序+Java后端 更多资源:www.jeeweixin.com 功能说明: 1.获取和展示用户的微信运动步数,计算卡路里: 2.用户打开小程序即可实现步数打卡入库: 3.通过日历展示 ...
- 同城跑腿小程序开源版开发
同城跑腿小程序开源版开发 同城跑腿小程序,支持帮取.帮送模式,包含用户端.骑手端.运营后台,支持一键接单/抢单, 为跑腿团队提供技术解决方案,无加密源码,可私有化部署. 功能特性,为你介绍同城跑腿小程 ...
- 小程序 a标签_微慕WordPress小程序增强版V2.0新版上线
2020年7月10日,我进行了一场微信小程序的直播,直播主题:微慕小程序增强版v2.0版新功能说明, 在直播里对微慕增强版v2.0版全面阐述了新版本增加的功能. 微慕小程序增强版定位是使用wordpr ...
- textarea支持a标签_微慕小程序开源版A标签优化说明
微慕WordPress小程序所有版本里,对于文章详情里文字内容的解析,都是通过开源组件:wxParse:不过这个组件已经停止维护,微慕小程序在这个组件上做了一些优化,让文章里文字在小程序显示更加完美. ...
- 微信小程序开发笔记2——如何发布小程序体验版
如何发布微信小程序体验版 学习链接:https://blog.csdn.net/futruejet/article/details/53224408 -- 至此完毕,更多精彩请看下一笔记. 转载于:h ...
最新文章
- 亮剑:PHP,我的未来不是梦(13)
- 使用Servlet上传多张图片——Service层(ProductInfoService.java和ProductInfoServiceImpl)
- 安卓 adb 的原理浅析
- 经典水墨素材点缀中国风海报|简约国际范
- C#窗体无法接受Keydown事件
- Poj(1274),二分图匹配
- 分享nbsp;康奈尔大学做笔记的方法
- innodb system table
- 联想服务器ThinkServer TS80x板载RAID设置教程
- 微星B450mMortar迫击炮+AMD速龙3000GE安装Windows7 SP1并使用UEFI+Nvme启动
- 面试大厂被MyBatis问到“哑口无言”?这份MyBatis源码笔记助你吊打面试官!
- 从本子文件名中提取本子的名字
- CVPR2021 | 2D目标检测论文解读
- 玩机搞机----安卓全机型修改 开机动画 步骤教程
- XBG和LGB和CATBOOST 要用哪一种? 深度分析
- Photoshop-置换贴图-实例
- MySQL高集群方案
- lseek illegal seek不能使用 linux 串口,lseek-lseek
- C#Lesson09 面向对象
- Java包(package)的命名规范 规则