




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、view plaincopy to clipboardprint?GPS数据提取解析源码GPSsourcedataextractionanalysis,wecanrefertolearnfromGPS数据解析数据拆分坐标转换显示线路图源代码逐条读取gps数据然后进行拆分解析,坐标转换,绘制线路。很好的示例多多交流学习。本程序是基于VC+建立的单文档工程。废话少说,直接上代码/获取子字符串个数 intGetSubStrCount(CStringstr,charcFlag)cFlag=,;inti=0;BOOLisHas=FALSE;for(intiStart=-1;-1!=(iStart=str
2、.Find(cFlag,iStart+1);i+)isHas=TRUE;if(!isHas)return0;elsereturni+1;/获取子字符串 /i序号0 CStringGetSubStr(CStringstr,inti,charcFlag)cFlag=,;intiStart=-1;intiEnd=0;intj=0;intiStrCount;iStrCount=GetSubStrCount(str,cFlag);if(iiStrCount-1|i0)str=;returnstr;else/donothing if(i=iStrCount-1)i=iStrCount;for(;ji-1;
3、j+)iStart=str.Find(cFlag,iStart+1);returnstr.Mid(iStart+1,str.GetLength()-iStart-1);else/donothing for(;ji;j+)iStart=str.Find(cFlag,iStart+1);iEnd=str.Find(cFlag,iStart+1);returnstr.Mid(iStart+1,iEnd-iStart-1);/数据解析 CStringCGpsDataView:Analyzing(CStringstr)CStringsubStr20;charcFlag=,;intj=GetSubStrC
4、ount(str,cFlag);/得到该行的子字符串个数 CStdioFilewFile;wFile.Open(save.txt,CFile:modeCreate|CFile:modeWrite|CFile:typeText);/将数据写入文件 for(inti=0;i3)subStr6=subStr6.Left(2);elsesubStr6=0;subStr6+=分;subStr6.Insert(0,subStr5);subStr6.Insert(0,当地时域:);subStr0+=subStr1;subStr0+=subStr2;subStr0+=subStr6;/MessageBox(s
5、ubStr0); wFile.WriteString(subStr0);/将数据写入文件 /GPGSA数据 elseif(subStr0=$GPGSA)/卫星捕获模式,以及定位模式 CStringCatchLocation;if(subStr1=M)if(subStr2=1)CatchLocation=手动捕获卫星,未定位!;elseif(subStr2=2)CatchLocation=手动捕获卫星,2D定位!;elseif(subStr2=3)CatchLocation=手动捕获卫星,3D定位!;elseif(subStr1=A)if(subStr2=1)CatchLocation=自动捕获
6、卫星,未定位!;elseif(subStr2=2)CatchLocation=自动捕获卫星,2D定位!;elseif(subStr2=3)CatchLocation=自动捕获卫星,3D定位!;/各卫星定位结果 subStr3.Insert(0,各卫星定位结果:);subStr3+=;subStr4.Insert(0,subStr3);subStr4+=;subStr5.Insert(0,subStr4);subStr5+=;subStr6.Insert(0,subStr5);subStr6+=;subStr7.Insert(0,subStr6);subStr7+=;subStr8.Insert
7、(0,subStr7);subStr8+=;subStr9.Insert(0,subStr8);subStr9+=;subStr10.Insert(0,subStr9);subStr10+=;subStr11.Insert(0,subStr10);subStr11+=;subStr12.Insert(0,subStr11);subStr12+=;subStr13.Insert(0,subStr12);subStr13+=;subStr14.Insert(0,subStr13);subStr14+=;/空间(三维)位置精度因子 subStr15.Insert(0,空间(三维)位置精度因子:);/
8、平面位置精度因子 subStr16.Insert(0,平面位置精度因子:);/高度位置精度因子 subStr17=subStr17.Left(3);subStr17.Insert(0,高度位置精度因子:);subStr0+=CatchLocation;subStr0+=subStr14;subStr0+=subStr15;subStr0+=subStr16;subStr0+=subStr17;/MessageBox(subStr0); wFile.WriteString(subStr0);/将数据写入文件 /GPGSV数据 elseif(subStr0=$GPGSV)/MessageBox(s
9、ubStr0); /卫星编号、卫星仰角(090度)、卫星方位角(0359度)、信噪比 subStr4.Insert(0,卫星编号:);subStr5.Insert(0,仰角:);subStr6.Insert(0,方位角:);subStr7.Insert(0,信噪比:);subStr4+=subStr5;subStr4+=subStr6;subStr4+=subStr7;/MessageBox(subStr4); subStr8.Insert(0,卫星编号:);subStr9.Insert(0,仰角:);subStr10.Insert(0,方位角:);subStr11.Insert(0,信噪比:
10、);subStr8+=subStr9;subStr8+=subStr10;subStr8+=subStr11;/MessageBox(subStr8); subStr12.Insert(0,卫星编号:);subStr13.Insert(0,仰角:);subStr14.Insert(0,方位角:);subStr15.Insert(0,信噪比:);subStr12+=subStr13;subStr12+=subStr14;subStr12+=subStr15;/MessageBox(subStr12); subStr16.Insert(0,卫星编号:);subStr17.Insert(0,仰角:)
11、;subStr18.Insert(0,方位角:);if(strlen(subStr19)3)subStr19=subStr19.Left(2);elsesubStr19=0;subStr19.Insert(0,信噪比:);subStr16+=subStr17;subStr16+=subStr18;subStr16+=subStr19;/MessageBox(subStr16); wFile.WriteString(subStr16);/将数据写入文件 returnstr;/读取文件数据并解析 voidCGpsDataView:OnFileRead()/TODO:在此添加命令处理程序代码 CSt
12、dioFilemyFile;CStringoneLine;charcFlag=,;CStringsubStr20;/读取GPS数据文件 if(!myFile.Open(gps.txt),CFile:modeRead|CFile:typeText)AfxMessageBox(_T(打开文件错误!);return;else/*donothing*/while(myFile.ReadString(oneLine)/读一行 /MessageBox(oneLine); intj=GetSubStrCount(oneLine,cFlag);/得到该行的子字符串个数 /校验 if(CheckNum(oneL
13、ine)/MessageBox(_T(数据校验.接收正确!.); for(inti=0;i=0)Sign=1;elseSign=-1;Dms=fabs(Dms);/绝对值 Degree=floor(Dms);/取度floor(2.800)=2.0000 Miniute=floor(fmod(Dms*100.0,100.0);/fmod计算余数 Second=fmod(Dms*10000.0,100.0);Rad=Sign*(Degree+Miniute/60.0+Second/3600.0)*PI/180.0;returnRad;doubleRad2Dms(doubleRad)doubleDe
14、gree,Miniute;doubleSecond;intSign;doubleDms;if(Rad=0)Sign=1;elseSign=-1;Rad=fabs(Rad*180.0/PI);Degree=floor(Rad);Miniute=floor(fmod(Rad*60.0,60.0);Second=fmod(Rad*3600.0,60.0);Dms=Sign*(Degree+Miniute/100.0+Second/10000.0);returnDms;/正算公式 boolGpsPoint:BL2xy()/大地测量学基础(吕志平乔书波北京:测绘出版社2010.03) doubleX;/
15、由赤道至纬度为B的子午线弧长(P1065-41) doubleN;/椭球的卯酉圈曲率半径 doublet;doublet2;doublem;doublem2;doubleng2;doublecosB;doublesinB;X=A1*B*180.0/PI+A2*sin(2*B)+A3*sin(4*B)+A4*sin(6*B);sinB=sin(B);cosB=cos(B);t=tan(B);t2=t*t;N=a/sqrt(1-e2*sinB*sinB);m=cosB*(L-L0);m2=m*m;ng2=cosB*cosB*e2/(1-e2);/P156(6-63公式) x=X+N*t*(0.5+
16、(5-t2+9*ng2+4*ng2*ng2)/24.0+(61-58*t2+t2*t2)*m2/720.0)*m2)*m2);y=N*m*(1+m2*(1-t2+ng2)/6.0+m2*(5-18*t2+t2*t2+14*ng2-58*ng2*t2)/120.0);/y+=500000; returntrue;/反算公式 boolGpsPoint:xy2BL()doublesinB;doublecosB;doublet;doublet2;doubleN;/椭球的卯酉圈曲率半径 doubleng2;doubleV;doubleyN;doublepreB0;doubleB0;doubleeta;/
17、y-=500000; B0=x/A1;dopreB0=B0;B0=B0*PI/180.0;B0=(x-(A2*sin(2*B0)+A3*sin(4*B0)+A4*sin(6*B0)/A1;eta=fabs(B0-preB0);while(eta0.000000001);B0=B0*PI/180.0;B=Rad2Dms(B0);sinB=sin(B0);cosB=cos(B0);t=tan(B0);t2=t*t;N=a/sqrt(1-e2*sinB*sinB);ng2=cosB*cosB*e2/(1-e2);V=sqrt(1+ng2);yN=y/N;B=B0-(yN*yN-(5+3*t2+ng2
18、-9*ng2*t2)*yN*yN*yN*yN/12.0+(61+90*t2+45*t2*t2)*yN*yN*yN*yN*yN*yN/360.0)*V*V*t/2;L=L0+(yN-(1+2*t2+ng2)*yN*yN*yN/6.0+(5+28*t2+24*t2*t2+6*ng2+8*ng2*t2)*yN*yN*yN*yN*yN/120.0)/cosB;returntrue;/设置中央子午线 boolGpsPoint:SetL0(doubledL0)L0=Dms2Rad(dL0);returntrue;/将度分秒经纬度转换为弧度后再转换为平面坐标 boolGpsPoint:SetBL(doubl
19、edB,doubledL)B=Dms2Rad(dB);L=Dms2Rad(dL);BL2xy();returntrue;boolGpsPoint:GetBL(double*dB,double*dL)*dB=Rad2Dms(B);*dL=Rad2Dms(L);returntrue;/将平面坐标转换为(弧度)经纬度 boolGpsPoint:Setxy(doubledx,doubledy)x=dx;y=dy;xy2BL();returntrue;boolGpsPoint:Getxy(double*dx,double*dy)*dx=x;*dy=y;returntrue;GpsPoint_Krasov
20、sky:GpsPoint_Krasovsky()a=6378245;/长半径 f=298.3;/扁率的倒数(扁率:(a-b)/a) e2=1-(f-1)/f)*(f-1)/f);/第一偏心率的平方 e12=(f/(f-1)*(f/(f-1)-1;/第二偏心率的平方 /克拉索夫斯基椭球 A1=111134.8611;A2=-16036.4803;A3=16.8281;A4=-0.0220;/*坐标转换 boolCGpsDataView:CoordCovert(CStringlatitude,CStringlongitude)doublebbb=atof(latitude);doublelll=a
21、tof(longitude);/度分格式转换为度分秒格式 bbb=Dm2Dms(bbb);lll=Dm2Dms(lll);doubleMyL0;/中央子午线 doubleMyB=bbb;/33d44m55.6666s doubleMyL=lll;/3度带,109d22m33.4444s /计算当地中央子午线,3度带 MyL0=fabs(MyL);MyL0=floor(MyL);MyL0=3*floor(MyL0/3);GpsPoint_KrasovskyMyPrj;MyPrj.SetL0(MyL0);MyPrj.SetBL(MyB,MyL);doubleOutMyX;doubleOutMyY;
22、OutMyX=MyPrj.x;/正算结果:坐标x OutMyY=MyPrj.y;/结果:坐标y CStringstrTemp1;CStringstrTemp2;CStringstrTemp3;CStringstrTemp4;strTemp1.Format(%f,OutMyX);strTemp2.Format(%f,OutMyY);strTemp1.Insert(0,x=);strTemp2.Insert(0,y=);strTemp2.Insert(0,strTemp1);strTemp2.Insert(0,坐标转换:);strTemp3.Format(%f12,MyB);strTemp4.Format(%f12,MyL);strTemp3.Insert(0,B=);strTemp4.Insert(0,L=);strTemp4.Insert(0,strTemp3);strTemp2.Insert(0,strTemp4);/MessageBox(strTemp2); DrawPoint(MyPrj.x,MyPrj.y);returntrue;/= /度分格式转换为度分秒格式 doubleCGpsDataView:Dm2Dms(doubleDm)doubleDms;doubletemp;te
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 春节策划方案(16篇)
- 中国上市公司数智化指数报告(2012年至2023年)
- 怎样解除投资合同协议书
- 展会购销合同协议书模板
- 员工合同协议书税前工资
- 招标公告及合同协议书
- 3.2《蜀相》课件+2024-2025学年统编版高二语文选择性必修下册
- 抵账房转让合同协议书
- 药品销售合同协议书范本
- 餐饮订餐合同协议书范本
- 2025-2030年电石项目投资价值分析报告
- 2025至2030中国RPA(机器人流程自动化)市场规模体量及趋势前景研究报告
- 2025江苏中天钢铁集团有限公司产品采购销售合同
- 《演讲与表达技巧》课件
- 2025年四川省成都市成华区中考二诊英语试题(原卷版+解析版)
- (四检)泉州市2025届高中毕业班适应性练习卷生物试卷(含答案)
- 2025年高考化学考试易错题易错类型09物质结构与性质(7大易错点)(学生版+解析)
- 南方Cass入门培训
- 水务集团面试试题及答案
- 驿站场地安全管理制度
- 食堂材料领用管理制度
评论
0/150
提交评论