gps数据格式解析源代码举例

上传人:第*** 文档编号:33606567 上传时间:2018-02-16 格式:DOCX 页数:7 大小:16.73KB
返回 下载 相关 举报
gps数据格式解析源代码举例_第1页
第1页 / 共7页
gps数据格式解析源代码举例_第2页
第2页 / 共7页
gps数据格式解析源代码举例_第3页
第3页 / 共7页
gps数据格式解析源代码举例_第4页
第4页 / 共7页
gps数据格式解析源代码举例_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《gps数据格式解析源代码举例》由会员分享,可在线阅读,更多相关《gps数据格式解析源代码举例(7页珍藏版)》请在金锄头文库上搜索。

1、http:/ 数据格式解析源代码举例 2011-07-17 09:34本文转自 http:/ GPS 的手机越来越多,GPS 相关的应用也越来越广泛,GPS 已经不仅仅只是得到一个经纬度的信息,可以通过 GPS 开发出更多的应用,比如位置图片,比如好友位置显示,比如跟踪等等,TimeSyncPPC 就是可以使用 GPS 的时钟来进行时间同步的。所有这些功能都需要知道 GPS 的数据格式并能够解析出自己需要的数据出来。下面就以 TimeSyncPPC 中如何得到 GPS 的日期和时间为例来说明如何解析 GPS 数据。TimeSyncPPC 是用于 Pocket PC 上的时间同步工具,因此得到

2、GPS 的时间和日期,使用的 GPS 的指令是$GPRMC,其指令格式如下:$GPRMC, 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)

3、。 10) 磁极变量,000.0 至 180.0。 11) 度数。 12) Checksum.(检查位) 从数据格式中可以看出,我们需要得到 1 和 9 两个字段的数据即可。当然,使用 GPS 首先要打开 GPS 的串口,代码如下: HANDLE OpenCom(CString strCom, DWORD BaudRate, BYTE ByteSize, BYTE StopBits, BYTE Parity, int FlowControl)HANDLE hCommPort;CString strTemp;if(hCommPort = CreateFile(strCom, GENERIC_RE

4、AD | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0) = INVALID_HANDLE_VALUE)return NULL;DCB commDCB;CString strWinText;GetCommState(hCommPort, commDCB.BaudRate = BaudRate;commDCB.ByteSize = ByteSize;commDCB.StopBits = StopBits;commDCB.fParity = (NOPARITY = Parity) ? FALSE : TRUE;commDCB.Parity = Parity

5、;commDCB.fDsrSensitivity = FALSE;commDCB.fDtrControl = DTR_CONTROL_ENABLE;if(FlowControl = 1) / Hardware/ Enable RTS/CTS Flow ControlcommDCB.fRtsControl = RTS_CONTROL_HANDSHAKE;commDCB.fOutxCtsFlow = 1;commDCB.fOutX = 0;commDCB.fInX = 0;else if(FlowControl = 0) / Software/ Enable XON/XOFF Flow Contr

6、olcommDCB.fRtsControl = RTS_CONTROL_ENABLE;commDCB.fOutxCtsFlow = 0;commDCB.fOutX = 1;commDCB.fInX = 1; elsecommDCB.fRtsControl = RTS_CONTROL_ENABLE;commDCB.fOutxCtsFlow = 0;commDCB.fOutX = 0;commDCB.fInX = 0;SetCommState(hCommPort, 串口打开后需要得到一行 GPS 数据,GPS 数据是以结束,代码如下:/ 返回值为-1:超时,其他值为数据长度int GetGPSLi

7、neData(HANDLE hCommPort, char *ReadBuf, int Length)/ 读一行 GPS 数据DWORD nBytes;int i = 0;DWORD TimeOut = 0;while(i = 100)return -1;ReadFile(hCommPort, (LPVOID)if(nBytes = 0)Sleep(1);continue;TimeOut = 0;if(ReadBufi = 0x0d)ReadBufi = 0;break;if(ReadBufi = 0x0a)continue;i +;return i; 下面是解析一行 GPS 数据,将数据结果

8、存储在一个数组中,代码如下:/ 解析一行 GPS 数据int AnalyzeGPSData(char *GPSData, int Length, char Command100)int i = 0;int j = 0, k = 0;while(i = 100)MessageBox(NULL, _T(Read GPS data timeout!), NULL, MB_OK | MB_TOPMOST);goto GPSExit;TimeOut = 0;AnalyzeGPSData(ReadBuf, Length, Command);if(strcmp(Command0, $GPRMC) = 0)S

9、YSTEMTIME st, LocalSt;st.wHour = (Command10 - 0) * 10 + (Command11 - 0);st.wMinute = (Command12 - 0) * 10 + (Command13 - 0);st.wSecond = (Command14 - 0) * 10 + (Command15 - 0);st.wMilliseconds = (Command17 - 0) * 100 + (Command18 - 0) * 10 + (Command19 - 0);st.wDay = (Command90 - 0) * 10 + (Command9

10、1 - 0);st.wMonth = (Command92 - 0) * 10 + (Command93 - 0);st.wYear = (Command94 - 0) * 10 + (Command95 - 0) + 2000;FILETIME FileTime, LocalFileTime;SystemTimeToFileTime(FileTimeToLocalFileTime(FileTimeToSystemTime(g_GPSDateCtrl-SetTime(LocalSt); g_GPSTimeCtrl-SetTime(LocalSt);if(strcmp(Command2, A)

11、= 0)BOOL ret = SetSystemTime(MessageBox(NULL, _T(SyncTime Success!), _T(), MB_OK | MB_TOPMOST);strGPSButton = _T(Get GPS Time);g_ThisDlg-SetDlgItemText(IDC_GETGPSTIME, strGPSButton);g_ThisDlg-GetDlgItem(IDC_SETGPSTIME)-EnableWindow(0);break;elseTimeOut +;GPSExit:if(hCommPort != NULL)CloseHandle(hCom

12、mPort);g_GetGPSTimeThread = NULL;strGPSButton = _T(Get GPS Time);g_ThisDlg-SetDlgItemText(IDC_GETGPSTIME, strGPSButton);g_ThisDlg-GetDlgItem(IDC_SETGPSTIME)-EnableWindow(0);return TRUE; 如果需要解析其他指令,可以参考函数 DWORD WINAPI GetGPSTime(LPVOID lpParameter)的实现方法,其实还是比较简单的。这些代码已经在 TimeSyncPPC 中测试过,可以直接使用,开发环境为VS2005,Windows Mobile 6.1 for PPC。如有疑问请在下方留言

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号