清明第一帖。摘自devdiv论坛。
以下是接收到的数据,摘录其中三笔
$GPGGA,024037.000,2301.8686,N,11308.7524,E,1,05,2.4,22.8,M,-7.1,M,,0000*71
$GPGSA,A,3,14,09,22,18,15,,,,,,,,3.0,2.4,1.8*3F
$GPGSV,3,1,10,09,64,045,44,21,62,225,18,18,57,359,40,24,34,169,19*7C
$GPGSV,3,2,10,22,27,320,32,05,24,148,,12,23,129,,14,23,274,40*7B
$GPGSV,3,3,10,15,16,053,25,30,14,168,*73
$GPRMC,024037.000,A,2301.8686,N,11308.7524,E,0.41,176.83,210608,,*0D
$GPGGA,024038.000,2301.8685,N,11308.7526,E,1,05,2.4,22.3,M,-7.1,M,,0000*74
$GPGSA,A,3,14,09,22,18,15,,,,,,,,3.0,2.4,1.8*3F
$GPGSV,3,1,10,09,64,045,44,21,62,225,18,18,57,359,40,24,34,169,19*7C
$GPGSV,3,2,10,22,27,320,32,05,24,148,,12,23,129,,14,23,274,40*7B
$GPGSV,3,3,10,15,16,053,30,30,14,168,*77
$GPRMC,024038.000,A,2301.8685,N,11308.7526,E,0.27,146.12,210608,,*08
$GPGGA,024039.000,2301.8685,N,11308.7530,E,1,05,2.4,20.8,M,-7.1,M,,0000*7B
$GPGSA,A,3,14,09,22,18,15,,,,,,,,3.0,2.4,1.8*3F
$GPGSV,3,1,10,09,64,045,44,21,62,225,18,18,57,359,40,24,34,169,19*7C
$GPGSV,3,2,10,22,27,320,32,05,24,148,,12,23,129,,14,23,274,40*7B
$GPGSV,3,3,10,15,16,053,29,30,14,168,13*7D
$GPRMC,024039.000,A,2301.8685,N,11308.7530,E,0.37,151.95,210608,,*06
以上三笔应该是读到了位置的数据,通过Nokia 6120c手机中的"GPS数据"软件,提示我们检测的经纬度是:
北纬23.0309,东经113.1460
通过以上原始数据,如何解析出这样的结果?
1。蓝牙跟GPS本身没有关系,只是通过蓝牙将GPS数据从GPS模块传送到相应设备。
2。GPS有很多数据,有些是无效数据。不过,你主要关注GPRMC和GPGGA两组数据就行了。
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*xx<CR><LF>
$GPGGA:起始引导符及语句格式说明(本句为GPS定位数据);
<1>UTC时间,格式为hhmmss.sss;
<2>纬度,格式为ddmm.mmmm(第一位是零也将传送);
<3>纬度半球,N或S(北纬或南纬)
<4>经度,格式为dddmm.mmmm(第一位零也将传送);
<5>经度半球,E或W(东经或西经)
<6>定位质量指示,0=定位无效,1=定位有效;
<7>使用卫星数量,从00到12(第一个零也将传送)
<8>水平精确度,0.5到99.9
<9>天线离海平面的高度,-9999.9到9999.9米
M 指单位米
<10> 大地水准面高度,-9999.9到9999.9米
M 指单位米
<11> 差分GPS数据期限(RTCM SC-104),最后设立RTCM传送的秒数量
<12>差分参考基站标号,从0000到1023(首位0也将传送)。
* 语句结束标志符
xx 从$开始到*之间的所有ASCII码的异或校验和
<CR>回车
<LF>换行
$GPRMC
例:$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50
字段0:$GPRMC,语句ID,表明该语句为Recommended Minimum SpecificGPS/TRANSITData(RMC)推荐最小定位信息
字段1:UTC时间,hhmmss.sss格式
字段2:状态,A=定位,V=未定位
字段3:纬度ddmm.mmmm,度分格式(前导位数不足则补0)
字段4:纬度N(北纬)或S(南纬)
字段5:经度dddmm.mmmm,度分格式(前导位数不足则补0)
字段6:经度E(东经)或W(西经)
字段7:速度,节,Knots
字段8:方位角,度
字段9:UTC日期,DDMMYY格式
字段10:磁偏角,(000 - 180)度(前导位数不足则补0)
字段11:磁偏角方向,E=东W=西
字段16:校验值
通过蓝牙(串口)你能拿到一大段对字符串,这些字符串包换了GPS各个数据包。
你在这些数据包中找到GPRMC和GPGGA,查找工作纯粹就是字符串操作。
但是要特别注意,你得到的GPGGA和GPRMC不一定是合法有效的,你需要
对这些数据进行合法性有效性的判断。验证成功后,就按照GPRMC和GPGGA
的数据格式,读出经度,纬度。
总之,字符串操作,合法有效性验证。