
一个简单的小实验,仍有很多需要改进的地方.
首先是实验工具:
①C++ builder
②Googleearth——找到并获取校准点的经度,定义屏幕截图的大致范围
③Getscreen——与Googleearth的小型插件配合以获取合适的镶嵌图
④绘图工具-确定像素的坐标,方便计算像素之间的距离与经纬度的比例关系
⑤具有USB接口的GPS,包括相应的驱动程序sirfdemo_NMEA,这是一种用于在PC上查看和收集收集的数据的软件
第二,GPS数据
1. 数据收集
GPS信号数据采集,参数提取和存储系统设计使用基于Windows操作平台的面向对象程序设计.
启动GPS信号,从GPS信号中提取“经度”,“纬度”,“速度”,“日期”和其他数据,以NMEA-0813格式保存数据,并提取数据.
使用GPS收集数据时,请将GPS连接到移动计算机,启动,然后开始接收数据.
大多数GPS可以以符合NEMA0183标准的ASCII码形式输出各种数据信息. NEMA0183通信标准格式由美国国家海洋管理局电子协会制定. 有数十种语句和各种数据语句. 类型全部以“ $”开头,数据主要由帧头,帧尾和帧内数据组成,主要语句为GPGGA,GPPVG,GPRMC等.
数据提取: 在本实验中,GPS参数的纬度,经度和速度信息均由GPRMC提出. 由于每行数据均以“ $”加上标识符开头,因此在从原始收集的数据中提取上述数据时,将“ $”和标识符的组合用于确定信息的来源. 由于每个数据项都使用“,”作为定界符,因此数据的位数通常会更长,但是每种数据类型的相对位置都不会改变. 因此,在查找经度等时,只需查找并记录“”,就可以提取参数的数量. 从原始数据中一次提取经度,纬度和速度信息,并将其存储在另一个存储文件中,以便在轨迹再现中,可以使用所提出的数据更快,更有效地再现轨迹. 在存储过程中,考虑到轨迹的再现,通过从该存储文件中提取辅助数据来识别各种类型的数据项并不容易,因此每个固定点处的每个数据项都以字母结尾作为第二个参数. 提取时使用分隔符.
2. 数据存储
记录的数据以TXT格式保存为文本文件,保存格式为:
$ GPGGA,...(时间),...(纬度),...(北纬度),...(经度),...(东经度),...
$ GPRMC,.........
…………………………
高度,速度和其他数据. 如:
$ GPRMC,025957,A,3037.8723,N,10404.8260,E,000.0,000.0,271004,001.1,W * 6C
$ GPGGA,025957,3037.8723,N,10404.8260,E,1,06,1.5,507.4,M,-32.1,M ,, * 63
$ GPGSA,A,3,01,,06,14,16,20,,25 ,,,, 2.6,1.5,2.1 * 31
$ GPGSV,3,1,09,01,73,016,51,03,04,182,,06,19,068,48,14,32,118,47 * 7B
$ GPGSV,3,2,09,16,66,206,49,20,36,293,44,23,15,314,39,25,57,016,52 * 7C

$ GPGSV,3,3,09,30,03,041 ,,,,,,,,,,,, * 45
三个实验步骤
①一般过程: (天线)GPS-通过串口USB连接到笔记本电脑-(数据处理,保存和保留以供再处理)GPS数据收集-
根据数据确定地图范围和拦截界面设计(C ++ builder),然后开始编程数据存储(第一个提取内容以标准格式存储)
-数据的第二次提取和轨迹的再现(校准)
②GPS数据采集: 使用GPS和PC来实现移动坐标点数据采集
1. 安装Driver.exe驱动程序;
2. 插入;
3. 重新启动系统;
4. 新硬件检测到检测有效;
5. 运行sirfdemo_NMEA.exe;
6. 在“数据源”选项中,设置端口号COM1〜COM4(根据具体情况进行调整);
7. 运行“连接”并查看数据;
8. 单击“磁盘符号”以设置保存的数据文件的位置(首先停止连接,在连接之前设置文件名,并且屏幕数据应更改);
9. 使用“资源管理器”连续打开文件,检查文件容量是否正在增加,以及最近的数据是否正在更改. 如果所有这些都在更改,则意味着所收集的GPS数据正在连续存储. 指定文件.
10. 以上内容完成后,您就可以出去测量数据了
③拦截地图: 此处使用Google Earth,Getscreen和绘图工具. 可以使用类似的工具,例如百度地图.
参考点坐标在Google Earth上获得,像素点在绘图工具上获得. 至于大地图的拼接,首先打开Google Earth,您可以使用Getscreen(与之匹配的小型插件)获得各种拼图. 由于我的计算机无法读取超过250M的图片,因此我低于250M. 在指定范围内尽可能切出准确的小比例图纸.
地图是Google地球拍摄的成都卫星地图. 剪切的图像精度高,道路畅通. Google Earth允许用户旋转角度以查看地形和建筑物,并在地图上添加注释.
④一次数据提取: 一般过程如下,其中K计算周期数以及可用数据集
1. 定义变量,例如纬度,经度gps参数,速度和高度
2. 指定收集的数据的文件路径
3. 如果数据以“ $ GPRMC”开头,则继续读取以下数据,否则读取下一行
4. 指针从“ $ GPGGA” *开始提取向前的纬度,速度和经度,然后提取高度
5. 继续进入循环(第3步),直到文件结尾

