📄 gps_parsor.cpp
字号:
#include "StdAfx.h"
#include "stdlib.h"
#include "string.h"
#include "GPS_Parsor.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
GPS_Parsor::GPS_Parsor()
{
longitude_=0;
latitude_=0;
height_=0;
velocity_=0;
}
GPS_Parsor::~GPS_Parsor()
{
}
int GPS_Parsor::parse(const char* dat)
{
/*char v=new char[5];//char v[5];//临时存放速度
char n=new char[9];//char n[9];//临时存放纬度
char e=new char[9];//char e[9];//临时存放经度
char m=new char[5];//char m[5];//临时存放高度*/
//**************************************
//方法一. 考虑太繁琐。
//***************************************
/* char v[5];
char n[9];
char e[9];
char m[5];
CString strline;
//结束位如何设,又不存在文件,只是一帧数据
if(*dat=='$')
{
dat++;
if(*dat=='G')
{
dat++;
if(*dat=='P')
{
dat++;
if(*dat=='R')
{
dat++;
if(*dat=='M')
{
dat++;
if(*dat=='C')
{
dat++;
if(*dat==',')
{
for(int i=0,p=0;i<39;i++)
{
dat++;
if(*dat==',') p++;
if(p==6)
{
dat++;break;
}
}
//速度
for(int ii=0;ii<5;ii++)
{
v[ii]=*dat;
dat++;
if(*dat==',') break;
}
//如何转化赋值,这样转是否正确。
CString s1=v;
velocity_=atof(s1);
}
}
}
}
else if(*dat=='G')
{
dat++;
if(*dat=='G')
{
dat++;
if(*dat=='A')
{
dat++;
if(*dat==',')
{
for(int i=0;i<12;i++)
{
dat++;
if(*dat==',')
{
dat++;break;
}
}
//纬度
for(int j=0;j<9;j++)
{
n[j]=*dat;
dat++;
}
//如何转化赋值 //数据位丢失
CString s2=n;
longitude_ = atof(s2);
dat+=3;
//经度
for(int l=0;l<10;l++)
{
e[l]=*dat;
dat++;
}
//如何转换
CString s3=e;
latitude_=atof(s3);
//q存放逗号个数
for(int p=0,q=0;p<12;p++)
{
dat++;
if(*dat==',') q++;
if(q==5)
{
dat++;break;
}
}
if(*dat==',')dat++;
//高度
for(int jj=0;jj<5;jj++)
{
m[jj]=*dat;
dat++;
}
//如何转换
CString s4=m;
height_=atof(s4);
}
}
}
}
}
}
}
return 0;*/
//****************************************8
//方法二.考虑用CString的函数
//*****************************************
//分别作为速度纬度经度高度的临时存放
/*char v[5];
char n[9];
char e[9];
char m[5];*/
// 存数据,把数据给字符串
CString str(dat);
//调用Find()函数找到第一个逗号时的索引
int index=str.Find(',');
if(index!=-1)
{
return -1;
}
// if(index!=-1)
// {
//数据处理标志位 ,这有$GPGGA 和$GPRMC两种情况
CString label=str.Left(index);
//提取经纬度 高度信息
if(label==_T("$GPGGA"))
{
//纬度标志位,第三个逗号 ,w往前处理纬度,往后处理经度
int index3=str.Find(_T(",N,"),index);
CString n=str.Mid(index3-9,9);
longitude_ = atof(n);
//第三个标志
//int index3=str.Find(",N,",index2);
CString e=str.Mid(index3+3,10);
latitude_=atof(e);
//第四个标志,这要考究一下,有些数据并没有五位
int index4=str.Find(_T(",M,"),index3);
if(str.Mid(index4-3,1)==_T(","))
{
CString m=str.Mid(index4-3,3);
height_=atof(m);
}
else if(str.Mid(index4-4,1)==_T(","))
{
CString m=str.Mid(index4-4,4);
height_=atof(m);
}
else if(str.Mid(index4-5,1)==_T(","))
{
CString m=str.Mid(index4-5,5);
height_=atof(m);
}
}
//提取速度信息
else if(label==_T("$GPRMC"))
{
int index2=str.Find(_T(",E,"),index);
//速度*.**4位
if(str.Mid(index2+7,1)==_T(","))
{
CString v=str.Mid(index2+3,4);
velocity_=atof(v);
}
//速度**.**5位
else if(str.Mid(index2+8,1)==_T(","))
{
CString v=str.Mid(index2+3,5);
velocity_=atof(v);
}
}
// }
return 0;
}
double GPS_Parsor::latitude()
{
return latitude_;
}
double GPS_Parsor::height()
{
return height_;
}
double GPS_Parsor::velocity()
{
return velocity_;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -