|
|
|

根据Windows Mobile 5.0的GPS运用程序开发

开发渠道:操作系统: 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 ...

作者:wang8712来历:CSDN|2007年02月14日

开发渠道:操作系统: 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,所以需求手动装置WM5SDK)

以上所需在网上均可找到下载,装置进程应该比较简略,没有什么杂乱的设置所以略过不谈.有不理解的能够发E-Mail咨询.

2.        具体过程

1)        发动VS2005.第一次发动会提示设置默许开发形式,能够挑选Visual C#.

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

 如必威现金回扣:

a)        项目类型:挑选Visual C#à智能设备àWindows Mobile 5.0 Pocket PC(假如没有该选项则阐明没有装置WM5.0SDK或许装置失利)

b)        模板:挑选设备运用程序即可

c)        输入称号,方位,解决方案称号等信息后点击承认即可.

1)        点击[文件]à增加à现有项目

找到..\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Samples\Cs\Gps即可找到Microsoft.WindowMobile.Samples.Location.csproj项目文件,该项目封装了拜访GPS硬件的一些API函数.运用十分便利.没有找到该文件的话请承认是否装置了WM5.0SDK.

 翻开后即可增加到现有项目中.如下必威现金回扣示:

 

 1)        设置项目依赖性

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

由于要在TestGPS项目中引证增加的项目,所以TestGPS项目依赖于Microsoft.WindowsMobile.Samples.Location

 

 生成次序天然便是TestGPS在后了.

 

1)        增加项目引证

点击à[项目]à增加引证

 

 

挑选[项目],挑选当时项目后承认.即可在TestGPS项意图引证列表中看到对该项意图引证.

增加对项目类包的引证.

 

  6)阐明

       在引入了类包之后,咱们就能够在程序中引证现已封装好的类来拜访GPS.在项目中咱们能够看到常用的几个类:

 DegreesMinutesSeconds.cs                     //首要担任经纬度坐标度分秒的转化

DeviceStateChangedEventArgs.cs           //GPS设备状况改动时触发的事情

GPS.cs                               //操作GPS的类,首要有担任Open()Close()GPS设备.

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

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

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

 

需求阐明的是,我在运用GpsPosition类的LongitudeLatitude特点获取经纬度坐标的时分总是呈现DividedByZeroException的破例.通过调查发现是由于对度分秒格局的经纬度坐标值转化为Decimal   Degrees表达形式的时分犯错(看了代码之后我们了解的会比我说的更理解,所以看不理解这一点的不用介怀由于我的表述也不是很清楚!),而我需求的其实便是最原始的double类型的经纬度坐标值,不需求进行任何转化即可.所以我对GpsPosition类进行了简略的修改以满意我的需求.

GpsPositon类的结尾参加一下几行代码.

        public double DoubleLatitude

        {

            get { return dblLatitude; }

        }

        public double DoubleLongtitude

        {

            get { return dblLongitude; }

        }

  

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

1.        附参阅源代码:

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;

                }

             }

     

        }

 

上一篇:根据嵌入式Linux的嵌入式GIS的规划与完成

下一篇:交融与分解:2007年全球GPS综合性前瞻