首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

用Winsocket接收到的经过BCD编码的16进制标识的GPS数据流。小弟我怎么从中提取gps数据的速度,经纬度?

2012-02-24 
用Winsocket接收到的经过BCD编码的16进制标识的GPS数据流。我如何从中提取gps数据的速度,经纬度??用Winsock

用Winsocket接收到的经过BCD编码的16进制标识的GPS数据流。我如何从中提取gps数据的速度,经纬度??
用Winsocket接收到的经过BCD编码的16进制标识的GPS数据流。我如何从中提取gps数据的速度,经纬度??

[解决办法]
这类问题,要是没有说明书,真的不好回答啊。
[解决办法]
首先要了解BCD编码,会编码和解码 BCD编码将一个字节的8个位拆分成高4位和低4位两个部分,也就是说一个字节能存储两个数字。所以BCD的编码过程就是将数字压缩的过程,将两个字节的数字压缩成一个字节。反之,解码就是把一个字节的数字拆分为两个数字单独存放(大部分的处理都是按字节处理的)。 

如果你收到的是BCD编码后的数据流,就解码,然后取数据
[解决办法]
不需要瞭解NMEA 0183通訊協定的全部資訊,僅需要從中挑選出我們需要的那部分定位資料。其餘的資訊我們忽略掉。
如果此時和衛星的通訊正常的話,可以接收到的資料格式樣如下:
$GPRMC,204700,A,3403.868,N,11709.432,W,001.9,336.9,170698,013.6,E*6E
資料說明如下:

$GPRMC:代表GPS推薦的最短數據 

204700: UTC_TIME 24小時制的標準時間,按照小時/分鐘/秒的格式 

A: A 或者 V A表示資料"OK",V表示一個警告 

3403.868: LAT 緯度值,精確到小數點前4位,後3位
N LAT_DIR N表示北緯,S表示南緯 

11709.432: LON 經度值,精確到小數點前5位,後3位
W LON_DIR W表示西經,E表示東經 

如果當前沒有和衛星取得聯繫,那麼字串的格式為:
  $GPRMC,UTC_TIME,V,...
  下面是一個例子:
  $GPRMC,204149,V,,,,,,,170698,,*3A
2004-12-25








C/C++ code
#ifndef __GPS_H__     #define __GPS_H__     typedef struct tagGPRMC     {         char time[20];         char statu[5];         char latitude[20];         char southornorth[5];         char longitude[20];         char eastorwest[5];         char high[10];         char director[10];         char date[20];         char magic[10];         char magicdirtor[5];     }GPRMCHead, * LP_GPRMC_Head;          typedef struct tagGPGSA     {         char mode[5];        char currentState[5];        char PRN01[5];        char PRN02[5];        char PRN03[5];                char PRN04[5];        char PRN05[5];        char PRN06[5];        char PRN07[5];        char PRN08[5];        char PRN09[5];                char PRN10[5];        char PRN11[5];        char PRN12[5];        char pdop[10];        char vdop[10];        char hdop[10];        char endvalue[50];     }GPGSAHead, *LP_GPGSA_Head;      typedef struct tagGPGSV      {          char totalnum[5];        char currentnum[5];        char totalstar[5];        char PRV01[5];        char elevation01[10];        char depression01[10];        char noise01[10];        char PRV02[5];        char elevation02[10];        char depression02[10];        char noise02[10];        char PRV03[5];        char elevation03[10];        char depression03[10];        char noise03[10];        char PRV04[5];        char elevation04[10];        char depression04[10];        char noise04[10];                char endvalue[10];      }GPGSVHead, *LP_GPGSV_Head;     void showMessage(char message[]);     void getGPSPort(char backstr[]);      void setCOMPortPrj(void);     void getNextChar(int length, char backstr[]);     void getString(char strChar[]);     void checkNULL();     void getStringEnd(char stopcn, char backstr[]);     void getBetweenChar(char input[], char backstr[], char stopcn);     void getSystemTime(char stime[], char sdate[]);          void gpsALM();     void gpsPGRMI();     void gpsGPALM();     void gpsPGRMO();     void gpsGPLM();     void gpsGPGGA();     void gpsGPGSA();     void gpsGPGSV();     void gpsGPRMC();     void gpsGPVTG();     void gpsLCGLL();     void gpsLCVTG();     void gpsPGRME();     void gpsPGRMT();     void showPass();               int sendComData(char message[]);     int getComData(char message[]);      #endif
[解决办法]
楼上你得说具体协议,比如从哪一字节开始是时间

热点排行