1 网络0701-龙超-基于WM6的GPS数据采集系统的设计与实现_第1页
1 网络0701-龙超-基于WM6的GPS数据采集系统的设计与实现_第2页
1 网络0701-龙超-基于WM6的GPS数据采集系统的设计与实现_第3页
1 网络0701-龙超-基于WM6的GPS数据采集系统的设计与实现_第4页
1 网络0701-龙超-基于WM6的GPS数据采集系统的设计与实现_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业设计题目基于WM6的GPS数据采集系统的设计与实现学院信息科学与工程学院专业网络工程班级网络0701学生龙超学号指导教师郑艳伟二〇一一年六月十日摘要GPS(GlobalPositioningSystem,全球定位系统)因其具有的高精度、全天候和自动测量等特点,已经渐渐融入了国家建设、社会发展和人民生活的各个应用领域。随着智能移动终端特别是智能手机的快速普及,具有定位和导航功能的手机正日益受到消费者的追捧,GPS导航也将成为智能手机不可或缺的重要组成部分。因此,手机GPS的研究具有很好的发展前景。经纬度能够定位全球的各一个地方,它是手机GPS的核心,也是手机GPS研究的基础。本文主要研究在WindowsMobile6.5系统上实时的获取GPS数据,包括:经度,纬度,时间,卫星个数,海拔高度,地理位置等相关的信息,并在地图上显示相应的地理位置,然后将数据保存在手机的数据库中。本文地图采用CodePlex上的一个免费开源的.NET控件,它具有强大的地图功能,支持Google,Yahoo!,Bing,Open-StreetMap,ArcGIS,Pergo,SigPac等多种地图上实现寻找路径、查找地理位置,地理编码以及地图展示功能,并支持缓存和运行在Mobile环境中。由于没有真实的GPS设备,这里选择了WindowsMobile6SDK中提供的一个小工具FackGPS。可以设置让GPSID从一个包含NMEA命令的.txt文件读取GPS数据,而不需要从GPS设备读取数据。对于开发的应用程序来说,跟访问真实的设备并没有两样。过去几年,GPS在车载导航等诸多领域取得了巨大的成就,不久的将来手机GPS也将掀起新一轮的高潮。本系统可以为随之而来的手机GPS各种应用和服务提供数据支持。如:手机GPS导航、手机防盗追踪等。关键词:GPS,WindowsMoblie,数据采集ABSTRACTBecauseofitsadvantagesincludinghighprecision,24-hourservice,automaticmeasurementandsoon,GlobalPositioningSystemhadgraduallyintegratedintovariousapplicationsinnation-building,socialdevelopmentandpeople’slives.Withtherapidpopularityofintelligentmobiletermination,especiallysmartmobilephones,positioningandnavigation-enabledmobilephonesareincreasinglysoughtafterbyconsumers,andatthesametime,GPSnavigationwillalsobecomeanimportantandindispensablepartofsmartphones.Therefor,theresearchofmobilephonesGPSwillpossesswellprospects.LongitudeandLatitudecanlocateeverypartsoftheworld,whichisthecoreofmobileGPSandalsoisthebasisoftheresearchaboutmobileGPS.ThepaperstudygettingGPSdatareal-timeinthesystemofWindowsMobile6.5.Thedataincludstheinformationoflongitude,latitude,time,numbersofsatellites,altitude,locationandsoon.Atthesametime,thecorrespondinglocationisdisplayedonthemap,andthedataarestoredinthedatabaseofthemobilephone.Thearticleadoptafreeopensourceof.NETcontrolonCodePlex.Thecontrolhaspowerfulmappingcapabilities,andsupportsWay-finding,lookinguplocations,geocodingandfunctionofmapdisplayonvariousmapsincludingGoogle,Yahoo!,Bing,OpenStreetMap,ArcGIS,Pergo,SigPacandsoon.What’smore,itsupportscatchingandrunninginmobileenvironment.IntheabsenceofarealGPSdevice,wechooseasmalltoolnamedFackGPSwhichisprovidedbyWindowsMobile6SDK.ThenwecansetGPSIDtoreadGPSdatafroma.txtfilewhichhasaninstructionofNMEA,ratherthanfromGPSdevice.Fortheourapplication,thereisnodifferencebetweentherealGPSdeviceandtheFackGPS.Overthepastfewyears,GPSincarnavigationandmanyotherfieldshasmadegreatachievements.Inthenearfuture,GPSmobilephoneswillalsobeanewroundofhightide.ThesystemcanprovidedatasupporttothefollowingvariousapplicationsandservicesofmobileGPS.Suchas,mobilephoneGPSnavigation,mobilephoneanti-thefttrackingandsoon.Keywords:GPS;WindowsMoblie6;dataacquisition;目录摘要 IABSTRACT II目录 III1前言 -1-1.1研究背景 -1-1.2手机GPS前景 -2-1.3选题的目的与设计要求 -2-2相关技术 -4-2.1GPS定位原理 -4-2.2GPS数据格式 -5-2.3开发环境与相关工具 -11-3需求分析 -13-3.1项目概述 -13-3.2功能需求 -13-3.3性能需求 -13-3.4运行需要 -13-3总体设计 -14-3.1系统总体结构 -14-3.2手机GPS模块 -16-3.3数据库设计 -16-3.4GPS软件设计 -17-3.4.1数据采集方法 -17-3.4.2GPS类设计 -18-3.4.3窗体类设计 -18-4详细设计 -19-4.1模拟GPS数据 -19-4.2GPS类 -20-4.3数据存储设计 -25-4.4地图模块设计 -26-4.4.1初始化地图控件 -26-4.4.2GPS数据获取 -27-4.4.3地图定位设计 -29-4.4.4查找功能的实现 -29-4.4.5其它功能实现 -30-5系统测试 -31-5.1获取数据功能测试 -31-5.2地图定位测试 -32-5.3查找功能测试 -32-5.4数据存储测试 -34-5.5其它功能测试 -34-结论 -35-参考文献 -36-致谢 -37-1前言1.1研究背景GPS,即GlobalePositioningSystem,全球定位系统,简称“球位系”。是20世纪70年代开始研制,经过20余年的研究实验,耗资300亿美元,到1994年3月,全球覆盖率高达98%的24颗GPS卫星星座布设完成。其主要目的是为陆、海、空三大领域提供实时、全天候和全球性的导航服务,并用于情报收集、核爆监测和应急通讯等一些军事目的,是美国独霸全球战略的重要组成。最初,GPS只运用于军事领域,目前已被广泛应用于交通行业和通信行业,可以通过服务中心实现车辆的定位导航、防盗反劫、服务救援、远程监控、轨迹记录等功能。GPS现实的应用已经使GPS技术从军方领域以及专业化领域走向了大众化的应用范畴,以GPS为核心的卫星导航定位技术应用在中国已经有近20年的发展历程。GPS系统主要由三部分绘成,即空间部分、地面控制部分、用户设备部分。空间部分是由24颗卫星组成,位于距地面20200km的上空,均匀分布在6个轨道面上,每个轨道面4颗,轨道面与地球赤道面夹角为55度。使得在全球任何地方、任何时间都可观测到4颗以上的卫星,并能在卫星中预存的导航信息。GPS的卫星因为大气摩擦等问题,随着时间的推移,导航精度会逐渐降低。地面控制系统由监测站(MonitorStation)、主控制站(MasterMonitorStation)、地面天线(GroundAntenna)所组成。用户设备部分即GPS信号接收机,由主机、天线、电源组成。GPS并不是最早的无线电导航系统,最早人们采用的是长波信号,波长长达26公里,因为长波信号可以轻易地被电离层反射,所以美国的OMEGA系统用了八个发射器就把信号覆盖了全球。不过因为信号波长比较长,定位精度受到很大影响:OMEGA系统的精度只有六公里。为提高定位精度,只有提高无线电信号频率,但是借助电离层反射的全球覆盖就受到了影响:波长越短的信号,直线传输特性越强,同时不能被电离层反射。通过把波长减小到2.6公里,LORAN系统倒是把定位精度提高到450米了,可全球只有10%的面积被信号覆盖。自从1957年有了卫星,科学家的兴趣自然就转到这上面来了:卫星可以发射短波长信号,穿透电离层覆盖半个地球的面积如今随着全球卫星导航定位系统的市场竞争加剧,正在形成的四大全球卫星导航定位系统同台竞技的格局已经显现出来了,也就是美国的GPS、俄罗斯的格罗纳丝、欧洲的伽俐略和中国的北斗系统。2009-2012年,以GPS为代表的卫星导航应用产业前景看好,成为继移动通信和互联网产业之后的第三大IT经济增长点。随着国际市场的快速发展,中国导航产业面临极大机遇。中国正处于高速发展期,城市变化快、公路建设速度快、汽车保有量增长快,对导航产品的需求也就不断增大。随着3G的发展和国内汽车市场持续升温,GPS手机市场也前景看好,预计2011年,GPS手机市场份额将超过百分之十。1.2手机GPS前景随着智能移动终端特别是智能手机的快速普及,具有定位和导航功能的手机正日益受到消费者的追捧。单一导航设备的市场迅速被导航手机所取代,相信不久的将来导航手机就会在人们的生活中普及。导航功能也会像相机,MP3一样成为一款手机应用,Google公司推出的“Turn-By-TurnNavigation”和苹果公司推出的手机定位服务和手机广告服务也充分说明了GPS与智能手机的结合是极具潜力的。在我国,具备GPS定位导航功能的手机销量近年来一直呈增长态势。市场研究机构In-Stat预计,近几年GPS技术在手机领域有应用将呈爆炸式增长。中国GPS手机市场将持续上升,预计2012年中国GPS手机市场总体规模将达到4200万台,市场占有率将超过20%。互联网消费调研中心ZDC对中国GPS手机市场发展现状及用户关注情况进行分析,2010年月1-8月,GPS手机用户关注度增长明显,8月较1月增长近10个百分点,如图1.1。72.9的非GPS手机用户表示有购买GPS手机的打算。可见,手机GPS技术市场的应用前景非常可观。图1.12010年1-8年中国手机市场GPS手机关注趋势1.3选题的目的与设计要求随着3G时代的到来,GPS也成为了继音乐、照相之后手机的又一款热门的应用,智能手机与GPS的结合必将推动GPS产业走向一个新的高潮,GPS手机也必将成为一种潮流和趋势。因此,对于手机GPS的研究很有必要性。本文的设计目的在于研究基于WindowsMobile6.0的系统上GPS导航的相关工具和方法,使用dotNET2008开发环境,使用VisualC#编程实现对GPS数据,包括经度、纬度、卫星个数、精确时间等信息的实时采集,并保存到手持设备数据库(采用SQLServerCE数据库),并可以通过用户界面显示。对于数据库中标定了的地理位置,能够提取出当前地理位置的名称,并提示给用户。手持设备数据库中的数据能够传送到计算机系统数据库。2相关技术2.1GPS定位原理GPS定位的基本原理是根据高速运动的卫星瞬间位置作为已知的起算数据,采用空间距离后方交会的方法,确定待测点的位置。如图2.1所示,假设t时刻在地面待测点上安置GPS接收机,可以测定GPS信号到达接收机的时间△t,再加上接收机所接收到的卫星星历等其它数据可以确定四个方程式。图2.1公式由于卫星的位置精确可知,在GPS观测中,我们可得到卫星到接收机的距离,利用三维坐标中的距离公式,利用3颗卫星,就可以组成3个方程式,解出观测点的位置(X,Y,Z)。考虑到卫星的时钟与接收机时钟之间的误差,实际上有4个未知数,X、Y、Z和钟差,因而需要引入第4颗卫星,形成4个方程式进行求解,从而得到观测点的经纬度和高程。四个方程式中各个参数意义如下:x、y、z为待测点坐标的空间直角坐标。xi、yi、zi(i=1、2、3、4)分别为卫星1、卫星2、卫星3、卫星4在t时刻的空间直角坐标,可由卫星导航电文求得。di(i=1、2、3、4)分别为卫星1、卫星2、卫星3、卫星4到接收机之间的距离。△ti(i=1、2、3、4)分别为卫星1、卫星2、卫星3、卫星4的信号到达接收机所经历的时间。

