摘 要:设计了一套基于WM 6.0(Windows Mobile6.0)操作系统和网络电子地图技术的智能手机定位监控系统,详细介绍了其中的关键技术和具体方案的设计实现。
关键词:Windows Mobile;全球定位系统;网络电子地图;GPRS
GPS(Global Positioning System)以其精度高、速度快、成本低等显著优势,被广泛应用于测距、定位、导航等领域,在社会生活各个方面起着越来越重要的作用[1]。随着网络电子地图、智能手机及3G网络的出现与不断完善,人们对定位查询的服务需求越来越大,相关产业已成当前最具前景的产业之一。
目前市场上GPS相关产品已经很多,但由于各方面技术限制,普遍存在一些严重问题:大多数产品针对专用的硬件平台,成本高、可移植性差;系统开发难度大、开发周期长、软件支持少[2];采用本地地图,地图数据库更新困难。
本文针对上述问题,充分利用现有技术,整合各种现有资源,设计了基于Windows Mobile通用平台和网络电子地图的位置查询系统。该系统通信部分采用SMS实现,具有地图数据更新获取方便、使用简单、成本低、操作方便等优点。
1 总体设计方案
系统从功能上可以分为Pocket PC监控中心和Pocket PC监控对象两部分。监控对象主要功能为接收GPS信号、提取所需信息和响应监控中心的监控命令。监控中心通过短消息(SMS)向监控对象发送监控命令,接收来自监控对象的数据并对接收来的数据进行处理。为了更好地显示监控对象所在位置,监控中心同时采用Google地图和Mapabc地图2种网络电子地图。网络电子地图数据通过HTTP协议从Google地图或Mapabc地图服务器上实时下载。系统框图如图1所示。
系统主要设计功能如下:
(1)在Windows Mobile平台上实现了GPS定位;
(2)网络电子地图实时下载、显示、拖动、放大/缩小;
(3)监控对象的位置查询与显示;
(4)实现了对监控对象的声音监控。
2 PPC监控对象设计与实现
2.1 GPS定位数据提取的实现
传统GPS编程通过串口通信接收NMEA(National Marine Electronics Association)语句,然后通过解析NMEA语句[3]提取经纬度信息实现。应用程序独占GPS设备,即同一时刻只允许一个应用程序访问GPS设备。
本文采用Windows Mobile提供的GID接口实现(GPS Intermediate Driver)。GID是一个位于应用程序和GPS设备中间层的设备驱动。使用GID时,允许多个应用程序同时使用GPS设备(所有的应用程序都通过GID间接访问GPS设备),不需要解析NMEA语句,且可以使用相同的代码访问几乎所有类型的GPS设备[4]。
采用GID实现的主要步骤为:
(1)引用gpsapi.dll。GID是一套在Mobile Device上的本地代码,在.NET Compact Framework平台上使用,需要采用跨平台调用技术,引用相应的应用程序接口。
(2)用CreateEvent创建Windows CE事件对象,这样当有GPS设备获取了新的数据或者设备状态改变时就能收到通知。
(3)使用GPSOpenDevice与GID建立一个连接。如果GPS设备关闭,则启动GPS设备。
(4)通过调用WaitForMultipleObjects(如果仅有一个事件则调用WaitForSingleObject),等待GPS设备获取新的位置数据或设备状态改变事件发生;当GPS设备获取了新的位置数据时,调用GPSGetPosition取回位置信息。当GPS设备状态改变时,调用GPSGetDeviceState取回设备状态信息。
(5)重复第(4)步,直到不再需要GPS信息。
(6)调用GPSCloseDevice关闭与GID的连接。如果这个连接是GID唯一的连接,则GID自动关闭GPS设备。GPS设备耗电相当大,因此当不再需要访问GPS设备时要关闭与GID的连接。
2.2 短消息发送与接收实现
短消息收发一般采用AT(Attention)指令实现,本系统采用Pocket Outlook实现。Windows Mobile SDK对Pocket Outlook提供的服务进行了托管封装,可以方便地完成所有的个人信息管理功能[3],所有这些类型构成了POOM(Pocket Outlook Object Model)。
(1)短消息发送。POOM中的SmsAccount类可以方便地实现短消息的发送。首先,使用SmsMessage类构造一条短消息;然后,使用SmsAccount类中的Send方法即可发送短消息。
(2)短消息的接收和截获。Pocket Outlook可以实现短消息的接收和截获,且只接收满足特定条件的短消息。短消息接收和截获过程如下:
①创建一个MessageInterceptor类型的对象。
②设置MessageCondition属性,指定MessageInterceptor对象截获条件。
③设置InterceptionAction属性,指定截获到消息后Pocket Outlook执行的动作。本系统中,通过将InterceptionAction属性设置为NotifyAndDelete实现截获所需的监控短消息,并且其他程序不会收到监控短消息,这样监控短消息就不会进入短消息收件箱。
④为MessageInterceptor对象添加截获短消息事件处理方法。截获短消息事件定义如下:
public event MessageInterceptorEventHandler MessageReceived
当有满足截获条件的短消息到达设备时触发此事件。添加了事件处理方法后,当有满足截获条件的短消息到达时,就会触发MessageReceived事件,然后自动调用事件处理方法进行处理。
3 监控中心设计与实现
PPC端监控中心通过GPRS网络,主要以短消息的形式向监控对象发送监控命令,并通过处理来自监控对象的数据实现对监控对象的位置查询及显示、声音监控等功能。
3.1 网络电子地图实现
目前,Windows Mobile不支持JavaScript脚本,故PPC端监控中心电子地图不能使用含JavaScript接口的地图实现。本系统PPC端监控中心网络电子地图采用Google地图和北京图盟科技有限公司的Mapabc地图。
(1)地图数据下载
Google地图由0~17级不同比例尺的256×256像素的小地图拼块拼接而成,每一个Google地图拼块叫做一个tile。tile的URI类似如下:
http://mt2.google.com/mt?v=w2.89&hl=zh-CN&x=6688&y=3570&z=13&s=Galileo
其中,mt2.google.com为Google地图服务器,x、y、z分别表示tile的坐标和放大因子。Google地图服务器有4台,分别为mt0.google.com、mt1.google.com、mt2.google.com和mt3.google.com。为了提高地图下载速度,本系统从4台服务器轮流下载。
(2)地图显示
任给一个经纬度,要将其代表的位置在地图上显示出来,就要将该经纬度转换为对应放大因子的tile坐标。本系统采用一种近似的方法转换,经过分析发现,经度与x坐标呈线性对应关系,其计算公式为:
其中,longitude为经度值,其范围为-180~+180,西经用负值表示,东经用正值表示;0.0063为校正值;z为放大因子。
纬度与y坐标转换公式为:
其中,latitude为纬度值,其范围为-90~+90,北纬用正值表示,南纬用负值表示;z为放大因子。将经纬度转化为tile坐标后,就能将经纬度与地图匹配了,这样就可以将经纬度对应的位置在地图上显示出来。
本系统采用的Windows Mobile Pocket PC的窗体客户区宽度和高度分别为240像素和268像素,每个tile为256×256像素,这样客户区就需要4个或6个tile拼接而成,如图2和图3所示。
(3)地图拖动
地图移动相当于改变地图的中心坐标。本系统实现地图拖动的方法为:当在触摸屏上点击地图某一点时,将地图的中心坐标移到点击处。如图4所示,设点O为窗口客户区中心,点P为点击处,计算点P与点O的水平和垂直像素距离△Px和△Py,然后将地图中心分别沿水平方向和垂直方向移动△Px和△Py像素,即可实现地图的拖动功能,拖动后地图如图5所示。
(4)地图放大/缩小
Google地图的放大因子z的取值为0~17,分别代表0~17级不同比例尺的地图。0~17级地图分别用18张不同详细程度的地图实现,故实现地图的放大/缩小功能只需要改变放大因子的大小,将当前现实的地图切换到改变后的放大因子所对应的比例尺的地图上,中心点经纬度不变。
3.2 监控中心界面设计及主要功能测试结果
点击“操作”菜单,依次选择“监控”、“位置”,然后在弹出的菜单中设置监控对象手机号、报告次数、报告时间间隔,如图6所示。
按图6所示设置,点击“开始”按钮,PPC端监控中心发送监控命令,监控对象收到位置查询命令后,就按监控命令向监控中心报告自己的位置。PPC端监控中心收到监控对象发来的位置信息后即在地图上显示出来。图7为目标位于深圳大学办公楼前测试的结果,图中地图为Google地图,点击“设置”菜单,然后选择“使用Mapabc地图”切换到Mapabc地图,如图8所示。PPC端监控中心构造监控命令短消息如下:
SmsMessage msg=new SmsMessage(15914175891,″★定◎位☆″+interval);
其中,interval指定监控对象报告位置信息的时间间隔,此处为“1”。
本系统基于Windows Mobile通用平台,充分利用了Windows Mobile界面友好、使用简单和支持软件丰富等特点。GPS数据通过Windows Mobile提供的GID接口实现,可以使多个应用程序同时使用GPS设备,通用性好,可移植性强。经实际测试,本系统获取地图数据方便快捷、成本低、维护方便、定位精度高,能满足人们日益增长的应用需求。
参考文献
[1] ZHENG Yu,WANG Long Hao,ZHANG Ruo Chi,et al. Geolife:managing and understanding your past life over maps.MDM′08.9th International Conference on Mobile Data Management,2008:211-212.
[2] 任义.基于Windows Mobile的急救车调度导航系统的设计与实现.中南大学硕士学位论文,2007.
[3] COLEMAN R.A self-healing plug-in parser for NMEA streams[C].Proceedings of the fifth international conference on information technology:New Generations,2008:1023-1027.
[4] 刘彦博,胡砚,马骐.Windows Mobile平台应用与开发[M]. 北京:人民邮电出版社,2006.