导航与定位实验报告Word文档格式.docx
《导航与定位实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《导航与定位实验报告Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
![导航与定位实验报告Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-12/14/8751489f-2564-4c85-b7be-740df56545e5/8751489f-2564-4c85-b7be-740df56545e51.gif)
4、对解析出来的数据进行画图处理,得到真正的轨迹。
【实验原理】
GPS设备通过对接收到的导航电文进行分析处理,计算出设备所在的经纬度、海拔、航速、航向等空间信息,并按照规定的协议将空间信息以及卫星信息进行组织,将有组织的数据解析出来然后做应用。
是
否
【实验设计】
1、设计思想
根据提供的txt文档,实现程序与文件之间的通信,读取txt中的内容,然后根据GPS解析协议将其进行解析。
得到经纬度坐标,然后将经纬度坐标进行操作得到真实的轨迹路线图做出显示。
2、详细设计
声明对文件的关联对象Fielstream对象,声明对文件进行读取的对象Streamreader,然后对文件关联对象进行关联本地文件,然后用此关联对象初始化文件读取对象,然后对文件进行一步步的读取,对读取之后的数据进行立刻解析,根据解析协议的种类不同对不同类型的GPS数据进行解析,然后做输出处理。
根据文件的头部信息我们可以知道经纬度在那些地方,由于我们只需要解析GPRMC数据,所以经纬度是很容易得到的数据,得到经纬度字符串之后就可以通过函数转换成可操作的经纬度数据,得到经纬度数据之后就转换成为屏幕坐标,然后就可以划线了。
经过划线处理连续的划线就成就了轨迹。
关于平滑的问题:
由于画出来的线可能会有一些点的问题会出现断线的可能和不连续,所以要做平滑处理,记录多个点,每两个点之间都划线一条就能满足平滑的要求。
否
【成果展示】
【实验心得】
【调试报告】
1.第一个遇到的问题是读文件的问题:
因为要解析数据就必须要对文本进行解析,以前写的C#程序都是比较简单的程序,所有的操作都在内存中进行,只需要输入输出就够了,但是大型的问题光靠内存是远远不够的,数据量一大就不可能把所有的数据放在内存中,GPS这种数据大多来遥感数据和测绘数据,这些数据量都是几何倍数的增长,要在内存中进行处理根本不可能,所以这个问题也是学习GPS所必须面临的问题,我第一次实习课基本就花在C#文件读取上面了。
一旦文件可以读取其他的就好办,主要是声明一个文件流对象,然后将此文件流对象关联文件,在用这个文件流对象初始化一个读取流对象,然后调用读取流对象的读取方法。
这样就可以实现读取了.
2.tablecontrol控件:
这是我第一次使用这个控件,真的挺好用的,效果也不错。
考虑到要对不同类型的GPS数据进行显示,如果全部放在一个界面中就显得非常臃肿,所以我将他们分开在几个页面中,这几个页面通过tablecontrol控件进行管理,这样就显得比较有组织.
3.string的分段:
因为要对不同数据进行判断,第一件事就是对数据集的头进行判断跟分类,可能是考虑到这一点,所有的GPS数据都是非常规矩的,头的长度都是一样长的,这样判断起来也比较方便,而且组织的时候都是用“,”做分段,这样就比较容易对数据进行切割,然后处理。
4.经纬度坐标转化成为屏幕坐标的方法:
这是我早google上搜到的方法,首先把控制的警卫框架找到,最大经度减去最小经度,得到经度差.最大纬度减去最小纬度,得到纬度差。
然后将经度差乘以3600除以面板宽度,纬度差乘以3600除以面板宽度得到每秒经纬度代表的屏幕像素坐标。
最后为了让图像分布均匀.将实际的经纬度转化成秒,然后减去最小经度,然后除以每秒经度代表的屏幕像素坐标。
同理做纬度均匀。
最后将坐标点得到然后划线.
【心得体会】
GPS是一个非常重要的技术,精确的GPS数据时一把双刃剑。
在好的一面他可以方便人们做很多东西,在今后的时代找东西将离不开地图,而地图如果要做到精确的话就不得不用到GPS数据。
所以GPS数据是定量解析的基础数据.所有的定量分析都需要解析并且处理这些数据,这在生活上会给我们很大的方便,不仅在查找,交通导航等等方面都会有重要的用途。
所以这次实习对我们帮助很大,他让我们了解到生活中的GPS数据的结构,让我们学以致用,了解熟悉GPS并且爱上GPS,我们熟悉他,解析他,应用它。
可以创造出许多方便的应用于社会价值。
在医疗,规划,建设等方方面面都是重要的.
坏的一方面是过于精确的GPS数据让我们变得不安全,不仅是数据被盗窃之后可能造成国家的安全问题,对方的导弹什么的可以精确打击。
对我们的危险太大了。
错误的解析也会造成许多社会问题,比如修的地铁因为数据的偏差或解析的错误会造成重大的事故.所以我们处理GPS数据肩负十分重要的使命。
我们会好好处理这些数据的.
然后对于做这样一次实习我学到很多东西:
认识到生活中真真正正的GPS数据的样子和解析过程。
他所遵循的结构规范,还有认识到公共接口的重要性,他让数据变得有规矩。
让我树立了做好一名程序员的信心.让我们知道了做好一个GPS解析与应用的重要性与基本方法.实习让我们有了一些经验与许多信心。
最后做完期待已久的GPS室外实习以后,我感觉现在的卫星技术已经非常发达了。
在看不见的天上居然有至少7颗卫星在飞着,想想都觉得不可思议。
更不可思议的是我们可以与他对话,获得他得到的信息。
这更让我感到GPS技术室一门很有前途很有魅力的技术!
代码:
第一题:
stringforesix;
FileStreamsFile;
StreamReadersReader;
publicintNextPage(stringstr){
intflag=—1;
for(inti=0;
i<
str.Length;
i++){
if(i〈6){
foresix+=str[i];
}
textBox1.Text+=str[i];
}
if(foresix==”$GPGSA”){
tabctl。
SelectedTab=GPGSA;
flag=3;
elseif(foresix==”$GPGGA”){
SelectedTab=GPGGA;
flag=2;
elseif(foresix=="
$GPRMC"
){
tabctl.SelectedTab=GPRMC;
flag=1;
elseif(foresix==”$GPGSV"
){
tabctl.SelectedTab=GPGSV;
flag=4;
else{
MessageBox.Show(”不?
存ä
?
在¨
²
此ä
种?
格?
式º
!
ê
"
);
foresix=””;
returnflag;
//显示:
publicvoidShowPage(intflag,stringstr){
if(flag==1){
textBox2.Text=””;
textBox3。
Text="
;
textBox4.Text=””;
textBox5.Text=”"
;
textBox6.Text=””;
textBox7。
Text=”"
textBox8.Text=”"
textBox9。
Text=””;
textBox10.Text=”"
textBox11.Text=”"
textBox12。
textBox13.Text=””;
textBox14.Text=”"
for(inti=7;
i〈=8;
Text+=str[i];
for(inti=9;
=10;
textBox6。
Text+=str[i];
for(inti=11;
i〈=16;
textBox5。
if(str[18]==’A'
Text=”有®
D效¡
ì
Text=”无T效¡
”;
for(inti=20;
i〈=21;
i++)
{
textBox11。
Text+=str[i];
for(inti=22;
i〈=28;
i++){
textBox10。
Text+=str[i];
for(inti=32;
=34;
textBox9.Text+=str[i];
for(inti=35;
i〈=41;
textBox8。
for(inti=45;
=49;
textBox13。
Text+=str[i];
for(inti=51;
=56;
textBox14.Text+=str[i];
for(inti=58;
=59;
textBox4。
Text+=str[i];
for(inti=60;
=61;
}
for(inti=62;
=63;
textBox2。
}
SelectedTab=START;
sFile=newFileStream("
track.txt”,FileMode.Open,FileAccess。
Read);
sReader=newStreamReader(sFile);
button1.Enabled=false;
button2。
Enabled=false;
label55。
Left-=2;
if(label55.Right〈0){
label55.Left=this。
Width;
timer1.Enabled=false;
stringstr=sReader.ReadLine();
intflag=NextPage(str);
button4。
Enabled=false;
button1.Enabled=true;
Enabled=true;
ShowPage(flag,str);
第二题:
usingSystem;
usingSystem。
Collections。
Generic;
usingSystem.ComponentModel;
usingSystem.Data;
Drawing;
Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
IO;
namespaceGPS
publicpartialclassForm1:
Form
{
BitmapbitM;
Graphicsg;
Penpen=newPen(newSolidBrush(Color.Black),2.0f);
Point[]point=newPoint[4];
FileStreamsFile;
StreamReadersReader;
inti=4;
intj=0;
doublescaleX,scaleY,minX,maxY;
string[]textline=File。
ReadAllLines(”track。
txt"
intlines;
//track共2有®
D多¨
¤
少¦
¨
´
行D
publicForm1()
{
InitializeComponent();
bitM=newBitmap(this.panel1.Width,this。
panel1。
Height);
g=Graphics。
FromImage(bitM);
lines=textline。
Length;
privatevoidbutton1_Click(objectsender,EventArgse)
{
//panel1。
Controls.Clear();
label1.Visible=false;
pictureBox1.Visible=false;
timer1.Enabled=true;
sFile=newFileStream("
track.txt"
,FileMode.Open,FileAccess。
sReader=newStreamReader(sFile);
button1。
pictureBox2。
Visible=true;
pictureBox3.Visible=true;
pictureBox4.Visible=true;
pictureBox5.Visible=true;
pictureBox6.Visible=true;
pictureBox7.Visible=true;
pictureBox8.Visible=true;
pictureBox9.Visible=true;
pictureBox10.Visible=true;
pictureBox11。
Visible=true;
privatevoidpanel1_Paint(objectsender,PaintEventArgse)
ControlPaint。
DrawBorder(e.Graphics,panel1.ClientRectangle,Color。
Orange,ButtonBorderStyle。
Solid);
publicvoidclin()
textBox1.Text="
”;
textBox2.Text="
textBox3.Text="
textBox4.Text="
textBox5.Text="
if(lines〈=30)
timer1.Enabled=false;
privatevoidtimer1_Tick(objectsender,EventArgse)
if(lines>
30)
clin();
stringtempstr1,tempstr2;
string[]data;
string[]str_time=newstring[4];
string[]str_avaliable=newstring[4];
string[]str_jd=newstring[4];
string[]str_wd=newstring[4];
int[]x=newint[4];
int[]y=newint[4];
double[]screenX=newdouble[4];
double[]screenY=newdouble[4];
while(i〉0)
stringstr=sReader.ReadLine();
lines—-;
data=str.Split(’,'
);
str_avaliable[j]=data[2];
//有®
位?
if(str[3]==’R’&
&str[4]==’M'
&
&
str[5]=='
C’&
&str_avaliable[j]==”A"
)
i--;
tempstr1=data[3];
tempstr2=data[5];
screenX[j]=double.Parse(tempstr2)*3600/scaleX-minX;
screenY[j]=maxY-double。
Parse(tempstr1)*3600/scaleY;
x[j]=(int)screenX[j];
y[j]=(int)screenY[j];
str_time[j]=data[1];
//时º
¡
À
间?
str_jd[j]=data[5];
str_wd[j]=data[3];
j++;
if(double。
Parse(str_time[0])>
=075245。
000)
pen=newPen(newSolidBrush(Color.Red),2。
0f);
for(inta=0;
a<
4;
a++)
point[a]。
X=x[a];
point[a]。
Y=y[a];
for(inta=0;
=1;
textBox3。
Text+=str_time[0][a];
for(inta=2;
a〈=3;
textBox4。
Text+=str_time[0][a];
for(inta=4;
=9;
textBox5.Text+=str_time[0][a];
textBox1。
Text=str_jd[0];
textBox2.Text=str_wd[0];
if(str_avaliable[0]=="
A"
textBox6。
有®
else
textBox6.Text="
无T效¡
clin();
g.DrawLine(pen,point[0],point[1]);
//this。
BackgroundImage=bitM;
Refresh();
a〈=1;
Text+=str_time[1][a];
for(inta=2;
=3;
textBox4.Text+=str_time[1][a];
for(inta=4;
a〈=9;
textBox5。
Text+=str_time[1][a];
textBox1.Text=str_jd[1];
textBox2。
Text=str_wd[1];
if(str_avaliable[1]==”A”)
textBox6.Text=”有®
textBox6.Text=”无T效¡
g。
DrawLine(pen,point[1],point[2]);
//this.panel1。
BackgroundImage=bitM;
Refresh();
=1;
textBox3.Text+=str_time[2][a];
Text+=str_time[2][a];
textBox5.Text+=str_time[2][a];
Text=str_jd[2];
Text=str_wd[2];
if(str_avaliable[2]==”A"
g.DrawLine(pen,point[2],point[3]);
a〈=1;
Text+=str_time[3][a];
a〈=3;
Text+=str_time[3][a];
Text+=str_t