1、迭代求解:初始值取E=M,以弧度为单位5.真近点角(true anomaly):6.升交距角(argument of ascending node):近地点角距(argument of perigee)7. 轨道向径(Orbital radius):8. 扰动改正(Perturbed correction):升交角距(Argument of ascending node) 轨道向径(Orbital radius)轨道顷角(Orbital inclination)是升交角距 (the argument of ascending node)9. 改正后升交角距、轨道向径、轨道倾角改正后升交角距(C
2、orrected argument of ascending nod)改正后的轨道向径(Corrected orbital radius)改正后的轨道倾角(Corrected orbital inclination) 10.卫星在升交点轨道直角坐标系中的坐标:如下图所示11. 升交点经度(Longitude of ascending node):12. 在地固坐标系中的卫星位置(Expressed in spheric coordinate system)三. 源程序:using System;using System.Collections.Generic;using System.Comp
3、onentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO;using System.Text.RegularExpressions;namespace Test public partial class Form1 : Form public Form1() InitializeComponent(); listView1.Columns.Add(序号, 40);星历内容, 130);导航数据 listView1.GridLines
4、 = true; /显示表格线 listView1.View = View.Details;/显示表格细节 listView1.HeaderStyle = ColumnHeaderStyle.Clickable;/对表头进行设置 listView2.Columns.Add(时间, 60);x坐标, 150);y坐标z坐标 listView2.GridLines = true; listView2.View = View.Details; listView2.HeaderStyle = ColumnHeaderStyle.Clickable; private void button1_Click
5、(object sender, EventArgs e) /读取相对路径 string str1 = AppDomain.CurrentDomain.SetupInformation.ApplicationBase; string filename = str1 + navigation data.txt ; /读取卫星广播星历文件 StreamReader myreader = new StreamReader(filename, Encoding.Default); string myinfo = myreader.ReadToEnd(); myreader.Close(); /把卫星广播
6、星历里的D改为e,以便后续计算 string mystring = myinfo; string myinfor = mystring; myinfor = mystring.Replace(D, e); /把数据分开读入到一个数组中存储 string split = new string ; string arrs = myinfor.Split(split, StringSplitOptions.RemoveEmptyEntries); double M = new doublearrs.Length; /星历代码 string N = new stringarrs.Length; N0
7、= PRN N1 = Yer N2 = Mon N3 = day N4 = H N5 = M N6 = sec N7 = a0 N8 = a1 N9 = a2 N10 = IODE N11 = Crs N12 = delta-n N13 = M0 N14 = Cuc N15 = N16 = Cus N17 = sqrt(a) N18 = t0e N19 = Cic N20 = omega0 N21 = Cis N22 = i0 N23 = Crc N24 = omega N25 = omega-spot N26 = IDOT N27 = Codes on L2 channel N28 = GP
8、S Week N29 = L2 P data flag N30 = SV accuracy N31 = SV health N32 = TGD N33 = IODC Issue of Data N34 = Transmission time of message /把卫星广播星历读入到数组中 for (int i = 0; i arrs.Length; i+) ListViewItem li = new ListViewItem(); li.Text = (i + 1).ToString(); li.SubItems.Add(Ni); li.SubItems.Add(arrsi); listV
9、iew1.Items.Add(li); Mi = double.Parse(arrsi); double t0e=460800.00; double t; double XK = new double21; double YK = new double21; double ZK = new double21; for (int l = 0; l 1e-15); /计算真近点角 double Vk = Math.Atan(Math.Sqrt(1 - M15 * M15) * Math.Sin(Ek) / (Math.Cos(Ek) - M15); /反正切值的象限处理 double A1 = M
10、ath.Atan(Math.Sqrt(1 - M15 * M15) * Math.Sin(Ek); double A2 = Math.Cos(Ek) - M15; if (Vk 0) if (A1 Vk += 2 * Math.PI; if (A1 A2 Vk += Math.PI; else= 0 &= 0) Vk = Vk + Math.PI; /计算升交角距 double fk = Vk + M24; /摄动改正值的计算 double du = M14 * Math.Cos(2 * fk) + M16 * Math.Sin(2 * fk); double dr = M23 * Math.
11、Cos(2 * fk) + M11 * Math.Sin(2 * fk); double di = M19 * Math.Cos(2 * fk) + M21 * Math.Sin(2 * fk); /摄动改正 double uk = fk + du; double rk = Math.Pow(M17, 2) * (1 - M15 * Math.Cos(Ek) + dr; double ik = M22 + di + M26 * tk; /计算卫星在升交点轨道直角坐标系的坐标 double xk = rk * Math.Cos(uk); double yk = rk * Math.Sin(uk)
12、; /计算升交点经度 double we = 7.2921151467e-05; double jdt = M20 + (M25 - we) * tk - we * M18; /卫星在地固坐标系中的空间直角坐标 XKl = xk * Math.Cos(jdt) - yk * Math.Cos(ik) * Math.Sin(jdt); YKl = xk * Math.Sin(jdt) + yk * Math.Cos(ik) * Math.Cos(jdt); ZKl = yk * Math.Sin(ik); /输出卫星在地固坐标系中的空间直角坐标 ListViewItem list = new L
13、istViewItem(); list.Text = 第 + i.ToString() + 分钟 list.SubItems.Add(XKi.ToString(); list.SubItems.Add(YKi.ToString(); list.SubItems.Add(ZKi.ToString(); listView2.Items.Add(list); private void button2_Click(object sender, EventArgs e) /把卫星广播星历文件内容输出到listView进行查看四 程序运行结果:星历内容的读取、显示:卫星坐标计算结果: 运行界面:作业体会:此次作业,收获颇多。起初由于自己的疏忽,在真近点角的计算时忘了处理象限,导致做后的结果都差了一个负号,所以不管做什么都得认真、细心;想要做好一件事情,必须有百分百的投入,有足够的专注度;发现自己对GPS卫星定位技术与方法这方面知识越来越感兴趣,以后要多加学习。由于教材上、老师的课件上都有明细的计算步骤,作业起来很方便,不容易出错,经过计算,发现程序运行出来的卫星坐标结果与教材上给的坐标有较大的差距,这个差距达到几十米,检查程序也没有发现问题,问了班上几个同学,他们也都说存在这样的问题,所以,恳请老师给予指点。