c为GPS信号的传播速度(即光速)。

Vti(i=1、2、3、4)分别为卫星1、卫星2、卫星3、卫星4的卫星钟的钟差,由卫星星历提供。Vto为接收机的钟差。由以上四个方程即可解算出待测点的坐标x、y、z和接收机的钟差Vto。事实上,接收机往往可以锁住4颗以上的卫星,这时,接收机可按卫星的星座分布分成若干组,每组4颗,然后通过算法挑选出误差最小的一组用作定位,从而提高精度。由于卫星运行轨道、卫星时钟存在误差,大气对流层、电离层对信号的影响,以及人为的SA保护政策,使得民用GPS的定位精度只有100米。为提高定位精度,普遍采用差分GPS(DGPS)技术,建立基准站(差分台)进行GPS观测,利用已知的基准站精确坐标,与观测值进行比较,从而得出一修正数,并对外发布。接收机收到该修正数后,与自身的观测值进行比较,消去大部分误差,得到一个比较准确的位置。实验表明,利用差分GPS,定位精度可提高到52.2GPS数据格式一般民用GPS使用的是GPS系统的L1载波,频率为1575.42MHz。在这个载波频率上面以调相方式加载了两种不同的伪随机噪声码:C/A码和P码。C/A码是用于民用的测距码,码长为1023个码元,即1023次从数字零到数字1的跳动,这1023个码元每秒重复1000次,即1.023MHz,或每一百万分之一秒跳动一次。P码是军用码,码长非常长,码速为10.23MHz,即每千万分之一秒跳动一次。由于GPS接收机通过对比码元的跳动来计算从卫星到接收机的时间,然后再转换成距离,显而易见,P码的时间精度高了10倍,距离精度也就高了10倍:现代信号处理技术计算码元跳动的时间精度是码宽的百分之一,一百万分之一秒折合出来的距离是300米,它的百分之一就是3米。而P码的精度是这个数值的十分之一,即0.3米。换句话说,在计算某个卫星距离接收机的实际距离的时候,C/A接收机获取了与卫星的距离,并不能计算出自己的位置,因为它不知道卫星在发射电波时的位置,因此在卫星载波上面,还加载了一个50Hz的导航电文,这个导航电文包括了:卫星的轨道参数、时钟参数、轨道修正参数、大气对GPS信号折射的修正值等等。GPS接收机就是通过这些参数计算出某一时刻某颗卫星在空间中的位置,然后再确定自己与卫星的距离,然后再计算自己的实际位置。导航电文总长1500比特,在50Hz发送的情况下,每一个循环周期是30秒。NMEA协议是为了在不同的GPS(全球定位系统)导航设备中建立统一的BTCM(海事无线电技术委员会)标准,由美国国家海洋电子协会(NMEA-TheNationalMar-ineElectronicsAssocia-tion)制定的一套通讯协议。GPS接收机根据NMEA-0183协议的标准规范,将位置、速度等信息通过串口传送到PC机、PDA等设备。NMEA-0183协议定义的语句非常多,但是常用的或者说兼容性最广的语句只有$GPGGA、$GPGS-A、$GPGSV、$GPRMC、$GPVTG、$GPGLL等。GPS数据格式NMEA-0183的详细解释如下:(1)$GPGGA,092204.999,4250.5589,S,14718.5084,E,1,04,24.4,19.7,M,,,,0000*1F。每个字段含义如表2.1所示:表2.1$GPGGA解析字段例值说明字段0$GPGGA语句IDGPS定位信息字段1092204.999UTC时间,hhmmss.sss字段24250.5589纬度ddmm.mmmm字段3S纬度N(北纬)或S(南纬)字段414718.5084经度dddmm.mmmm字段5E经度E(东经)或W(西经)字段61GPS状态,0=未定位,1=非差分定位,2=差分定位,3=无效PPS,6=正在估算。字段704正在使用的卫星数量(00-12)字段824.4HDOP水平精度因子(0.5-99.9)字段919.7海拔高度(-9999.9-99999.9)字段10地球椭球面相对大地水准面的高度字段11差分时间字段120000差分站ID号0000-1023字段131F校验值(2)例:$GPGSA,A,3,01,20,19,13,,,,,,,,,40.4,24.4,32.2*0A,每个字段含义如表2.2所示:表2.2$GPGSA解释字段例值说明字段0$GPGGA$GPGSA,语句,ID当前卫星信息。字段1A定位模式,A=自动手动2D/3D,M=手动2D/3D。字段23定位类型,1=未定位,2=2D定位,3=3D定位。字段301PRN码(伪随机噪声码),第1信道正在使用的卫星PRN码编号(00)字段420PRN码(伪随机噪声码),第2信道正在使用的卫星PRN码编号(00)字段519PRN码(伪随机噪声码),第3信道正在使用的卫星PRN码编号(00)字段613PRN码(伪随机噪声码),第4信道正在使用的卫星PRN码编号(00)字段704PRN码(伪随机噪声码),第5信道正在使用的卫星PRN码编号(00)字段824.4PRN码(伪随机噪声码),第6信道正在使用的卫星PRN码编号(00)字段919.7PRN码(伪随机噪声码),第7信道正在使用的卫星PRN码编号(00)字段10PRN码(伪随机噪声码),第8信道正在使用的卫星PRN码编号(00)字段11PRN码(伪随机噪声码),第9信道正在使用的卫星PRN码编号(00)字段12PRN码(伪随机噪声码),第10信道正在使用的卫星PRN码编号(00)字段13PRN码(伪随机噪声码),第11信道正在使用的卫星PRN码编号(00)字段14PRN码(伪随机噪声码),第12信道正在使用的卫星PRN码编号(00)字段1540.4PDOP综合位置精度因子(0.5-99.9)字段1624.4DOP水平精度因子(0.5-99.9)字段1732.2VDOP垂直精度因子(0.5-99.9)字段180A校验值(3)例:$GPGSV,3,1,10,20,78,331,45,01,59,235,47,22,41,069,45*70,每个字段含义如表2.3所示表2.3$GPGSV解析字段例值说明字段0$GPGSV$GPGSV,语句ID,可见卫星信息字段13本次GSV语句的总数目(1-3)字段21本条GSV语句是本次GSV语句的第几条(1-3)字段310当前可见卫星总数(00-12)(前导位数不足则补0)字段420PRN码(伪随机噪声码)(01-32)(前导位数不足则补0)字段578卫星仰角(00-90)度(前导位数不足则补0)字段6331卫星方位角(00-359)度(前导位数不足则补0)字段745信噪比(00-99)dbHz字段801PRN码(伪随机噪声码)(01-32)(前导位数不足则补0)字段959卫星仰角(00-90)度(前导位数不足则补0)字段10235卫星方位角(00-359)度(前导位数不足则补0)字段1147信噪比(00-99)dbHz字段1222PRN码(伪随机噪声码)(01-32)(前导位数不足则补0)字段1341卫星仰角(00-90)度(前导位数不足则补0)字段14069卫星方位角(00-359)度(前导位数不足则补0)字段1545信噪比(00-99)dbHz字段1670校验值(4)$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50每个字段含义如表2.4所示表2.4$GPRMC解析字段例值说明字段0$GPRMC$GPRMC,语句ID,推荐最小定位信息字段1024813.640UTC时间,hhmmss.sss格式字段2A状态,A=定位,V=未定位字段33158.4608纬度ddmm.mmmm,度分格式(前导位数不足则补0)字段4N纬度N(北纬)或S(南纬)字段511848.3737经度dddmm.mmmm,度分格式(前导位数不足则补0)字段6E经度E(东经)或W(西经)字段710.05速度,节,Knots字段8324.27方位角,度字段9150706UTC日期,DDMMYY格式字段10235磁偏角,(000-180)度(前导位数不足则补0)字段1147磁偏角方向,E=东W=西字段12A*50校验值(5)例:$GPVTG,89.68,T,,M,0.00,N,0.0,K*5F,每个字段含义如表2.5所示表2.5$GPVTG解析字段例值说明字段0$GPVTG$GPVTG,语句ID,地面速度信息字段189.68运动角度,000-359,(前导位数不足则补0)字段2TT=真北参照系字段3315运动角度,000-359,(前导位数不足则补0)字段4MM=磁北参照系字段50.00水平运动速度(0.00)(前导位数不足则补0)字段6EN=节,Knots字段7N水平运动速度(0.00)(前导位数不足则补0)字段80.0K=公里/时,km/h字段9K*5F校验值(6)例:$GPGLL,4250.5589,S,14718.5084,E,092204.999,A*2D,每个字段如表2.6所示。表2.6$GPGLL解析字段例值说明字段0$GPGLL$GPGLL,语句ID,地理定位信息字段14250.5589纬度ddmm.mmmm,度分格式(前导位数不足则补0)字段2S纬度N(北纬)或S(南纬)字段314718.5084经度dddmm.mmmm,度分格式(前导位数不足则补0)字段4E经度E(东经)或W(西经)字段5092204.999UTC时间,hhmmss.sss格式字段6A状态,A=定位,V=未定位字段92D校验值2.3开发环境与相关工具(1)MicrosotfVisualStudio2008。VisualStudio是微软公司推出的开发环境,VisualStudio可以用来创建Windows平台下的Windows应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和Office插件。(2)WindowsMobile6.5。WindowsMobile,是Microsoft用于PocketPC和Smartphone的软件平台。WindowsMobile将熟悉的Windows桌面扩展到了个人设备中。WindowsMobile是微软为手持设备推出的“移动版Windows”,使用WindowsMobile操作系统的设备主要有PPC手机、PDA、随身音乐播放器等。WindowsMobile操作系统有三种,分别是WindowsMobileStandard、WindowsMobileProfessional,WindowsMobileClassic。(3)MicrosotfActiveSync4.5。微软的同步软件ActiveSync可以同时支持PPC和微软智能手机(Smartphone),它能方便地在PC与PPC或智能手机间方便地进行数据同步.这是WindowsMobile设备(与Symbian相比)极具竞争力的优势.而与PC的同步对Symbian手机来说简直是个恶梦.ActiveSync不仅可以同步文件,电子邮件及日程等,更有着许多额外的功能如同步AvantGo,SMS等.另外,WindowsMobile设备的用户还可以通过PC来访问互联网.ActiveSync可以说是PC与移动设备间的一座桥梁。(4)GPSID。MS宣称GPSIntermediateDriver可以屏蔽所有硬件的差异,屏蔽了所有硬件的差异意味着这个库只是支持通用的NMEA,厂商的NMEA就不能解析出来了。凡事都是有优缺点,技术选型主要取决于需求。对这个指南针的需求比较简单,只是需要取出方位角信息,使用GPSIntermediateDriver可以提高开发效率。(5)FackGPS。FackGPS是WindowsMobile6SDK中提供的一个小工具,为调试WindowsMobile系统的

