30 Days of .NET [Windows Mobile Applications] - Day 03: GPS Compass(GPS指南针)

简介:

原文见Day 03: GPS Compass

需求

使用GPS信息显示指南针。

实现

GPS指南针就是在UI上显示当前位置的方位(azimuth),GPS receiver输出的NMEA里就包含了这个信息。存放在GPRMC的第八个字段。

$GPRMC, 015834 ,A, 3749.8448 ,S, 14459.6697 ,E, 000.0 , 136.8 , 120908 , 011.7 ,E * 63

上述例子中136.8为方位角。基于NMEA的分析,我写过一篇文章.NET Compact Framework下的GPS NMEA data数据分析

作者提出进行GPS的开发有三种选择,1.直接使用串口连接GPS receiver。2.使用OpenNETCF GPS Library。3.使用GPS Intermediate Driver
作者最终选择了GPS Intermediate Driver,这个库支持Windows Mobile 5以上系统。MS宣称GPS Intermediate Driver可以屏蔽所有硬件的差异,说实在,屏蔽了所有硬件的差异意味着这个库只是支持通用的NMEA,厂商的NMEA就不能解析出来了。凡事都是有优缺点,技术选型主要取决于需求。对这个指南针的需求比较简单,只是需要取出方位角信息,使用GPS Intermediate Driver可以提高开发效率。

进行GPS Intermediate Driver的开发,可以从参考Windows Mobile 6的事例代码C:\Program Files\Windows Mobile 6 SDK\Samples\PocketPC\CS\GPS。MS把GPS Intermediate Driver封装到Microsoft.WindowsMobile.Samples.Location里面,进行Compatct Framework的开发,我们只需要使用Microsoft.WindowsMobile.Samples.Location就可以了。

复制代码
GpsDeviceState device  =   null ;
GpsPosition position 
=   null ;
Gps gps 
=   new  Gps();

private   void  Form1_Load( object  sender, System.EventArgs e)
{
    gps.DeviceStateChanged 
+=   new  DeviceStateChangedEventHandler(gps_DeviceStateChanged);
    gps.LocationChanged 
+=   new  LocationChangedEventHandler(gps_LocationChanged);
}

private   void  startGpsMenuItem_Click( object  sender, EventArgs e)
{
    
if  ( ! gps.Opened)
    {
        gps.Open();
    }
}

private   void  stopGpsMenuItem_Click( object  sender, EventArgs e)
{
    
if  (gps.Opened)
    {
        gps.Close();
    }
}
复制代码

上面是使用Microsoft.WindowsMobile.Samples.Location的核心代码,GpsDeviceState device定义GPS设备的状态,设备的具体状态可以参考GpsDeviceState.cs里面的enum定义

复制代码
public   enum  GpsServiceState :  int
{
    Off 
=   0 ,
    On 
=   1 ,
    StartingUp 
=   2
    ShuttingDown 
=   3 ,
    Unloading 
=   4 ,
    Uninitialized 
=   5 ,
    Unknown 
=   - 1
}
复制代码

GpsPosition position定义了位置信息,其实这个类是大而全的类,把通用的NMEA可以分析的信息全部放到这个类里面。

2009052510450943.png

有类图定义可见,我们不仅仅可以得到方位角信息,而且可以在这个类里面得到经纬度,海拔,UTC时间,速度,卫星状态,误差值等等。

Gps对象表示一台Gps的设备,gps.Open();为打开设备,开始接受GPS信息,gps.Close();为关闭该设备。gps.DeviceStateChanged += new DeviceStateChangedEventHandler(gps_DeviceStateChanged);和gps.LocationChanged += new LocationChangedEventHandler(gps_LocationChanged);表示订阅设备状态变化信息和位置变化信息。从GpsPosition的类定义知道,当位置发生变化,也就是回调gps_LocationChanged的时候,可以取出经纬度,海拔等多方面的信息。因此只要订阅该消息就可以完成几乎所有的GPS开发。

使用假GPS(FakeGPS)设备测试程序


作者提供了一个测试方法,使得没有GPS receiver的设备也可以进行测试,FakeGPS 可以在C:\Program Files\Windows Mobile 6 SDK\Tools\GPS找到。FakeGPS可以参考  施炯 同学的 A Windows Mobile GPS Application Sample – Using Fake GPS

2009052510475197.png

设置Share Folder。

2009052510465792.png

安装FakeGPS.CAB。

2009052510495765.png

配置FakeGPS。

2009052510505711.png
使用FakeGPS测试GpsCompass,请在Window Mobile 6 Professional下测试,我在Window Mobile 6 Classic下测试,打开GPS设备失败。

 

安装程序gpsCompass.cab

源代码gpsCompass.zip
 

.NET Compact Framework, WinCE, Windows Mobile开发系列

Jake's Blog in 博客园 -- 精简开发 无线生活



    本文转自Jake Lin博客园博客,原文链接:http://www.cnblogs.com/procoder/archive/2009/05/25/1488721.html,如需转载请自行联系原作者



相关文章
|
10天前
|
C# Windows
.NET开源免费的Windows快速文件搜索和应用程序启动器
今天大姚给大家分享一款.NET开源(MIT License)、免费、功能强大的Windows快速文件搜索和应用程序启动器:Flow Launcher。
|
10天前
|
存储 文字识别 C#
.NET开源免费、功能强大的 Windows 截图录屏神器
今天大姚给大家分享一款.NET开源免费(基于GPL3.0开源协议)、功能强大、简洁灵活的 Windows 截图、录屏、Gif动图制作神器:ShareX。
|
1月前
|
Windows
windows server 2019 安装NET Framework 3.5失败,提示:“安装一个或多个角色、角色服务或功能失败” 解决方案
windows server 2019 安装NET Framework 3.5失败,提示:“安装一个或多个角色、角色服务或功能失败” 解决方案
|
2月前
|
C# Windows
.NET开源的一个小而快并且功能强大的 Windows 动态桌面软件
.NET开源的一个小而快并且功能强大的 Windows 动态桌面软件
|
4月前
|
JavaScript Linux C#
【傻瓜级JS-DLL-WINCC-PLC交互】1.C#用windows窗体控件创建.net控件
【傻瓜级JS-DLL-WINCC-PLC交互】1.C#用windows窗体控件创建.net控件
65 0
|
4月前
|
人工智能 机器人 C#
Windows编程课设(C#)——基于WPF和.net的即时通讯系统(仿微信)
一款参考QQ、微信的即时通讯软件。采用CS结构,客户端基于.Net与WPF开发,服务端使用Java开发。
|
4月前
|
C# Windows
C#安装“Windows 窗体应用(.NET Framework)”
C#安装“Windows 窗体应用(.NET Framework)”
50 0
|
4月前
|
SQL Shell 数据库
七天.NET 8操作SQLite入门到实战 - 第二天 在 Windows 上配置 SQLite环境
七天.NET 8操作SQLite入门到实战 - 第二天 在 Windows 上配置 SQLite环境
|
4月前
|
缓存 C# Windows
一款.NET开源的小巧、智能、免费的Windows内存清理工具 - WinMemoryCleaner
一款.NET开源的小巧、智能、免费的Windows内存清理工具 - WinMemoryCleaner
|
5月前
|
JSON 监控 C#
10个基于.Net开发的Windows开源软件项目
10个基于.Net开发的Windows开源软件项目
42 0