基于Windows Mobile 5.0的GPS应用程序开发

摘要:
摘要:本文从一个从未接触过移动平台开发的新手的角度解释了基于Windows Mobile 5.0平台的GPS应用程序的开发过程。体验使用Visual C#开发移动应用程序的效率。开发平台:操作系统:WindowXP开发环境:Visual Studio 2005 Windows Mobile 5.0 PocketPCSDK。NetCompactFramework 2.0(VS2005附带)ActiveSy

摘要:

       本文从一个完全没接触过移动平台开发的新手的角度讲解基于Windows Mobile 5.0平台的GPS应用程序的开发过程.体验使用Visual C#开发移动应用程序的高效率.

开发平台:

操作系统: Window XP

开发环境:

Visual Studio 2005

Windows Mobile 5.0 Pocket PC SDK

.Net Compact Framework 2.0 (VS2005自带)

ActiveSync 4.0

移动设备:

Dell X51 PDA + GPS 卡

 

  1. 环境的搭建

1)        安装Visual Stuido 2005

2)        安装ActiveSync4.0(或更新版本)

3)        安装Windows Mobile 5.0 Pocket PC SDK(VS2005默认安装WM2003SDK,所以需要手动安装WM5的SDK)

以上所需在网上均可找到下载,安装过程应该比较简单,没有什么复杂的设置所以略过不谈.有不明白的可以发E-Mail咨询.

  1. 详细步骤

1)        启动VS2005.第一次启动会提示设置默认开发模式,可以选择Visual C#.

2)        点击 [文件]->[新建项目]

 

如图: 

基于Windows Mobile 5.0的GPS应用程序开发第1张

a)        项目类型:选择Visual C#à智能设备àWindows Mobile 5.0 Pocket PC(如果没有该选项则说明没有安装WM5.0SDK或者安装失败)

b)        模板:选择设备应用程序即可

c)        输入名称,位置,解决方案名称等信息后点击确定即可.

3)        点击[文件]à添加à现有项目

找到..\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Samples\Cs\Gps即可找到Microsoft.WindowMobile.Samples.Location.csproj项目文件,

基于Windows Mobile 5.0的GPS应用程序开发第2张

该项目封装了访问GPS硬件的一些API函数.使用非常方便.没有找到该文件的话请确认是否安装了WM5.0SDK.

打开后即可添加到现有项目中.如下图示:

 基于Windows Mobile 5.0的GPS应用程序开发第3张

4)        设置项目依赖性

点击[项目]->项目依赖性

因为要在TestGPS项目中引用添加的项目,所以TestGPS项目依赖于Microsoft.WindowsMobile.Samples.Location

 基于Windows Mobile 5.0的GPS应用程序开发第4张

生成顺序自然就是TestGPS在后了.

 基于Windows Mobile 5.0的GPS应用程序开发第5张

5)        添加项目引用

点击[项目]添加引用

 基于Windows Mobile 5.0的GPS应用程序开发第6张

选择[项目]页,选择当前项目后确定.即可在TestGPS项目的引用列表中看到对该项目的引用.

 基于Windows Mobile 5.0的GPS应用程序开发第7张

添加对项目类包的引用.

 基于Windows Mobile 5.0的GPS应用程序开发第8张

6)说明

       在引入了类包之后,我们就可以在程序中引用已经封装好的类来访问GPS了.在项目中我们可以看到常用的几个类:

DegreesMinutesSeconds.cs                   //主要负责经纬度坐标度分秒的转换

DeviceStateChangedEventArgs.cs        //GPS设备状态改变时触发的事件

GPS.cs                              //操作GPS的类,主要有负责Open()和Close()GPS设备.

GpsDeviceState.cs                   //GPS设备的几种状态

GpsPosition.cs                         //处理经纬度坐标的类.

LocationChangedEventArgs.cs //位置改变时触发的事件(即经纬度坐标发生变化)

       需要说明的是,我在使用GpsPosition类的Longitude和Latitude属性获取经纬度坐标的时候总是出现DividedByZeroException的例外.经过观察发现是由于对度分秒格式的经纬度坐标值转化为Decimal       Degrees表达形式的时候出错(看了代码之后大家理解的会比我说的更明白,所以看不明白这一点的不必介意因为我的表述也不是很清楚!),而我需要的其实就是最原始的double类型的经纬度坐标值,不需要进行任何转换即可.所以我对GpsPosition类进行了简单的修改以满足我的需要.

在GpsPositon类的末尾加入一下几行代码.

     

public double DoubleLatitude
{

get { return dblLatitude; }

}

public double DoubleLongtitude

{

get { return dblLongitude; }

}

 

       以上提到这些只是为可能会和我有同样需求的初学的网友提个醒,免得走弯路.

  1. 附参考源代码:

      