GPS应用程序但没有GPS设备的提供了方便,由于缺乏GPS真实设备,所以,这里选择了FackGPS。GPSID的所有设置信息都保存在注册表中,可以通过修改注册表来更改GPSID的设置。其中有个一个设置,可以让GPSID从一个包含NMEA命令的.txt文件读取GPS数据,而不需要从GPS设备读取数据。。FakeGPS的工作原理就是修改注册表的GPSID设备,让

GPSID从一个文本文件读取GPS数据。而对于我们开发的应用程序来说,跟访问真实的设备并没有两样。(6)SQLServerCE。SQLServerCE(SQLServer2005CompactEdition)是微软推出的一个适用于嵌入到移动应用的精简数据库产品,WindowsMobile开发人员能够使用SQLServerCE开发出将数据管理能力延展到WindowMobile移动设备上的应用程序。虽然SQLServerCE占用的磁盘空间只有3到5兆左右,但是它功能并没有像它的容量那样大幅度缩水。SQLServerCE不但提供了完整的SQL语法,包括内部联接、外部联接和子查询,还内置了数据同步技术的支持。有一点要注意的是,SQLServer2005CompactEdition除了可以作为移动数据库在WindowsMobile设备上运行外,它也支持在PC上存放数据,为桌面的应用程序提供数据支持。(7)Gmap.NET。GMap.NET是一个强大、免费、跨平台、开源的.NET控件,它在WindowsForms和WPF环境中能够通过Google,Yahoo!,Bing,OpenStreetMap,ArcGIS,Pergo,SigPac等实现寻找路径、地理编码以及地图展示功能,并支持缓存和运行在Mobile环境中。GMap.NET是一个开源的GEO地图定位和跟踪程序。就像谷歌地图、雅虎地图一样,可以自动计算两地的距离,定位经纬度,与Google地图不同的是,该项目是建立在C#语言WinForm基础上的。可以对地图放大缩小,进行城市标记等。控件还以绘出两地的行车线路或者步行线路等,而且能够算出两地的距离。3需求分析3.1项目概述本系统主要实现在WindowsMobile6.5平台上实时的获取GPS数据,包括:经度,纬度,时间,卫星个数,海拔高度,地理位置等相关的信息,并在地图上显示相应的地理位置,然后将数据保存在手机的数据库中。3.2功能需求(1)GPS数据实时获取:能够在WindowsMobile平台上实现GPS功能的打开与关闭,实时的获取当前的GPS数据。(2)GPS数据存储:能够将获取到的GPS存储在手机的数据库(SQLServerCE)中。(3)GPS显示:实时采集的数据能够以用户界面的形式显示,最好是以地图的形式展示。(4)查找功能:对于数据库中标定了的地理位置,能够提取出当前地理位置的名称。(5)同步功能:手持设备数据库中的数据能够传送到计算机系统数据库。3.3性能需求(1)实时性:由于GPS本身的特点需要很高的实习性,因此,系统运行时须确保获取GPS数据的实时性。(2)准备性:将获取的GPS数据的误差控件在一定的范围内。3.4运行需要本系统是基于WindowsMobile平台开发。运行界面是WindowsMobile窗口界面。数据库是适用于手机的SQLServerCE。同时,应该具有适当的容错功能。遇到不可恢复的系统错误,也能保证数据的完整性。3总体设计3.1系统总体结构该部分主要介绍了系统的整体结构,如图3.1。一旦开启GPS,主程序从中间驱动GPSID中获取GPS数据,并将信息显示在用户界面,同时,调用地图控件的相应函数,查找相应的地理位置信息,并在地图上显示。最后,将数据存入手机的数据库中。图3.1系统总体结构根据需求分析对系统进行建模,画出系统的用例图(图3.2)、时序图(图3.3)以及类图(图3.4)。图3.2用例图图3.3时序图图3.4类图3.2手机GPS模块目前,市场上提供的GPS方案主要分为单芯片、套片和模块。其中单芯片是将GPS的两部分——射频与基带集成在一颗芯片上,套片是将单独的射频与基带封装在一起,而模块则是在射频与基带之外,加入了必要的外围器件,封装成独立的产品,这样,在手机开发过程中,GPS部分不需要太大的开发工作量,设计者只需将输出信号与周边硬件做个转换即可。本文是基于WindowsMobile平台,手机设备集成了GPS模块。3.3数据库设计本系统的数据库主要用存储手机GPS记录的地理位置信息,其主要信息包括:经度、纬度、时间、卫星个数以及相应地理位置等。因此,数据库中只用一张表即可。如表3.1所示:表3.1data表列名数据类型是否为空描述idInt否主键(自增)latitudeString是纬度longitudeString是经度timedatetime是当前时间satellitesstring是卫星数positionString是地理位置3.4GPS软件设计3.4.1数据采集方法手机中的GPS模块一旦启动,会连接卫星接收信号,通过算法计算出位置等信息,然后以NMEAdata的格式输出。手机GPS模块就是将接收到的卫星信号转换成NMEAdate的设备。目前,开发手机软件有3种获取GPS数据的方法:直接使用串口连接GPS接收器、GPSIntermediateDriver、使用第三方类库(目前opennetcf提供相应类库)。GPS传统的编程其实很麻烦,既要同串口进行通信,又要去解析NMEA的语法,同时访问GPS的程序会一直都在运行,这就需要保证这些访问程序是在单独的线程中运行。因此,传统的通过串口传输GPS数据的开发方式是很痛苦的事情。本系统是采用第二种方式GPSID(GPSIntermediateDrive)获取GPS数据。GPSIntermediateDrive(中间驱动程序,GPSID)是一个位于应用程序和GPS设备中间层的设备驱动。GPSID是对串口操作进行了封装,因此对于系统层来说它是一个普通的驱动,是一个插在GPS设备与应用程序之间的系统中间件。这样的好处是使开发人员不需要通过串口直接访问GPS设备,而是访问GPSID提供的API函数,然后再由GPSID去访问GPS设备。这样一来,编写出来的GPS应用程序就具有设备无关性了,也使到只要应用GPSID就可以用相同的代码去访问几乎所有类型的GPS接收器了。但现在随着WinCE系统新版本的升级,WinCE系统内置了GPSIntermediateDriver。WindowsMobile5.0以上的系统,都内置了GPSIntermediateDriver。能够很方便的获取GPS数据。通过它我们能够很方便的取得GPS数据,而且开发基于GPS定位系统的WinCE应用程序也变得简单多了。目前,GPS中间驱动程序(GPSID)正成为导航设备开发者手中的利器。GPSID的API函数主要有两类:一类是gpsapi.dll函数:GPSOpenDevice、GPSCloseDevice、GPSGetPosition、GPSGetDeviceState。另一类是:coredll.dll函数:CreateEvent、CloseHandle、WaitForSingleObject、WaitForMultipleObjects、EventModify。3.4.2GPS类设计GPS.cs:封装GPS操作类,比如Open(),Close(),Connect()。GpsDeviceState.cs:用于获取目前GPS设备的状态信息。GpsPosition.cs:每次GPS数据取得后,都会放入该类。LocationChangedEventArgs.cs:一旦位置改变,即可将新的GpsPosition获取。DeviceStateChangedEventArgs.cs设备状态改变事件。3.4.3窗体类设计MainForm.cs:主窗体内包含显示地图控件,菜单等。Search.cs查找窗体。Gps.cs显示获取到的GPS信息及状态。4详细设计4.1模拟GPS数据(1)FackGPS安装。在WindowsMobile6SDK安装目录下..\WindowsMobile6SDK\Tools\GPS\找到FakeGPS.CAB在windowsmobile中安装。如图4.2图4.2FackGPS安装(2)FackGPS运行。运行FakeGPS,GPSID的所有设置信息都保存在注册表中,可以通过修改注册表来更改GPSID的设置。FakeGPS的工作原理就是修改注册表的GPSID设备,让GPSID从一个包含NMEA命令的fakegpsdata.txt文件读取GPS数据,而不需要从GPS设备读取数据。图4.3FackGPS运行图(3)fakegpsdata.txt中数据$GPGLL,4738.0173,N,12211.1874,W,191934.767,A*21$GPGSA,A,3,08,27,10,28,13,19,,,,,,,2.6,1.4,2.3*3E$GPGSV,3,1,9,8,71,307,43,27,78,59,41,3,21,47,0,10,26,283,40*77$GPGSV,3,2,9,29,13,317,0,28,37,226,37,13,32,155,36,19,37,79,42*42$GPGSV,3,3,9,134,0,0,0*46$GPRMC,191934.767,A,4738.0173,N,12211.1874,W,0.109623,12.14,291004,,*21$GPGGA,191935.767,4738.0172,N,12211.1874,W,1,06,1.4,32.9,M,-17.2,M,0.0,0000*75……4.2GPS类(1)GpsPosition.csposition定义了位置信息,其实这个类是大而全的类,把通用的NMEA可以分析的信息全部放到这个类里面。如图4.1图4.1GpsPosition.cs结构(2)GpsDeviceState.cs定义GPS设备的状态publicenumGpsServiceState:int{Off=0,On=1,StartingUp=2,ShuttingDown=3,Unloading=4,Uninitialized=5,Unknown=-1}(3)Gps.cs:Gps对象表示一台Gps的设备,gps.Open();为打开设备,开始接受GPS信息,gps.Close();为关闭该设备。gps.DeviceStateChanged+=newDeviceStateChangedEventHandler(gps_DeviceStateChanged);和gps.LocationChanged+=newLocationChangedEventHandler(gps_LocationChanged);表示订阅设备状态变化信息和位置变化信息。从GpsPosition的类定义知道,当位置发生变化,也就是回调gps_LocationChanged的时候,可以取出经纬度,海拔等多方面的信息。因此只要订阅该消息就可以完成几乎所有的GPS开发。//调用API的函数声明:#regionPInvokestogpsapi.dll[DllImport("gpsapi.dll")]staticexternIntPtrGPSOpenDevice(IntPtrhNewLocationData,IntPtrhDeviceStateChange,stringszDeviceName,intdwFlags);……#endregion//打开GPS设备,准备从设备获取数据publicvoidOpen(){if(!Opened){//创建GPS相关事件newLocationHandle=CreateEvent(IntPtr.Zero,0,0,null);deviceStateChangedHandle=CreateEvent(IntPtr.Zero,0,0,null);stopHandle=CreateEvent(IntPtr.Zero,0,0,null);gpsHandle=GPSOpenDevice(newLocationHandle,deviceStateChangedHandle,null,0);//创建线程if(locationChanged!=null||deviceStateChanged!=null){CreateGpsEventThread();}}}//关闭GPS设备publicvoidClose(){if(gpsHandle!=IntPtr.Zero){GPSCloseDevice(gpsHandle);gpsHandle=IntPtr.Zero;}if(stopHandle!=IntPtr.Zero){EventModify(stopHandle,eventSet);}lock(this){if(newLocationHandle!=IntPtr.Zero){CloseHandle(newLocationHandle);newLocationHandle=IntPtr.Zero;}if(deviceStateChangedHandle!=IntPtr.Zero){CloseHandle(deviceStateChangedHandle);deviceStateChangedHandle=IntPtr.Zero;}if(stopHandle!=IntPtr.Zero){CloseHandle(stopHandle);stopHandle=IntPtr.Zero;}}}///查询设备状态publicGpsDeviceStateGetDeviceState(){GpsDeviceStatedevice=null;IntPtrpGpsDevice=Utils.LocalAlloc(GpsDeviceState.GpsDeviceStructureSize);Marshal.WriteInt32(pGpsDevice,1);Marshal.WriteInt32(pGpsDevice,4,GpsDeviceState.GpsDeviceStructureSize);intresult=GPSGetDeviceState(pGpsDevice);if(result==0){device=newGpsDeviceState(pGpsDevice);}Utils.LocalFree(pGpsDevice);returndevice;}(4)DeviceStateChangedEventArgs.cs设备状态改变的事件参数publicclassDeviceStateChangedEventArgs:EventArgs{publicDeviceStateChangedEventArgs(GpsDeviceStatedeviceState){this.deviceState=deviceState;}publicGpsDeviceStateDeviceState{get{returndeviceState;}}privateGpsDeviceStatedeviceState;}(5)LocationChangedEventArgs.cs地理位置改变的事件参数publicclassLocationChangedEventArgs:EventArgs{publicLocationChangedEventArgs(GpsPositionposition){this.position=position;}publicGpsPositionPosition{get{returnposition;}}privateGpsPositionposition;}4.3数据存储设计将获取到的经纬度,时间,卫星数等信息,写入到手机数据库中。SqlCeConnectionconn=null;try{conn=newSqlCeConnection("DataSource=\\gps.sdf;password=111;encryptdatabase=true");conn.Open();SqlCeCommandcmd=conn.CreateCommand();cmd.CommandText="insertintoposition(latitude,longitude,satellites,time)values('"+latitude+"','"+longitude+"','"+satellites+"','"+time+"')";cmd.ExecuteNonQuery();}catch(SqlCeExceptionex){MessageBox.Show(ex.Message);}finally{conn.Close();}4.4地图模块设计4.4.1初始化地图控件使用地图控件前,需要初始化一些变量和事件,初始化代码如下所示:internalGMap.NET.WindowsForms.GMapControlMainMap;……//MainMapthis.MainMap.BackColor=System.Drawing.Color.White;this.MainMap.CanDragMap=true;this.MainMap.Dock=System.Windows.Forms.DockStyle.Fill;this.MainMap.Location=newSystem.Drawing.Point(0,0);this.MainMap.MarkersEnabled=true;this.MainMap.MaxZoom=2;this.MainMap.MinZoom=2;this.MainMap.MouseWheelZoomType=GMap.NET.MouseWheelZoomType.MousePositionAndCenter;this.MainMap.Name="MainMap";this.MainMap.PolygonsEnabled=true;this.MainMap.RoutesEnabled=true;this.MainMap.ShowTileGridLines=false;this.MainMap.Size=newSystem.Drawing.Size(480,696);this.MainMap.TabIndex=0;this.MainMap.Zoom=0;……#ifDEBUGMainMap.Manager.Mode=AccessMode.ServerAndCache;menuItemServerAndCache.Checked=true;menuItemEnableGrid.Checked=true;menuItemGPSenabled.Checked=false;MainMap.ShowTileGridLines=true;#elseMainMap.Manager.Mode=AccessMode.CacheOnly;menuItemCacheOnly.Checked=true;#endifMainMap.MapType=MapType.GoogleMapChina;MainMap.MaxZoom=17;MainMap.MinZoom=1;MainMap.Zoom=11;MainMap.CurrentPosition=start;4.4.2GPS数据获取GPS启动后先查询GPS模块的工作状态,GPSDeviceState.cs是用于取得目前GPS设备的状态信息,在调用GPSDeviceState.cs取得目前GPS设备的状态信息后,然后启动一个工作线程,以创建GPS事件对象。基本流程:先通过调用CreateEvent来创建Handles,然后调用GPSOpenDeviceAPI函数将Handle传入得到GPS设备的Handle。得到GPS设备的Handle之后,可再创建一个线程来监听GPS数据及设备状态。然后,再通过调用CreateGpsEventThread方法来创建线程。当GPS设备的状态改变时,就可以调用DeviceStateChanged事件取得当前设备的状态。当GPS设备的位置改变时,就可以调用LocationChanged事件取得当前的坐标。然后,再使用WaitForSingleObject()函数或WaitForMultipleObjects()函数来处理事件通知。最后,通过重复调用Device-StateChanged事件、LocationChanged事件、WaitForSingleObject()函数或WaitFor-MultipleObjects()函数,和调用GPSGetPosition()以获取完整的GPS信息。这样一个基本的获取GPS数据的过程就完成了。关键代码如下:privateEventHandlerupdateDataHandler;GpsDeviceStatedevice=null;GpsPositionposition=null;…….updateDataHandler=newEventHandler(UpdateData);gps.DeviceStateChanged+=newDeviceStateChangedEventHandler(gps_DeviceStateChanged);gps.LocationChanged+=newLocationChangedEventHandler(gps_LocationChanged);……..//gps位置改变事件voidgps_LocationChanged(objectsender,LocationChangedEventArgsargs){try{varposition=args.Position;if(position!=null){count++;if(position.Time.HasValue&&position.Latitude.HasValue&&position.Longitude.HasValue){if(!TimeUTC.HasValue){TimeUTC=position.Time;Lat=position.Latitude;Lng=position.Longitude;}if(TimeUTC.HasValue&&position.Time-TimeUTC.Value>=delay){Delta=gps.GetDistance(position.Latitude.Value,position.Longitude.Value,Lat.Value,Lng.Value);Total+=Delta;Lat=position.Latitude;Lng=position.Longitude;TimeUTC=position.Time;AddToLogCurrentInfo(position);}}else{Lat=position.Latitude;Lng=position.Longitude;TimeUTC=position.Time;}……//gps状态改变voidgps_DeviceStateChanged(objectsender,DeviceStateChangedEventArgsargs){device=args.DeviceState;Invoke(updateDataHandler);}4.4.3地图定位设计主程序获取GPS数据,提取其中的经纬度信息,将经纬度传递给地图控件,地图控件调用MainMap.CurrentPosition将地图以此位置居中显示。//随位置改变地图中心改变if(menuItemGPSenabled.Checked){MainMap.CurrentPosition=newPointLatLng(data.Latitude.Value,data.Longitude.Value);}4.4.4查找功能的实现Search.cs实现位置的查找功能。首先,调用地图控件的GMaps.Instance.GetLatLngFromGeocoder方法查出要查找的位置的地理信息。然后,实例化一下地图标记GMapMarkeraddress=newGMapMarkerTransparentGoogleGreen(pos.Value)用以向用户展示查找的位置,并加入标注信息。代码如下:PointLatLng?pos=GMaps.Instance.GetLatLngFromGeocoder(textAddress.Text,outstatus);if(pos!=null&&status==GeoCoderStatusCode.G_GEO_SUCCESS){GMapMarkeraddress=newGMapMarkerTransparentGoogleGreen(pos.Value);address.ToolTipMode=MarkerTooltipMode.Always;address.ToolTipText=textAddress.Text;Main.objects.Markers.Add(address);Main.MainMap.CurrentPosition=address.Position;Main.menuItemGotoMap_Click(null,null);}4.4.5其它功能实现(1)放大、缩小、重新加载地图功能的实现。在放大、缩小菜单的单击事件中设置地图控件的Zoom属性,可以改变地图大小,从而实现地图的缩放。实现主要代码如下://放大privatevoidmenuItem4_Click(objectsender,EventArgse){MainMap.Zoom=(int)(MainMap.Zoom)+1;}//缩小privatevoidmenuItem5_Click(objectsender,EventArgse){MainMap.Zoom=(int)(MainMap.Zoom)-1;}//重新加载地图privatevoidmenuItem27_Click(obje

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论