n文件提供的轨道参数:

PS:需要对文件内容格式做一定修改:D改成E/e,各个数据间以空格隔开

计算步骤参考武汉大学出版的《GPS测量原理及应用》(第四版)的4.3部分。

使用Java编写代码计算GPS在地固坐标系中的坐标:

原文链接:根据北斗广播星历计算卫星位置的小程序 Java版本 RINEX VERSION3.04_我们与食堂的距离的博客-CSDN博客

根据个人实际情况对代码做了修改。calculateLocation()方法:用来计算卫星位置
//轨道长半径double a=Math.pow(sqrt_a, 2);//WGS-84坐标系中的地球引力常数double constGM=3.986005e+14;//卫星运行的平均角速度double n0=Math.sqrt(constGM/Math.pow(a, 3));//delta_n为卫星电文给出的摄动改正数double n=n0+delta_n;//tk为相对于参考时刻toe的归化时间double tk=t-toe;if(tk>302400){tk=tk-604800;}else if(tk<-302400){tk=tk+604800;}//观测时刻卫星平近点角Mk//M0是卫星电文给出的参考时刻toe的平近点角double Mk=M0+n*(tk);if (Mk < 0){Mk += 2*Math.PI;}if (Mk > 2*Math.PI){Mk -= 2*Math.PI;}//利用迭代法计算偏近点角Ekdouble E0=Mk;double Ek=Mk+e*Math.sin(E0);while(Math.abs(Ek-E0)>10e-12) {E0=Ek;Ek=Mk+e*Math.sin(E0);}//真近点角vkdouble cosNu_k = (Math.cos(Ek) - e) / (1 - e*Math.cos(Ek));double sinNu_k = (Math.sqrt(1-e*e)*Math.sin(Ek)) / (1 - e*Math.cos(Ek));double vk;if (cosNu_k == 0){if (sinNu_k > 0){vk = Math.PI/2;}else{vk=Math.PI/2;}}else{vk = Math.atan(sinNu_k/cosNu_k);}if (cosNu_k < 0){if (sinNu_k >= 0){vk += Math.PI;}else{vk -= Math.PI;}}//升交距角fk,omg为卫星电文给出的近地点角距double fk=vk+omg;//计算摄动改正项//delta_uk为升交距角u的摄动量double delta_uk=Cuc*Math.cos(2*fk)+Cus*Math.sin(2*fk);//delta_rk为卫星矢径r的摄动量double delta_rk=Crc*Math.cos(2*fk)+Crs*Math.sin(2*fk);//delta_ik为轨道倾角i的摄动量double delta_ik=Cic*Math.cos(2*fk)+Cis*Math.sin(2*fk);//计算经过摄动改正的升交距角uk,卫星矢径rk和轨道倾角ikdouble uk=fk+delta_uk;double rk = a * (1 - e * Math.cos(Ek))+delta_rk;double ik=i0+delta_ik+I*tk;//计算卫星在轨道平面坐标系(X轴指向升交点)的坐标double x=rk*Math.cos(uk);double y=rk*Math.sin(uk);//地球自转角速度double omge=7.2921151467e-05;//lambda为升交点经度double lambda=OMG0+(OMG0_DOT-omge)*tk-omge*toe;//卫星在地心地固坐标系中的直角坐标double x_E=(x*Math.cos(lambda)-y*Math.cos(ik)*Math.sin(lambda))/1000;double y_E=(x*Math.sin(lambda)+y*Math.cos(ik)*Math.cos(lambda))/1000;double z_E=(y*Math.sin(ik))/1000;return "卫星:"+satellite+",长半径:"+a+",平均角速度:"+n0+",\n偏近点角:"+Ek+",真近点角:"+vk+",升交角距:"+fk+",\n改正升交距角:"+uk+",改正矢径:"+rk+",改正轨道倾角:"+ik+",\n卫星在轨道平面直角坐标系的坐标:("+x+","+y+"),升交点经度:"+lambda+",\n卫星在地心地固坐标系中的位置:("+x_E+","+y_E+","+z_E+")\n\n";}

在main()方法中编写读取文件内容,对文件中数据进行处理:

public static void main(String[] args) {//读取文件File file=new File("D:\\GNSS\\homework.txt");try {//读取字符流BufferedReader br = new BufferedReader(new FileReader(file));String line=null;StringBuffer navMsg=new StringBuffer();while((line=br.readLine())!=null) {//System.out.println(line);navMsg.append(line+"\n");}//类型转换 StringBuffer->StringString navStr=navMsg.toString();br.close();//处理格式问题//将字符串通过空格拆分为单个字符数组String[] arrayChar=navStr.split(" ");StringBuffer sb_output=new StringBuffer();ArrayList<String> al=new ArrayList<String>();for(String element:arrayChar) {al.add(element);//System.out.print(element+",");}//System.out.println(arrayChar[0]);//卫星号String satellite=arrayChar[0];//Crsdouble Crs = Double.parseDouble(arrayChar[11]);//角速度改正数double delta_n=Double.parseDouble(arrayChar[12]);//参考时刻的平近点角double M0=Double.parseDouble(arrayChar[13]);//Cucdouble Cuc=Double.parseDouble(arrayChar[14]);//偏心率double e=Double.parseDouble(arrayChar[15]);//Cusdouble Cus=Double.parseDouble(arrayChar[16]);//长半轴的开方double sqrt_a=Double.parseDouble(arrayChar[17]);//toedouble toe=Double.parseDouble(arrayChar[18]);//观测时刻double t=Double.parseDouble(arrayChar[18]);//Cicdouble Cic=Double.parseDouble(arrayChar[19]);//参考时刻的升交点赤经double OMG0=Double.parseDouble(arrayChar[20]);//Cisdouble Cis=Double.parseDouble(arrayChar[21]);//参考时刻的轨道倾角double i0=Double.parseDouble(arrayChar[22]);//Crcdouble Crc=Double.parseDouble(arrayChar[23]);//参考时刻的近地点角距double omg=Double.parseDouble(arrayChar[24]);//升交点赤经变化率double OMG0_DOT=Double.parseDouble(arrayChar[25]);//轨道倾角变化率Idouble I = Double.parseDouble(arrayChar[26]);System.out.print(calculateLocation(satellite,sqrt_a,delta_n,t,toe,M0,e,omg,Cuc,Cus,Crc,Crs,Cic,Cis,i0,OMG0,OMG0_DOT,I));sb_output.append(calculateLocation(satellite,sqrt_a,delta_n,t,toe,M0,e,omg,Cuc,Cus,Crc,Crs,Cic,Cis,i0,OMG0,OMG0_DOT,I));String outputStr=sb_output.toString();//向文件中写入计算结果File outFile=new File("D:\\GNSS\\position1.txt");FileWriter write= new FileWriter(outFile,true);BufferedWriter rt=new BufferedWriter(write);rt.write(outputStr);rt.flush();write.close();rt.close();} catch (Exception e) {e.printStackTrace();}}

PS:关于归化时间的计算:直接将观测时刻 t 和参考时刻 toe 设置相等,让归化时间 tk 为0

运行结果:

卫星:8,长半径:2.6559583055585682E7,平均角速度:1.4586027904433575E-4,
偏近点角:4.063443127407144,真近点角:-2.2275177585569397,升交角距:0.44221424540006016,
改正升交距角:0.442216645938399,改正矢径:2.6716897503814127E7,改正轨道倾角:0.9740108899816725,
卫星在轨道平面直角坐标系的坐标:(2.414687314275234E7,1.1433334144383926E7),升交点经度:-34.768456592379,
卫星在地心地固坐标系中的位置:(-24956.983621633484,-1227.1703999123695,9457.041479680973)

与精密星历进行比较:

PG08 -24956.985176  -1227.169887   9457.040848

根据卫星电文计算GPS卫星位置相关推荐

  1. c语言编程gps卫星坐标计算公式,C语言计算GPS卫星位置演示教学.doc

    C语言计算GPS卫星位置演示教学.doc C语言计算GPS卫星位置1 概述在用GPS信号进行导航定位以及制订观测计划时,都必须已知GPS卫星在空间的瞬间位置.卫星位置的计算是根据卫星电文所提供的轨道参 ...

  2. 用matlab计算卫星的瞬时位置,用MATLAB计算GPS卫星位置.PDF

    用MATLAB计算GPS卫星位置 高 新 技 术 用MATLAB计算GPS卫星位置 罗利娟 杨乐 (西安翻译学院 陕西西安 710061) 摘 要:本文主要介绍了GPs测量数据的常用格式RINEX标准 ...

  3. c语言实现gps坐标转化,C语言计算GPS卫星位置

    <C语言计算GPS卫星位置>由会员分享,可在线阅读,更多相关<C语言计算GPS卫星位置(8页珍藏版)>请在人人文库网上搜索. 1.C 语 言 计 算GPS卫星位置1 概述在用G ...

  4. 卫星位置计算的c语言,C语言-详细计算GPS卫星位置.doc

    C语言-详细计算GPS卫星位置.doc C语言计算GPS卫星位置1 概述在用GPS信号进行导航定位以及制订观测计划时,都必须已知GPS卫星在空间的瞬间位置.卫星位置的计算是根据卫星电文所提供的轨道参数 ...

  5. GPS卫星坐标用计算机计算,GPS卫星位置的计算

    [摘 要]针对GPS卫星导航电文的特点和里边各种参数含义及用法,阐述了利用导航电文提供的数据计算卫星位置的方法,为进行基线解算时提供准确的卫星坐标数据. 0前言 全球卫星定位系统(GPS)是一个实时的 ...

  6. 用matlab计算卫星的瞬时位置,用MATLAB计算GPS卫星位置

    GPS定位的基本原理简单来说就是在多时候需要把来自不同型号的接收机的RINEX标准文件里不是单一的一个文WGS-84空间直角坐标系中,确定未知点与数据放在一块进行处理,这就需要数据件,而是包括如下几种 ...

  7. GPS卫星同步时钟,GPS卫星时钟,GPS时钟

    GPS时钟(GPS2U型)    GPS2U卫星时钟系列产品均是采用美国的GPS接收模块,接收美国GPS(全球定位系统)卫星发送的时间信号,根据不同的用户有我公司研发人员精心研制,组成具有本企业特点的 ...

  8. 通过MATLAB模拟24个GPS卫星的轨道运行效果

    目录 一.理论基础 二.核心程序 三.测试结果 一.理论基础 通过使用GPS卫星星历(Almanac data)信息,来计算模拟24个GPS卫星的轨道.每个卫星用PRN1-24来编号,假设GPS卫星轨 ...

  9. GPS研究---GPS卫星信号

    文章目录 1.GPS 卫星信号 2.C/A码与P码 1. C/A 码 2. P 码 3.GPS 卫星的导航电文 4.卫星位置计算 1.GPS 卫星信号 GPS 卫星信号是 GPS 卫星向广大用户发送的 ...

最新文章

  1. C++多线程:互斥变量 std::mutex
  2. Git的分支命令详解
  3. SysTick的优先级是高还是低
  4. python数组 swig_python中SWIG
  5. MySQL锁机制和PHP锁机制
  6. java克鲁斯卡尔算法_Java语言基于无向有权图实现克鲁斯卡尔算法代码示例
  7. 无线网状网、Zigbee、RFID三种技术分析
  8. NS2相关学习——无线网(2)
  9. Bootstrap插件通过noConfllict 避免冲突
  10. android 聊天动态表情包,gif表情包制作app下载-GIF表情包 安卓版v1.0-PC6安卓网
  11. 用微软卸载工具msicuu2解决office安装不上的问题,清理office残留文件
  12. ImageJ的Macro语言实例教程
  13. 原来大家最拼命的时候是这样子的
  14. 方维众筹1.61 php5.5,最新方维众筹1.61完美解密版源码 综合型众筹产品+理财+公益+股权+微信+商城+PC+WAP运营版...
  15. 黑客白皮书:如何成为一名黑客(附FAQ)
  16. [kriging](一)网上下载的kriging克里金的C++程序的初步调试
  17. 新手小白开始学习verilog(学习方法有点歪门邪道的,大佬勿喷( ̄▽ ̄)“)
  18. STM32在CubeMX下HAl库编程MISO为何设置和MOSI相同
  19. 《Science》教你如何写好一篇博士毕业论文!
  20. LOCATE函数的用法

热门文章

  1. 【软考笔记】2. 操作系统基本原理
  2. LINUX性能调优--DNS
  3. Java学习之mark标记
  4. python3爬虫之访问量、点击率数据的爬取分析
  5. RocksDB LRUCache
  6. 向量空间在人工智能中的应用:向量计算和模运算
  7. Ribbon负载均衡原理
  8. FIB表与RIB表的区别与联系
  9. Haskell学习笔记:List
  10. java io的异常_Java 异常与IO流