基于Windows Mobile 5.0的GPS应用程序开发第9张基于Windows Mobile 5.0的GPS应用程序开发第10张代码
using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using Microsoft.WindowsMobile.Samples.Location;



namespace TestGPS

{

public partial class Form1 : Form

{

//GPS设备状态对象

GpsDeviceState device
= null;

//GPS位置对象

GpsPosition position
= null;

//GPS对象

Gps gps
= new Gps();



public Form1()

{

InitializeComponent();

}



private void Form1_Load(object sender, EventArgs e)

{

gps.DeviceStateChanged
+= new DeviceStateChangedEventHandler(gps_DeviceStateChanged);

gps.LocationChanged
+= new LocationChangedEventHandler(gps_LocationChanged);



}

//位置改变时更新坐标数据

protected void gps_LocationChanged(object sender, LocationChangedEventArgs args)

{

position
= args.Position;

}

//gps设备状态改变时更新设备的状态

void gps_DeviceStateChanged(object sender, DeviceStateChangedEventArgs args)

{

device
= args.DeviceState;

}



//菜单:打开GPS设备

private void open_gps_Click(object sender, EventArgs e)

{

if (!gps.Opened)

{

gps.Open();

}

open_gps.Enabled
= false;

close_gps.Enabled
= true;

}



//菜单:关闭GPS设备

private void close_gps_Click(object sender, EventArgs e)

{

if (gps.Opened)

{

gps.Close();

}

open_gps.Enabled
= true;

close_gps.Enabled
= false;

}





//菜单:退出

private void exit_Click(object sender, EventArgs e)

{

if (gps.Opened)

gps.Close();

Close();

}





//获取经纬度坐标值

private void getdata_Click(object sender, EventArgs e)

{

string str;

if (!gps.Opened)

{

str
= "GPS设备没有打开,请点击打开GPS菜单后重试!";

MessageBox.Show(str);

return;

}

if (device == null)

{

str
= "GPS设备打开错误,请重新插拔GPS卡后重试!";

MessageBox.Show(str);

return;

}

if (position != null)

{

string strJd; //经度

string strWd; //纬度

strJd
= position.DoubleLongtitude.ToString();

strWd
= position.DoubleLatitude.ToString();



DialogResult result;



str
= "经度:" +strJd + "\n纬度:" + strWd;

result
= MessageBox.Show(str, "当前坐标", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);

if (result == DialogResult.OK)

{

//将经过确认的坐标数据显示到相应的TextBox

wd.Text
= strWd;

jd.Text
= strJd;

return;

}

}



}

 

   希望对初学者有所帮助!

免责声明:内容来源于网络,仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇PHP控制语句之“switch”语句pwa介绍学习下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

高德地图获取当前屏幕中心点的经纬度

公司有个需求就是要随着屏幕的改变而载入附近的商户信息. 那么高德地图获取当前屏幕中心点的经纬度呢? 核心方法:aMap.setOnCameraChangeListener(this); 实现接口: @Overridepublic void onCameraChange(CameraPosition position) {LatLng target...

利用rtklib处理GPS以及北斗数据详解

利用rtklib开源代码处理GPS以及北斗数据详解          在GNSS领域最基础的工作是这些GNSS系统的定位工作,对于绝大多数研究者,自己着手完成这些工作是一个“鸡肋”:完全独立设计的话费时费力,运用开源代码又很难弄懂。我当初也是如此。但想到毕竟开源代码已经做了很多工作,不用实在可惜,最终毅然决定咬紧牙关弄懂rtklib。尝试用过rtklib的...

经纬度计算距离

using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace HarvenSin{ class Program { /// <summary> /// 根据经纬度,计算2个点之间的距离。 /// </summary&...

已知用经纬度表示的两点,求两点之间的直线距离

最近在做一个用GDI+绘图,用到了对经纬度的处理,以下是将经纬度换算成直线距离的代码,留着以后有用,免得又忘记了。  private const double EARTH_RADIUS = 6378137;//地球半径,单位米         private double rad(double d)         {             return...

c语言 GPS nmealib学习笔记

0.nmealib简介 nmealib是一个基于C语言的用于nmea协议的开源库。虽然nmea体积小巧,但是却具备了不少功能。 分析NMEA语句并把结果保存在合适的C语言结构体中。 除了解析NMEA语句之外,还可以产生NMEA语句。 支持多种NMEA语句,包括GPGGA, GPGSA, GPGSV, GPRMC, G...

Geohash算法原理及实现

最近需要实现一个功能,查找车辆附近的加油站,如果车和加油站距离在200米以内,则查找成功。 加油站数量肯定不小,能否缩小查找范围,否则以遍历形式,效率肯定高不了。 Geohash算法就是将经纬度编码,将二维变一维,给地址位置分区的一种算法。 基本原理 GeoHash是一种地址编码方法。他能够把二维的空间经纬度数据编码成一个字符串 我们知道,经度范围是东经1...