GPS卫星坐标计算文档格式.docx
- 文档编号:16907196
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:13
- 大小:249.70KB
GPS卫星坐标计算文档格式.docx
《GPS卫星坐标计算文档格式.docx》由会员分享,可在线阅读,更多相关《GPS卫星坐标计算文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
二.计算步骤:
Thestepsforsatellitecoordinates
1.平均角速度(meanangularspeed):
n由广播星历获得,GM=3.986005e+14
2.规化时刻(normaltime):
t0已知(由广播星历获得),t为GPS周秒
3.平近点角(meananomaly):
M0已知(由广播星历获得)
4.偏近点角(eccentricanomaly):
迭代求解:
初始值取E=M,以弧度为单位
5.真近点角(trueanomaly):
6.升交距角(argumentofascendingnode):
近地点角距(argumentofperigee)
7.轨道向径(Orbitalradius):
8.扰动改正(Perturbedcorrection):
•升交角距(Argumentofascendingnode)
•
•轨道向径(Orbitalradius)
•轨道顷角(Orbitalinclination)
是升交角距(theargumentofascendingnode)
9.改正后升交角距、轨道向径、轨道倾角
改正后升交角距(Correctedargumentofascendingnod)
改正后的轨道向径(Correctedorbitalradius)
改正后的轨道倾角(Correctedorbitalinclination)
10.卫星在升交点轨道直角坐标系中的坐标:
如下图所示
11.升交点经度(Longitudeofascendingnode):
12.在地固坐标系中的卫星位置(Expressedinsphericcoordinatesystem)
三.源程序:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.IO;
usingSystem.Text.RegularExpressions;
namespaceTest
{
publicpartialclassForm1:
Form
{
publicForm1()
InitializeComponent();
listView1.Columns.Add("
序号"
40);
星历内容"
130);
导航数据"
listView1.GridLines=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;
}
privatevoidbutton1_Click(objectsender,EventArgse)
//读取相对路径
stringstr1=AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
stringfilename=str1+"
navigationdata.txt"
;
//读取卫星广播星历文件
StreamReadermyreader=newStreamReader(filename,Encoding.Default);
stringmyinfo=myreader.ReadToEnd();
myreader.Close();
//把卫星广播星历里的D改为e,以便后续计算
stringmystring=myinfo;
stringmyinfor=mystring;
myinfor=mystring.Replace("
D"
"
e"
);
//把数据分开读入到一个数组中存储
string[]split=newstring[]{"
"
};
string[]arrs=myinfor.Split(split,StringSplitOptions.RemoveEmptyEntries);
double[]M=newdouble[arrs.Length];
//星历代码
string[]N=newstring[arrs.Length];
N[0]="
PRN"
N[1]="
Yer"
N[2]="
Mon"
N[3]="
day"
N[4]="
H"
N[5]="
M"
N[6]="
sec"
N[7]="
a0"
N[8]="
a1"
N[9]="
a2"
N[10]="
IODE"
N[11]="
Crs"
N[12]="
delta-n"
N[13]="
M0"
N[14]="
Cuc"
N[15]="
N[16]="
Cus"
N[17]="
sqrt(a)"
N[18]="
t0e"
N[19]="
Cic"
N[20]="
omega0"
N[21]="
Cis"
N[22]="
i0"
N[23]="
Crc"
N[24]="
omega"
N[25]="
omega-spot"
N[26]="
IDOT"
N[27]="
CodesonL2channel"
N[28]="
GPSWeek"
N[29]="
L2Pdataflag"
N[30]="
SVaccuracy"
N[31]="
SVhealth"
N[32]="
TGD"
N[33]="
IODCIssueofData"
N[34]="
Transmissiontimeofmessage"
//把卫星广播星历读入到数组中
for(inti=0;
i<
arrs.Length;
i++)
ListViewItemli=newListViewItem();
li.Text=(i+1).ToString();
li.SubItems.Add(N[i]);
li.SubItems.Add(arrs[i]);
listView1.Items.Add(li);
M[i]=double.Parse(arrs[i]);
doublet0e=460800.00;
doublet;
double[]XK=newdouble[21];
double[]YK=newdouble[21];
double[]ZK=newdouble[21];
for(intl=0;
l<
21;
l++)
//计算平均角速度
doubleGM=3986004.418e008;
doublen,n0;
n0=Math.Sqrt(GM/(Math.Pow(M[17],6)));
n=M[12]+n0;
//规划时刻
t=t0e+l*60;
doubletk=t-t0e;
doubleMk=M[13]+n*tk;
//迭代计算平近点角的计算
doubleEk,Ek1;
Ek=Mk;
Ek1=Mk+M[15]*Math.Sin(Ek);
do
Ek=Ek1;
while(Math.Abs(Ek1-Ek)>
1e-15);
//计算真近点角
doubleVk=Math.Atan(((Math.Sqrt(1-M[15]*M[15])*Math.Sin(Ek)))/(Math.Cos(Ek)-M[15]));
//反正切值的象限处理
doubleA1=Math.Atan(((Math.Sqrt(1-M[15]*M[15])*Math.Sin(Ek))));
doubleA2=Math.Cos(Ek)-M[15];
if(Vk<
0)
if(A1<
0&
&
A2>
Vk+=2*Math.PI;
if(A1>
A2<
Vk+=Math.PI;
else
=0&
=0)
Vk=Vk+Math.PI;
//计算升交角距
doublefk=Vk+M[24];
//摄动改正值的计算
doubledu=M[14]*Math.Cos(2*fk)+M[16]*Math.Sin(2*fk);
doubledr=M[23]*Math.Cos(2*fk)+M[11]*Math.Sin(2*fk);
doubledi=M[19]*Math.Cos(2*fk)+M[21]*Math.Sin(2*fk);
//摄动改正
doubleuk=fk+du;
doublerk=Math.Pow(M[17],2)*(1-M[15]*Math.Cos(Ek))+dr;
doubleik=M[22]+di+M[26]*tk;
//计算卫星在升交点轨道直角坐标系的坐标
doublexk=rk*Math.Cos(uk);
doubleyk=rk*Math.Sin(uk);
//计算升交点经度
doublewe=7.2921151467e-05;
doublejdt=M[20]+(M[25]-we)*tk-we*M[18];
//卫星在地固坐标系中的空间直角坐标
XK[l]=xk*Math.Cos(jdt)-yk*Math.Cos(ik)*Math.Sin(jdt);
YK[l]=xk*Math.Sin(jdt)+yk*Math.Cos(ik)*Math.Cos(jdt);
ZK[l]=yk*Math.Sin(ik);
//输出卫星在地固坐标系中的空间直角坐标
ListViewItemlist=newListViewItem();
list.Text="
第"
+i.ToString()+"
分钟"
list.SubItems.Add(XK[i].ToString());
list.SubItems.Add(YK[i].ToString());
list.SubItems.Add(ZK[i].ToString());
listView2.Items.Add(list);
privatevoidbutton2_Click(objectsender,EventArgse)
//把卫星广播星历文件内容输出到listView进行查看
}
四.程序运行结果:
星历内容的读取、显示:
卫星坐标计算结果:
运行界面:
作业体会:
此次作业,收获颇多。
起初由于自己的疏忽,在真近点角的计算时忘了处理象限,导致做后的结果都差了一个负号,所以不管做什么都得认真、细心;
想要做好一件事情,必须有百分百的投入,有足够的专注度;
发现自己对GPS卫星定位技术与方法这方面知识越来越感兴趣,以后要多加学习。
由于教材上、老师的课件上都有明细的计算步骤,作业起来很方便,不容易出错,经过计算,发现程序运行出来的卫星坐标结果与教材上给的坐标有较大的差距,这个差距达到几十米,检查程序也没有发现问题,问了班上几个同学,他们也都说存在这样的问题,所以,恳请老师给予指点。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- GPS 卫星 坐标 计算