.NET Compact Framework下的GPS NMEA data数据分析(上)

提供GPS功能的Wince和Windows Mobile都需要一个GPS接收器(GPS Receiver )。GPS receiver就像一个收音机,他从太空中各个GPS卫星(Satellites)接 收信号,通过自身的算法(一般在Firmware里面)计算出位置等信息,然后以 NMEA data的格式输出。GPS receiver就是接收卫星信号转换成NMEA data的设备 。

进行GPS的开发需要从GPS receiver取出NMEA data,分析出关心的数 据。关心的数据包括经度(Longitude),维度(Latitude)和海拔(Altitude )等等。在Windows Mobile 5以上MS提供了GPS Intermediate Driver,开发人 员不再需要自己分析NMEA data了。但是Wince5以及以下版本不提供GPS Intermediate Driver,还是需要自己分析NMEA data来取出关心的信息。本文讲 述如何使用C#进行NMEA data的分析。第一眼看,分析NMEA有自己做轮子之嫌, 其实了解NMEA的分析也是有好处的,由于各个生产GPS receiver的厂商在硬件工 艺和算法的不一样,各个厂商都提供自己扩展的NMEA data,这些数据GPS Intermediate Driver是不支持的,需要自己分析。

NMEA 全称NMEA 0183 ,是电子与数据的通信规范,也就是协议。实现该协议的设备输出这种规范的数 据,其他应用就可以基于这协议分析出相关的数据。NMEA开始用在航海设备上, 现在广泛用在GPS设备上,这就是为什么NMEA的原始速度使用Knot(海里/小时) 表示。下面是一段GPS NMEA data的范例

$GPRMC,000006,A,3754.6240,S,14509.7720,E,010.8,313.1,0101 08,011.8,E*6A
$GPGGA,201033,3754.6240,S,14509.7720,E,1,05,1.7,91.1,M,-1.1,M,,*75
$GPGSA,A,3,,05,10,,,,21,,29,30,,,2.9,1.7,1.3*32
$GPGSV,3,3,12,29,74,163,41,30,53,337,40,31,09,266,00,37,00,000,00*78 $PGRME,6.3,M,11.9,M,13.5,M*25
$PGRMB,0.0,200,,,,K,,N,W*28
$PGRMM,WGS 84*06

GPS NMEA data有以下特点:

* 每一条 NMEA data的数据都是以dollar符号开头。

* 从第二个字符开始的前2个 字符表示发送者(talker)和接着3个字符表示数据(message)。其中上面的 talker中,GP表示通用的GPS NMEA data,而PG为特定厂商的NMEA data。

* 所有数据字段(data fields)都是使用逗号隔开(comma-delimited) 。

* 最后一个数据段接着一个星号(asterisk)。

* 星号后面是两 位数字的校正码(checksum),checksum的计算方法是或计算在 '$' 和 '*'之间的所有字符。

* 最后以回车换行 (<CR><LF>)结尾。

时间: 2024-12-23 04:30:47

.NET Compact Framework下的GPS NMEA data数据分析(上)的相关文章

.NET Compact Framework下的GPS NMEA data数据分析(下)

代码5 从ParseGPGSA看,这个比较特别,他把在使用的卫星信息分开 多条语句output.如下: $GPGSV,3,1,12,03,43,246,46,06,57,263,52,09,10,090,00,14,2 9,357,41*71 $GPGSV,3,2,12,15,12,140,00,16,10,307,00,18,59,140,00,19,20,224,00*75 $GPGSV,3,3,12,21,48,089,00,22,69,265,36,24,09,076,00,34,00,

.NET Compact Framework下SQL CE的使用

在Wince和Windows Mobile下最常用的数据库为SQL CE,SQL CE也曾经叫做SQL Server for Windows CE和SQL Server Mobile Edition,最新版本命名为SQL Server Compact 3.5 SP1. SQL Server Compact不仅仅能运 行于Wince和Windows Mobile,而且能运行于Windows的PC上,是Access的有效替代品,如果不使用存储 过程,在SQL Server Compact下开发的程序