6. 将纬度,经度和速度分配给相应的文本输出,并且第一次提取结束
提取前的数据格式:
$ GPRMC,025957,A,3037.8723,N,10404.8260,E,000.0,000.0,271004,001.1,W * 6C
$ GPGGA,025957,3037.8723,N,10404.8260,E,1,06,1.5,507.4,M,-32.1,M ,, * 63
$ GPGSA,A,3,01,,06,14,16,20,,25 ,,,, 2.6,1.5,2.1 * 31
$ GPGSV,3,1,09,01,73,016,51,03,04,182,,06,19,068,48,14,32,118,47 * 7B
$ GPGSV,3,2,09,16,66,206,49,20,36,293,44,23,15,314,39,25,57,016,52 * 7C
$ GPGSV,3,3,09,30,03,041 ,,,,,,,,,,,, * 45
……………………………………………………
……………………………………………………
首次提取后的数据格式:
纬度: 3039.9234n
经度: 10407.9395e
速度: 9.49v
高度: 447.8m
纬度: 3039.9256n
经度: 10407.9415e
速度: 10.11v
高度: 447.7m
纬度: 3039.9277n
经度: 10407.9435e
速度: 9.77v
高度: 447.5m
………………………………………………
……………………………………………………

总共计算了K个组,这在第二次提取中便于判断文件的结尾. 首先在FORM1上设置相应的按钮,然后填写相应的响应代码.
提取所需的经度,纬度,速度和高度一次,并将其存储在d: \\ gps data.txt中. 由于速度和高度不在同一行数据中,因此需要循环判断两次. 首先判断经度,纬度和速度,然后判断高度. 我设置了一个全局变量K来计算多少组参数(经度,纬度,速度,高度和周期是一次一组),用于计算要达到正常结束所要读取的数据集的数量轨道复制中文件的位置. 有关程序的具体实现,请参见代码和相应的注释.
⑤二次数据提取: 第二次提取过程与第一次提取过程大致相同,只是数据存储格式不同.
1. 初始变量设置,设置暂停,继续和其他功能
2. 每组最大行数为5,并根据行值提取经度和纬度
3. 给相应的变量赋值以重绘轨迹
4. 显示纬度,经度和速度信息,并根据速度设置专色
5. 经纬度数据转换和定位
6. 绘制亮点
7. 根据K确定提取是否结束
第二次数据提取使用相应的字母(m,v,ngps参数,e)作为定界符,从上述存储文件d: \\ gps data.txt中提取纬度,经度和速度信息,以使其更加方便. 数据用于轨迹再现. 这次提取的数据不再存储,直接用于轨迹显示.
K用于计算文件读取数据的结束时间,以防止while(!feof(......))找不到文件的结尾并导致卡住,程序分为第二个数据提取,参考点选择,经纬度格式转换,轨迹坐标点的计算以及实现ScrollBox滑块与轨迹一起自动移动的功能.
⑥再现曲目
在程序的此部分中,我们使用stop来确定是否等于1以强制跳出循环,并使用flag来确定它是否为0以及该函数
if(flag==0)
{
Button5->Caption="暂停";
flag=1;
}
else
{
Button5->Caption="继续";
flag=0;
}//实现程序的暂停。
由于存储以@结尾,因此纬度,经度和速度都以@为标记重新提取.
在C ++ BUILDER中使用ComboBox1,我们实现了定位的选择和速度色域的选择.
光斑的实现主要使用Image1-> Canvas-> Pen-> Width = 4;
点的颜色使用命令Image1-> Canvas-> Pen-> Color =(颜色名称).
float x=(bb-j1)*(x1-x2)/(j1-j2)+x1;
float y=(dd-w1)*(y1-y2)/(w1-w2)+y1;
Image1->Canvas->MoveTo(x,y);
Image1->Canvas->LineTo(x,y);实现点的定位与移动
速度由Edit3中的实际速度设置. 共有三种划分速度的方法,以便可以在不同的速度级别上区分不同的速度段,并且每个划分都分为四个段,分别用不同的颜色表示. 如:
ComboBox1->Items->Add(">80");
ComboBox2->Items->Add("60~80");
ComboBox3->Items->Add("40~60");
ComboBox4->Items->Add("<40");
if
(
atof(Edit3->Text.c_str())*1.852>40)
{
Image1->Canvas->Pen->Color=clRed;
}
else if
(
20<atof(Edit3->Text.c_str())*1.852&&atof(Edit3->Text.c_str())*1.852<=40)
{
Image1->Canvas->Pen->Color=clYellow;
}
else if
(
10<atof(Edit3->Text.c_str())*1.852&&atof(Edit3->Text.c_str())*1.852<=20)
{
Image1-> Canvas->Pen->Color=clGreen;
}
else
{
Image1->Canvas->Pen->Color=clBlue;
}
您可以从程序的交互界面直接在位图中输入两个定位点的定位坐标,也可以直接输入两个定位点的转换后的纬度和经度.
在此实验中,程序给出了成都地图上两个校准点和望江校区上两个校准点的纬度和经度. 选择地图以确定两个校准点,然后找到轨道. 我们可以直接从界面中选择这四个点. 这四点如下:
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/shumachanpin/article-237769-1.html
你很棒
疑似迎接
你知道多少华人在美国服务吗