gps数据处理 java_GPS数据读取与处理
GPS数据读取与处理
GPS模块简介
SiRF芯片在2004年发布的最新的第三代芯片SiRFstar III(GSW 3.0/3.1),使得民用GPS芯片在性能方面登上了一个顶峰,灵敏度比以前的产品大为提升。这一芯片通过采用20万次/频率的相关器提高了灵敏度,冷开机/暖开机/热开机的时间分别达到42s/38s/8s,可以同时追踪20个卫星信道。是目前市场上应用最为广泛,同时性价比也非常高的一款芯片,因此在本设计中同样采用以此芯片为核心的GPS模块。
GPS模块的数据格式
对GPS模块的数据处理本质上还是串口通信程序设计,只是GPS模块的输出遵循固定的格式,通过字符串检索查找即可从模块发送的数据中找出需要的数据,常用的GPS模块大多采用NMEA-0183 协议。NMEA-0183 是美国国家海洋电子协会(National Marine Electronics Association)所指定的标准规格,这一标准制订所有航海电子仪器间的通讯标准,其中包含传输资料的格式以及传输资料的通讯协议。
以下是一组正常的GPS 数据
$GPGGA,082006.000,3852.9276,N,11527.4283,E,1,08,1.0,20.6,M,,,,0000*35
$GPRMC,082006.000,A,3852.9276,N,11527.4283,E,0.00,0.0,261009,,*38
$GPVTG,0.0,T,,M,0.00,N,0.0,K*50
下面分别对每组数据的含义进行分析。
GPS 固定数据输出语句($GPGGA),这是一帧GPS 定位的主要数据,也是使用最广的数据。为了便于理解,下面举例说明$GPGGA语句各部分的含义。
例:$GPGGA,082006.000,3852.9276,N,11527.4283,E,1,08,1.0,20.6,M,,,,0000*35
其标准格式为:
$GPGGA,(1),(2),(3),(4),(5),(6),(7),(8),(9),M,(10),M,(11),(12)*hh(CR)(LF)
各部分所对应的含义为:
(1) 定位UTC 时间:08 时20 分06 秒
(2) 纬度(格式ddmm.mmmm:即dd 度,mm.mmmm 分);
(3) N/S(北纬或南纬):北纬38 度52.9276 分;
(4) 经度(格式dddmm.mmmm:即ddd 度,mm.mmmm 分);
(5) E/W(东经或西经):东经115 度27.4283 分;
(6) 质量因子(0=没有定位,1=实时GPS,2=差分GPS):1=实时GPS;
(7) 可使用的卫星数(0~8):可使用的卫星数=08;
(8) 水平精度因子(1.0~99.9);水平精度因子=1.0;
(9) 天线高程(海平面,-9999.9~99999.9,单位:m);天线高程=20.6m);
(10) 大地椭球面相对海平面的高度(-999.9~9999.9,单位:m):无;
(11) 差分GPS 数据年龄,实时GPS 时无:无;
(12) 差分基准站号(0000~1023),实时GPS 时无:无;
*总和校验域;hh 总和校验数:35(CR)(LF)回车,换行。
GPRMC(建议使用最小GPS 数据格式)
$GPRMC,082006.000,A,3852.9276,N,11527.4283,E,0.00,0.0,261009,,*38
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>
(1) 标准定位时间(UTC time)格式:时时分分秒秒.秒秒秒(hhmmss.sss)。
(2) 定位状态,A = 数据可用,V = 数据不可用。
(3) 纬度,格式:度度分分.分分分分(ddmm.mmmm)。
(4) 纬度区分,北半球(N)或南半球(S)。
(5) 经度,格式:度度分分.分分分分。
(6) 经度区分,东(E)半球或西(W)半球。
(7) 相对位移速度, 0.0 至1851.8 knots
(8) 相对位移方向,000.0 至359.9 度。实际值。
(9) 日期,格式:日日月月年年(ddmmyy)。
(10) 磁极变量,000.0 至180.0。
(11) 度数。
(12) Checksum.(检查位)
$GPVTG 地面速度信息
例:$GPVTG,0.0,T,,M,0.00,N,0.0,K*50
字段0:$GPVTG,语句ID,表明该语句为Track Made Good and Ground Speed(VTG)地
面速度信息
字段1:运动角度,000 - 359,(前导位数不足则补0)
字段2:T=真北参照系
字段3:运动角度,000 - 359,(前导位数不足则补0)
字段4:M=磁北参照系
字段5:水平运动速度(0.00)(前导位数不足则补0)
字段6:N=节,Knots
字段7:水平运动速度(0.00)(前导位数不足则补0)
字段8:K=公里/时,km/h
字段9:校验值
表 1 GPS模块主要参数GPS模块主要参数
GPS
芯片组 SiRF Star III 工作频率 L1, 1575.42 MHz
粗捕获码
(C/A)率 1.023 MHz chip rate 同时跟踪通道数 20
灵敏度 -159 dBm 定位精度 5m(2维均方根, 允许广域差分系统)
最小速度 0.1 m/s 时间精度 1μS(与GPS时间同步)
默认
坐标系 1984年世界大地坐标系(WGS-84) 重获时间 0.1S(平均值)
热启动 1S(平均值) 温启动 38S(平均值)
冷启动 42S(平均值) 最高工作海拔 18km(60000feet)
最大
移动速率 515m/S(1000knots) 最大加速度 4g
最大
急冲度 20m/S3 电源电压 5V±0.5V
整机电流 约60mA,不超过100mA 整板外形 61mm×49mm×17mm
GPS
芯片外形 27.9mm×20mm×2.9mm 波特率 9600bps
数据输出格式 SiRF二进制格式或NMEA 0183 GGA, GSA, GSV, RMC,VTG,GLL 数据输出电平 同时具备TTL电平和RS232电平
数据
输出接口 20pin插针(TTL电平)和DB9母座
(RS232电平) 天线类型 外置有源GPS天线(3.3V/5V电压可选,
默认为3.3V)
后备电池 CR1220锂电池,3V,不可充电 工作温度 -40ºC至+85ºC
GPS模块的应用程序设计
GPS模块的应用程序设计主要分为两部分,第一部分为串口的设置于数据读取,第二部分为数据的分析和需要数据的提取。
与其他的关于设备编程的方法一样,在Linux下,操作、控制串口也是通过操作起设备文件进行的。在Linux下,串口的设备文件是/dev/ttyS0或/dev/ttyS1等。因此要读写串口,我们首先要打开串口,然后根据GPS模块的配置参数对串口的波特率、校验、流控制等进行设置,这些参数设置均通过对termios结构中c_cflag的配置实现,串口配置部分函数如下:
int gps::set_opt(int fd,int nSpeed, int nBits, char nEvent, intnStop)
{structtermios newtio,oldtio;if ( tcgetattr( fd,&oldtio) != 0)
{
perror("SetupSerial 1");return -1;
}
bzero(&newtio, sizeof( newtio ) );
newtio.c_cflag|= CLOCAL |CREAD;
newtio.c_cflag&= ~CSIZE;switch( nBits )
{case 7:
newtio.c_cflag|=CS7;break;case 8:
newtio.c_cflag|=CS8;break;
}switch( nEvent )
{case 'O': //奇校验
newtio.c_cflag |=PARENB;
newtio.c_cflag|=PARODD;
newtio.c_iflag|= (INPCK |ISTRIP);break;case 'E': //偶校验
newtio.c_iflag |= (INPCK |ISTRIP);
newtio.c_cflag|=PARENB;
newtio.c_cflag&= ~PARODD;break;case 'N': //无校验
newtio.c_cflag &= ~PARENB;break;
}switch( nSpeed )
{case 2400:
cfsetispeed(&newtio, B2400);
cfsetospeed(&newtio, B2400);break;case 4800:
cfsetispeed(&newtio, B4800);
cfsetospeed(&newtio, B4800);break;case 9600:
cfsetispeed(&newtio, B9600);
cfsetospeed(&newtio, B9600);break;case 115200:
cfsetispeed(&newtio, B115200);
cfsetospeed(&newtio, B115200);break;default:
cfsetispeed(&newtio, B9600);
cfsetospeed(&newtio, B9600);break;
}if( nStop == 1)
{
newtio.c_cflag&= ~CSTOPB;
}else if ( nStop == 2)
{
newtio.c_cflag|=CSTOPB;
}
newtio.c_cc[VTIME]= 0;
newtio.c_cc[VMIN]= 0;
tcflush(fd,TCIFLUSH);if((tcsetattr(fd,TCSANOW,&newtio))!=0)
{
qDebug()<
}
qDebug()<
}
在GPS数据的处理上首先将窗口数据存入一个字符串,接着通过对字符串数据的判断来提取数据内容,判断分为两步,首先判断是什么类型的数据,在本程序的设计中需要读取$GPRMC和$GPGGA两组数据,因此首先判断字符串GPS_BUF[5]是C还是A,由于数据是通过符号“,”进行隔开,因此通过查找“,”来确定数据位置。在实现上将得到逗号位置函数单独封装调用,程序如下:
//得到指定序号的逗号位置
int gps::GetComma(int num,char *str)
{int i,j=0;int len=strlen(str);for(i=0;i
{if(str[i]==',')
{
j++;
}if(j==num)return i+1;
}return 0;
}
接下来根据数据格式,通过逗号位置,提取数据信息,程序如下:
voidgps::gps_parse()
{inttmp;charc;
c= GPS_BUF[5];if(c=='C')
{//"GPRMC"
GPS->D.hour =(GPS_BUF[ 7]-'0')*10+(GPS_BUF[ 8]-'0');
GPS->D.minute =(GPS_BUF[ 9]-'0')*10+(GPS_BUF[10]-'0');
GPS->D.second =(GPS_BUF[11]-'0')*10+(GPS_BUF[12]-'0');
tmp= GetComma(9,GPS_BUF);
GPS->D.day =(GPS_BUF[tmp+0]-'0')*10+(GPS_BUF[tmp+1]-'0');
GPS->D.month =(GPS_BUF[tmp+2]-'0')*10+(GPS_BUF[tmp+3]-'0');
GPS->D.year =(GPS_BUF[tmp+4]-'0')*10+(GPS_BUF[tmp+5]-'0')+2000;
GPS->status = GPS_BUF[GetComma(2,GPS_BUF)];
GPS->latitude = get_locate(get_double_number(&GPS_BUF[GetComma(3,GPS_BUF)]));
GPS->NS = GPS_BUF[GetComma(4,GPS_BUF)];
GPS->longitude= get_locate(get_double_number(&GPS_BUF[GetComma(5,GPS_BUF)]));
GPS->EW = GPS_BUF[GetComma(6,GPS_BUF)];
GPS->speed = get_double_number(&GPS_BUF[GetComma(7,GPS_BUF)]);
UTC2BTC(&GPS->D);
}if(c=='A')
{//"$GPGGA"
GPS->high = get_double_number(&GPS_BUF[GetComma(9,GPS_BUF)]);
}
}//将获取文本信息转换为double型
double gps::get_double_number(char *s)
{char buf[128];inti;doublerev;
i=GetComma(1,s);
strncpy(buf,s,i);
buf[i]=0;
rev=atof(buf);returnrev;
}double gps::get_locate(doubletemp)
{intm;doublen;
m=(int)temp/100;
n=(temp-m*100)/60;
n=n+m;returnn;
}
gps数据处理 java_GPS数据读取与处理相关推荐
- c语言mooc gps数据处理的数据_科研成果快报第102期:多GNSS观测数据质量分析软件...
多GNSS观测数据质量分析软件 Multi-GNSS Observables Quality Analysist 成果信息 软件名称:多GNSS观测数据质量分析软件[简称:MGOQA] V1.0 著作 ...
- GPS数据读取与处理
原文地址为: GPS数据读取与处理 GPS数据读取与处理 GPS模块简介 SiRF芯片在2004年发布的最新的第三代芯片SiRFstar III(GSW 3.0/3.1),使得民用GPS芯片在性能方面 ...
- [转载]Palm 串行通讯GPS数据读取的实现
Palm 串行通讯GPS数据读取的实现 关于J2ME程序编写的教程,各大网站均有介绍.但是J2ME教程的学习与实际应用毕竟还有一段距离.笔者从事J2ME一年多, 已经成功地开发出基于无线互联网palm ...
- Python数据处理之一:数据读取
Python数据处理之一:数据读取 数据可以存储成许多不同的格式和文件类型.某些格式存储的数据很容易被机器处理,而 另一些格式存储的数据则容易被人工读取.微软的Excel. Word 文档等属于后者, ...
- 中海达数据怎么转rinex_中海达GPS数据处理软件包使用手册-(36页)-原创力文档...
Word Word 资料 HDS2003 GPS数据处理软件包使用手册 HDS2003 GPS数据处理软件包使用手册 9- 9- PAGE # 第九章项目管理 HDS2003数据处理软件是面向项目进行 ...
- HOLUX M1200-E 蓝牙GPS轨迹记录器的历史轨迹数据读取
HOLUX M1200-E 蓝牙GPS轨迹记录器的历史轨迹数据读取 图片太烂上传了 原Word文件下载地址 点击打开链接http://download.csdn.net/download/cp45 ...
- 四旋翼无人机仿真之hector_quadrotor无人机(ROS + Gazebo)(三)传感器数据读取与复现(IMU、GPS)
系列文章目录 文章1:四旋翼无人机仿真之hector_quadrotor无人机(ROS + Gazebo) 文章2:四旋翼无人机仿真之hector_quadrotor(二)键盘teleop_twist ...
- 【python数据处理基础】--数据读取、清洗数据
python 数据处理实战 目录 数据读取 选择特列 清洗数据 目录 随着网络数据的爆发式的增长,数据处理工作日益显示出它的重要性,我们的目的是从大量的杂乱无章的数据中找出对我们的工作有益的数据或者发 ...
- 滴滴驾驶行为开放数据集:GPS数据处理
滴滴驾驶行为开放数据集 重要提示 1.数据集介绍 1.1 驾驶行为基础信息:driver_accident_base_data 1.2 GPS&IMU数据 1.3 数据申请 2. GPS数据处 ...
- 【数据分析进阶】DCIC竞赛-task1 数据读取
[数据分析进阶]DCIC竞赛-task1 数据读取 学习目标 赛题介绍 赛题思路 赛题数据 数据读取 pandas介绍 numpy介绍 读取代码 1.巡游车GPS数据读取 2.巡游车订单单个文件读取 ...
最新文章
- android列表实现置顶,Android利用RecyclerView实现全选、置顶和拖拽功能示例
- java swing中英文支持,java - Swing国际化 - 如何在运行时更新语言 - SO中文参考 - www.soinside.com...
- 线程及同步的性能 – 线程池/ ThreadPoolExecutors/ ForkJoinPool
- 使用python进行面部合成,比PS好用多了
- Git之 手把手教你使用Git
- win10安装时有个修复计算机,win10出现故障,在安全模式下安装Windows更新,彻底修复问题...
- 将文本文件内容存储在DataSet中的方法总结
- OpenGL ES基本用法
- iTOP4412 gdbserver安装
- IE下载vsix插件踩坑
- c语言题目关于欧姆定律,电压_电流_电阻_欧姆定律计算含答案.doc
- 2014年服装设计短训班(周末班)招生简章-北京服装学院培训中心
- 自阿里P8爆出1031道java面试题后,我在boss直聘狂拿千份Offer
- 经典的排错过程 expected unqualified-id before string constant
- C语言——归并排序,单线程,多线程(Linux系统下实现)两种实现方法
- 初级网络工程师这30道面试题一定得会,建议小白收藏!
- 使用CSS实现文字的两端对齐方式
- RaspBerry Pi 系统安装——Raspbian(精简版)
- 1.10 Illustrator网格的使用 [Illustrator CC教程]
- 红绿灯pipeline探索