导航与定位实验报告Word文档格式.docx

上传人:b****6 文档编号:18222301 上传时间:2022-12-14 格式:DOCX 页数:23 大小:678.52KB
下载 相关 举报
导航与定位实验报告Word文档格式.docx_第1页
第1页 / 共23页
导航与定位实验报告Word文档格式.docx_第2页
第2页 / 共23页
导航与定位实验报告Word文档格式.docx_第3页
第3页 / 共23页
导航与定位实验报告Word文档格式.docx_第4页
第4页 / 共23页
导航与定位实验报告Word文档格式.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

导航与定位实验报告Word文档格式.docx

《导航与定位实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《导航与定位实验报告Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。

导航与定位实验报告Word文档格式.docx

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

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

当前位置:首页 > 高等教育 > 艺术

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

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