大家好,又见面了,我是你们的朋友全栈君。
GPS数据格式解析
简介
GPS发送数据以行为单位,数据格式如下:
$信息类型,x,x,x,x,x,x,x,x,x,x,x,x,x
每行以字符”$”开头,以<CR><LF>为结尾,CR—Carriage Return,LF—Line Feed,表示回车和换行。信息类型有以下几种,如表1,
表1 GPS数据信息类型分类
信息类型 |
英文语义 |
中文语义 |
GPRMC |
Recommended Minimum Specific GPS/TRANSIT Data(RMC) |
推荐定位信息 |
GPVTG |
Track Made Good and Ground Speed(VTG) |
地面速度信息 |
GPGGA |
Global Positioning System Fix Data(GGA) |
全球定位信息 |
GPGSA |
GPS DOP and Active Satellites(GSA) |
当前卫星信息 |
GPGSV |
GPS Satellites in View(GSV) |
可见卫星信息 |
GPGLL |
Geographic Position(GLL) |
地理定位信息 |
以下分类介绍:
1.$GPRMC(RecommendedMinimum Specific GPS/TRANSIT Data)
推荐定位信息$GPRMC的标准格式如下:
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<CR><LF>
字段 |
参数 |
格式 |
字段0 |
帧头 |
$GPRMC |
字段1 |
UTC时间 |
hhmmss.ss |
字段2 |
状态 |
A/V,A代表有效,V代表无效 |
字段3 |
纬度 |
ddmm.mmmm |
字段4 |
北纬/南纬 |
N/S,N表示北纬,S表示南纬 |
字段5 |
经度 |
ddmm.mmmm |
字段6 |
东经/西经 |
E/W,E表示东经,W表示西经 |
字段7 |
速度 |
节(knots),1 knots=1.852km/h |
字段8 |
方位角 |
度(以真北为参考基准) |
字段9 |
UTC日期 |
日月年,ddmmyy |
字段10 |
磁偏角 |
000~180度 |
字段11 |
磁偏角方向 |
E/W,东/西 |
字段12 |
模式仅NMEA0183 3.00版本输出 |
A:自动,D:差分,E:估测,N:无效 |
字段13 |
校验值 |
hh |
以$GPRMC,092427.604,V,4002.1531,N,11618.3097,E,0.000,0.00,280814,,E,N*08为例,各字段的含义如下:
字段 |
参数 |
格式 |
字段0 |
$GPRMC |
表示GPS信息类型为GPRMC |
字段1 |
092427.604 |
定位时间09时24分27.604秒 |
字段2 |
V |
定位无效 |
字段3 |
4002.1531 |
纬度:40度02.1531分 |
字段4 |
N |
北纬 |
字段5 |
11618.3097 |
经度:116度18.3097分 |
字段6 |
E |
东经 |
字段7 |
0.000 |
速度 |
字段8 |
0.00 |
方位角 |
字段9 |
280814 |
UTC日期28日08月14年 |
字段10 |
|
为空表示磁偏角 |
字段11 |
E |
磁偏角方向是东 |
字段12 |
N |
模式:无效 |
字段13 |
08 |
校验和 |
2.$GPVTG(TrackMade Good and Ground Speed)
地面速度信息$GPVTG的标准格式如下:
$GPVTG,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>*hh<CR><LF>
字段 |
参数 |
格式 |
字段0 |
帧头 |
$GPVTG |
字段1 |
以真北为基准的地面航向 |
000~359度 |
字段2 |
航向标志位,真北参照系 |
通常为T |
字段3 |
以磁北为基准的地面航向 |
000~359度 |
字段4 |
航向标志位,磁北参照系 |
通常为M |
字段5 |
水平运动速度 |
0.00 |
字段6 |
单位,节 |
N |
字段7 |
水平运动速度 |
0.00 |
字段8 |
单位,km/h |
K |
字段9 |
模式(仅NMEA0183 3.00版本输出) |
A:自动,D:差分,E:估测,N:无效 |
字段10 |
hh |
校验和 |
以$GPVTG,0.0,T,,M,0.00,N,0.00,K,N*50为例,个字段含义如下:
字段 |
参数 |
格式 |
字段0 |
$GPVTG |
表示GPS信息类型为GPVTG |
字段1 |
0.0 |
地面速度 |
字段2 |
T |
航向标志位,真北方向 |
字段3 |
无 |
地面速度 |
字段4 |
M |
航向标志位,磁北方向 |
字段5 |
0.00 |
水平运动速度 |
字段6 |
N |
单位:节 |
字段7 |
0.00 |
水平运动速度 |
字段8 |
K |
单位:km/h |
字段9 |
N |
无效 |
字段10 |
50 |
校验和 |
3. $GPGGA(Global Positioning System Fix Data)
全球定位信息$GPGGA的标准格式为:
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>*hh<CR><LF>
字段 |
参数 |
格式 |
字段0 |
帧头 |
$GPGGA |
字段1 |
UTC时间 |
Hhmmss.sss |
字段2 |
纬度 |
ddmm.mmmm |
字段3 |
北纬/南纬 |
N/S |
字段4 |
经度 |
dddmm.mmmm |
字段5 |
东经/西经 |
E/W |
字段6 |
定位质量指标 |
0:定位无效,1:实时GPS,2:差分GPS |
字段7 |
使用卫星数量 |
00~12 |
字段8 |
水平精度 |
0.5~99.9 |
字段9 |
天线离海平面的高度 |
-9999.9~9999.9米 |
字段10 |
高度单位 |
通常为M:米 |
字段11 |
大地椭球面相对海平面的高度 |
-999.9~9999.9 |
字段12 |
高度单位 |
通常为M:米 |
字段13 |
差分GPS数据期限 |
|
字段14 |
差分参考基站标号 |
0000~1023 |
字段15 |
hh |
校验和 |
以$GPGGA,082006.000,3852.9276,N,11527.4283,E,1,08,1.0,20.6,M,,,,0000*35为例,各字段的含义如下:
字段 |
参数 |
格式 |
字段0 |
帧头 |
表示GPS信息类型为GPGGA |
字段1 |
082006.000 |
UTC时间08时20分06.000秒 |
字段2 |
3852.9276 |
纬度38度52.9276分 |
字段3 |
N |
北纬 |
字段4 |
11527.4283 |
经度115度27.4283分 |
字段5 |
E |
东经 |
字段6 |
1 |
实时GPS |
字段7 |
08 |
可使用卫星数08 |
字段8 |
1.0 |
水平精度因子1.0 |
字段9 |
20.6 |
天线高程20.6米 |
字段10 |
M |
天线高程单位:米 |
字段11 |
无 |
大地椭球面相对海平面的高度 |
字段12 |
无 |
高度单位 |
字段13 |
无 |
差分GPS数据期限 |
字段14 |
0000 |
实时GPS无 |
字段15 |
35 |
校验和 |
4. $GPGSA(GPS DOP and Active Satellites)
当前卫星信息$GPGSA的标准格式如下:
$GPGSA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>,<15>,<16>,<17>*hh<CR><LF>
字段 |
参数 |
格式 |
字段0 |
帧头 |
$GPGGA |
字段1 |
模式 |
M:手动,A:自动 |
字段2 |
定位型式 |
1:未定位,2:二维定位,3:三维定位 |
字段3 |
第1信道正在使用的卫星RPN码编号 |
Pseudo Random Noise,伪随机噪声码,01~32表示天空中使用的卫星编号,最多可接收12颗卫星信息 |
字段4 |
第2信道正在使用的卫星RPN码编号 |
|
字段5 |
第3信道正在使用的卫星RPN码编号 |
|
字段6 |
第4信道正在使用的卫星RPN码编号 |
|
字段7 |
第5信道正在使用的卫星RPN码编号 |
|
字段8 |
第6信道正在使用的卫星RPN码编号 |
|
字段9 |
第7信道正在使用的卫星RPN码编号 |
|
字段10 |
第8信道正在使用的卫星RPN码编号 |
|
字段11 |
第9信道正在使用的卫星RPN码编号 |
|
字段12 |
第10信道正在使用的卫星RPN码编号 |
|
字段13 |
第11信道正在使用的卫星RPN码编号 |
|
字段14 |
第12信道正在使用的卫星RPN码编号 |
|
字段15 |
PDOP综合位置精度因子 |
0.5~99.9 |
字段16 |
HDOP水平精度因子 |
0.5~99.9 |
字段17 |
VDOP垂直精度因子 |
0.5~99.9 |
字段18 |
hh |
校验和 |
5.$GPGSV(GPS Satellites in View)
可见卫星信息$GPGSV的标准格式如下:
$GPGSV,<1>,<2>,<3>,<4>,<5>,<6>,<7>,…,<4>,<5>,<6>,<7>*hh(CR)(LF)
字段 |
参数 |
格式 |
字段0 |
帧头 |
$GPGGA |
字段1 |
总的GSV语句电文数 |
|
字段2 |
当前GSV语句号 |
|
字段3 |
可视卫星总数 |
00~12 |
字段4 |
卫星编号 |
01~32 |
字段5 |
卫星仰角 |
00~90度 |
字段6 |
卫星方位角 |
000~359度 |
字段7 |
信噪比(C/No) |
00~99dB,0表示未接收到信号 |
字段8 |
hh |
校验和 |
注:每条语句最多包含四颗卫星的信息,每颗卫星包含四个数据项:卫星编号,卫星仰角,卫星方位角,信噪比。
以$GPGSV,2,1,08,06,33,240,45,10,36,074,47,16,21,078,44,17,36,313,42*78 为例,各字段含义如下:
字段 |
参数 |
格式 |
字段0 |
帧头 |
表示GPS信息类型为GPGGA |
字段1 |
2 |
GPS语句电文数为2 |
字段2 |
1 |
当前GSV语句号为1 |
字段3 |
08 |
可视卫星总数为8 |
字段4 |
06 |
06号卫星 |
字段5 |
33 |
卫星仰角33度 |
字段6 |
240 |
卫星方位角240度 |
字段7 |
25 |
信噪比45dB |
字段8 |
10 |
10号卫星 |
字段9 |
36 |
卫星仰角36度 |
字段10 |
074 |
卫星方位角074度 |
字段11 |
47 |
信噪比47dB |
字段12 |
16 |
16号卫星 |
字段13 |
21 |
卫星仰角21度 |
字段14 |
078 |
卫星方位角078度 |
字段15 |
44 |
信噪比44dB |
字段16 |
17 |
17号卫星 |
字段17 |
36 |
卫星仰角36度 |
字段18 |
313 |
卫星方位角313度 |
字段19 |
42 |
信噪比42dB |
字段20 |
78 |
校验和 |
6.$GPGLL(Geographic Position)
地理定位信息$GPGLL的标准格式如下:
$GPGLL,<1>,<2>,<3>,<4>,<5>,<6>*hh<CR><LF>
字段 |
参数 |
格式 |
字段0 |
帧头 |
$GPGLL |
字段1 |
纬度 |
ddmm.mmmm |
字段2 |
北纬/南纬 |
N/S |
字段3 |
经度 |
dddmm.mmmm |
字段4 |
东经/西经 |
E/W |
字段5 |
UTC时间(时分秒) |
hhmmss |
字段6 |
状态标志位 |
A:有效,V无效 |
字段7 |
hh |
校验和 |
7、java解析经纬度$GPRMC数据经纬度
/**
* 解析纬度
* @param lat
* @return
*/
public String parseLat(String lat,String type){
//纬度
double latitude = Double.parseDouble(lat.substring(0, 2));
latitude+= Double.parseDouble(lat.substring(2))/60;
if("N".equals(type)){ //北纬
return String.valueOf(latitude);
}else{ //南纬
return "-"+String.valueOf(latitude);
}
}
/**
* 解析经度
* @param lon
* @return
*/
public String parseLon(String lon,String type){
//经度
double longitude=Double.parseDouble(lon.substring(0, 3));
longitude+= Double.parseDouble(lon.substring(3))/60;
if("E".equals(type)){ //东经
return String.valueOf(longitude);
}else{ //西经
return "-"+String.valueOf(longitude);
}
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/147523.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...