GPS卫星坐标计算.docx

上传人:b****6 文档编号:6705452 上传时间:2023-01-09 格式:DOCX 页数:13 大小:230.64KB
下载 相关 举报
GPS卫星坐标计算.docx_第1页
第1页 / 共13页
GPS卫星坐标计算.docx_第2页
第2页 / 共13页
GPS卫星坐标计算.docx_第3页
第3页 / 共13页
GPS卫星坐标计算.docx_第4页
第4页 / 共13页
GPS卫星坐标计算.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

GPS卫星坐标计算.docx

《GPS卫星坐标计算.docx》由会员分享,可在线阅读,更多相关《GPS卫星坐标计算.docx(13页珍藏版)》请在冰豆网上搜索。

GPS卫星坐标计算.docx

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卫星定位技术与方法这方面知识越来越感兴趣,以后要多加学习。

由于教材上、老师的课件上都有明细的计算步骤,作业起来很方便,不容易出错,经过计算,发现程序运行出来的卫星坐标结果与教材上给的坐标有较大的差距,这个差距达到几十米,检查程序也没有发现问题,问了班上几个同学,他们也都说存在这样的问题,所以,恳请老师给予指点。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1