.NET Compact Framework下的3G应用

在.NET Compact Framework下开发3G应用可以有两个options,1:AT command, 2:RAS.其实RAS最终也是通过AT command来管理3G设备,RAS屏蔽了技术细节,很方便地建 立TCP/IP based 的网络连接,所以推荐使用RAS,WinCE本身提供了native API可以直接操作RAS,管理3G设备及其连接.与此同时RAS也支持有线电话拨号,GPRS等应用. RAS简介 RAS的详细介绍见 Overview of RAS 由于.NET Compa

.NET Compact Framework下的进程间通信之MSMQ开发

上篇讲到WinCe下的MSMQ安装 ,这篇讲述一下MSMQ在.NET Compact Framework 下的开发. 所谓MQ就是Message Queue,消息队列.消息队列可以作为不同应用程序之间 ,甚至不同机器之间通信的渠道.在消息队列下进行通信的内容称为消息 (Message),在C#程序下Message就是对象. MSMQ就是Microsoft公司提供的MQ服务程序.MQ服务程序负责管理消息队列, 保证消息在消息队列这一渠道下能无误的发送到对端,MQ支持离线交易,有时候 消息会缓存在M

.NET Compact Framework下的进程间通信之Windows Message

在Wince和Windows Moblie 下的进程间通信可以由以下几种技术实现. 1. Windows Message 2. Point-to-Point Message Queues 3. MSMQ 下面使用讲述.NET Compact Framework下使用Windows Message进行进程间的 通信. 引用库 在CF.net下进行Windows Message的开发需要引用Microsoft.WindowsCE.Forms ,该DLL一般存放于C:\Program Files\Mi

.NET Compact Framework下的单元测试

在 Wince和Windows Mobile下native C++的单元测试里讲述了在Wince和Windows Mobile下native C++ 进行单元测试的方法,这篇将会讲述.NET Compact Framework下的单元测试.在.NET Compact Framework 下可以使用NUintLite进行单元测试. NUintLite是简化版的NUnit,可以应用于.NET Compact Framework,Mono等平台. 生成NUnitLite库 NUintLite已经从co

.NET Compact Framework下的串口通信

在Wince和Windows Mobile下,很多设备以串口(Serial Port/Com Port)的方式提供访问接口,例如 可以通过串口访问GPS的receiver,从而接收NMEA Data. 在CF.NET2.0开始,MS把串口操作封装了到System.IO.Ports.SerialPort里面,大大简便了对串口的操 作,不再需要P/Invoke就可以直接操作串口. 下面展现两个串口通信类,一个负责发生,一个负责接收,两个类分别在不要的设备上运行. public class Recei

.NET Compact Framework下Win32 API P/Invoke的使用

由于CF是一个精简(Compact)的.NET Framework,因此在开发CF应用时有一部分功能MS并没有在CF中实现,需要直接调用Win32的API来实现.由于Win32的API是面向native代码的,一般会提供一个DLL库以及相应header文件.使用C++是十分容易和简单调用这些API,但是使用C# .NET就没那么幸运了.C#调用Win32的API往往要借助于P/Invoke的帮助,下面讲述一下P/Invoke 的使用. API的引入 调用Win32的API需要引入相应的DLL,W

.NET Compact Framework下HttpWebRequest开发

当Windows Mobile程序需要使用Web Server的信息,一开始自然会想到使用WebService.可是有些Web Server不提供WebService,只是提供Http浏览功能,如果需要从Http网页中得到信息,可以使用HttpWebRequest和HttpWebResponse来完成,下面通过一个例子来讲述. 例如有一个使用ASP.net开发的燃料价格查询网站. 图1 输入燃料类型(Fuel Type)和邮政编码(Postcode)后可以查询出燃料价格,如下图. 图2 在Win