GPS卫星坐标计算.docx
- 文档编号:6705452
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:13
- 大小:230.64KB
GPS卫星坐标计算.docx
《GPS卫星坐标计算.docx》由会员分享,可在线阅读,更多相关《GPS卫星坐标计算.docx(13页珍藏版)》请在冰豆网上搜索。
GPS卫星坐标计算
卫星定位技术与方法
--根据广播星历参数计算卫星坐标作业报告
*******
班级:
测绘二班
*******
学生学号:
20080783
作业日期:
2010年12月08日
根据广播星历参数计算卫星坐标
一.已知数据:
根据以下的广播星历参数计算UTC2004年1月30日8点0分00秒—20分00秒,每隔一分钟的PRN7的卫星坐标。
ComputethecoordinateofPRN7withintervalof1minute.
Navigationdata:
卫星导航文件格式:
二.计算步骤:
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);
listView1.Columns.Add("星历内容",130);
listView1.Columns.Add("导航数据",130);
listView1.GridLines=true;//显示表格线
listView1.View=View.Details;//显示表格细节
listView1.HeaderStyle=ColumnHeaderStyle.Clickable;//对表头进行设置
listView2.Columns.Add("时间",60);
listView2.Columns.Add("x坐标",150);
listView2.Columns.Add("y坐标",150);
listView2.Columns.Add("z坐标",150);
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]="e";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 { 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; Ek1=Mk+M[15]*Math.Sin(Ek); } 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>0) { Vk+=2*Math.PI; } if(A1>0&&A2<0) { Vk+=Math.PI; } } else { if(A1<=0&&A2<=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); } //输出卫星在地固坐标系中的空间直角坐标 for(inti=0;i<21;i++) { 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) { //读取相对路径 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); //星历代码 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]="e";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"; //把卫星广播星历文件内容输出到listView进行查看 for(inti=0;i { ListViewItemli=newListViewItem(); li.Text=(i+1).ToString(); li.SubItems.Add(N[i]); li.SubItems.Add(arrs[i]); listView1.Items.Add(li); } } } } 四.程序运行结果: 星历内容的读取、显示: 卫星坐标计算结果: 运行界面: 作业体会: 此次作业,收获颇多。 起初由于自己的疏忽,在真近点角的计算时忘了处理象限,导致做后的结果都差了一个负号,所以不管做什么都得认真、细心;想要做好一件事情,必须有百分百的投入,有足够的专注度;发现自己对GPS卫星定位技术与方法这方面知识越来越感兴趣,以后要多加学习。 由于教材上、老师的课件上都有明细的计算步骤,作业起来很方便,不容易出错,经过计算,发现程序运行出来的卫星坐标结果与教材上给的坐标有较大的差距,这个差距达到几十米,检查程序也没有发现问题,问了班上几个同学,他们也都说存在这样的问题,所以,恳请老师给予指点。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- GPS 卫星 坐标 计算