APP下载

基于Android的手机导航系统设计与实验

2014-05-02任克强李晓亮

实验技术与管理 2014年5期
关键词:经纬度路况好友

任克强,李晓亮,谢 斌

(江西理工大学 信息工程学院,江西 赣州 341000)

随着国民经济的快速发展,汽车的普及越来越高,人们对地图导航提出了更高的要求。车载导航系统是智能交通系统最重要的组成部分之一,人们可以通过导航、定位等功能提高车辆行驶的速度和安全性[1]。但是,传统车载导航不仅价格昂贵,而且便携性也很差,且只能满足一些有车人的导航需求,对于乘坐公交和其他外出人员则无法为其提供导航服务。因此,设计一种更加方便和廉价,且易于大众普及的手机导航系统有着现实的市场需求。

近年来,移动手机用户的数量增加迅速,各种智能手机逐渐普及,手机的功能已经不再局限于通信;同时,无线网络和Android系统的广泛应用,为手机应用程序的开发提供了优良的平台和广阔的发展空间[2]。本文基于开源的Android系统设计了一种运行在手机上的地图导航系统,该系统可以利用GPS和无线网络进行快速、准确的定位,不仅具有传统车载导航系统的功能,而且能够实时显示城市交通路况,实时定位跟踪多个客户端,方便各客户端之间的联系,扩展了地图导航的功能,可满足普通大众的出行导航需求。

1 开发平台介绍

1.1 Android系统

Android是Google开发的基于Linux平台的开源手机操作系统[3]。Android于2007年11月推出后获得了广泛的应用,目前,大多数智能手机采用Android系统[4]。Android由操作系统、中间件、用户界面和应用软件组成[5],是真正意义上的开放性移动设备综合平台,具有丰富的移动电话工作软件。在Android系统中,应用程序可完全在Android Dalvik上运行,也可利用 Android NDK(android native development kit)技术来解决Java代码运行速度低的缺陷[6]。Android系统架构采用分层的架构,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层[7-8]。在应用程序框架层,开发人员可以像核心应用程序一样拥有访问框架API的所有权限。应用的结构化设计简化了各组件之间的重用,任何应用均可以分发属于自己的组件,而且在遵循框架的安全性约束前提下,任何应用还可以使用这些分发的组件[9]。开发应用程序常用的应用框架主要包括以下几类[10]:

(1)ContentProviders(内容提供器):通过 Content Providers可以在某个应用之中访问其他应用的数据(例如电话簿),也可以共享自己的数据。

(2)ResourceManager(资源管理器):提供使用者对静态资源的访问能力,比如国际化文本和布局文件。

(3)NotificationManager(通知管理器):通过通知管理器,所有的应用都能在状态栏显示自己的提醒消息。

(4)ActivityManager(活动管理器):用来管理应用的生命周期,还提供了通用的向后导航功能。

1.2 高德地图

高德是国内领先的电子地图服务公司,包括谷歌在内的很多公司的内地地图数据都由其提供。截止到2012年第3季度,中国手机地图累计账户在市场份额排名中,高德地图以25.9%的份额位居第一。高德地图API具有良好的稳定性,并且与Google MAP API基本兼容,成为众多国内开发者的首选。

AutoNavi MAP API是高德公司提供的调用地图的接口方法。用户应用程序可以通过AutoNavi MAP API提供的接口方法操作地图数据,实现位置相关或地图相关的应用。例如,通过调用AutoNavi MAP API,将地图数据整合到用户的应用中,并可将商户的地理位置信息在地图上进行标注,以直观的形式展现给用户。

2 系统设计

2.1 系统总体架构

手机导航系统采用C/S(client/server,客户机/服务器)模式,其总体架构如图1所示。客户端采用基于Android系统的智能手机,服务器端则用开源的tom-cat服务器实现,两者通过无线网络进行通信。服务器端作轻量级设计,主要负责各客户端之间的通信,并存储用户注册方面的等数据;客户端功能包括地图下载、显示、路线查询、导航、定位以及与服务器通信等。

图1 系统总体架构图

2.2 客户端软件设计

客户端软件主要包括系统界面、自我定位、地址查询、好友定位、路线查询以及实时路况六大功能模块。其中,地址查询包括地名查询和经纬度查询,路线查询包括自驾路线查询和公交路线查询,如图2所示。

图2 客户端软件结构框

软件设计需要调用高德公司提供的地图服务,须先在该公司网站进行注册,取得一个与本程序唯一绑定的开发密钥(API KEY),同时在androidMainfest.xml注册程序中所需要的权限。AutoNavi MAP API将自动从androidMainfest.xml文件中获取用户的开发密钥,无需用户在程序中输入。注册完成后,才能进行下一步的程序开发。

2.2.1 客户端 UI模块

系统界面主要包括登录界面、功能选单(菜单)和功能按钮。功能选单包括自我定位、地址查询、好友定位、路线查询、实时路况以及退出6个选单选项;功能按钮包括实时路况和自我定位2个常用功能,实时路况按钮位于屏幕左下角,自我定位按钮位于屏幕右下角。

选单和按钮的布局设计保存在layout文件夹的“*.xml”文件中,利用LinearLayout(线性布局)、FrameLayout(单帧布局)、AbsoulteLayout(绝对布局)、RelativeLayout(相对布局)和 TableLayout(表格布局)这5种布局模式,通过不同布局模式的组合可以实现各种形式的UI界面。

2.2.2 自我定位模块

自我定位功能是通过GPS所获得的经纬度信息,将客户端所处位置置于屏幕中央,并加以标注;或者进行其他操作后需要再次定位时,点击屏幕右下方的“自我定位”按钮实现重新定位。定位有以下两种方法:

(1)调用API的定位方法。程序首先需要启动MyLocation和指南针,然后通过继承Overlay类,并重写draw方法实现定位图标的标注,其关键代码如下:

该方法定位准确,但无法获得具体经纬度值。

(2)利用Criteria类的定位方法。Criteria类用于选择位置服务provider,Criteria类为应用程序提供了多种因素的参数设置,包括精准度、用电量、海拔、速度、方向和资费等。locationManager根据设置的参数选择最优的provider。通过Location类中的getLongitude和getLatitude方法获得具体的经纬度数值,并且可以在LocationListener中对位置数据监听,当客户端位置发生改变时,重新获得新位置的经纬度数据。其关键代码如下:

其 中,locationManager.requestLocationUpdates中的第1个参数bestProvider可以是LocationManager.NETWORK_PROVIDER 或 LocationManager.GPS_PROVIDER。

LocationManager.NETWORK_PROVIDER 使用无线网络进行定位,精度较低,但速度快;Location-Manager.GPS_PROVIDER使用GPS进行定位,精度高,但一般需要10~60s才能开始第1次定位,并且在室内基本上无法定位。这两种Provider实际上是互补的,故本系统同时开启2个监听,但基于无线网络的监听只执行一次,而基于GPS的监听则一直持续下去,直至用户停止监听。

2.2.3 地址查询模块

地址查询需要通过地理编码进行转换。地理编码是对地址或经纬度地图坐标的编码,两者之间可以进行转换,以便为基于位置的服务和基于地图的活动中所使用的位置或坐标提供一个可识别的上下文[11]。

地址查询包括通过经纬度查询地名以及通过地名查询经纬度两种方式。由经纬度查询地名时是将具体的经纬度数值通过反向地理编码得到该经纬度对应的地名;由地名查询经纬度是将具体的地名通过正向地理编码得到该地名对应的经纬度。其关键代码如下:

2.2.4 “好友”定位模块

所谓“好友”是指授权可以查看彼此位置信息的客户端。“好友”定位功能使得“好友”之间可以随时相互了解彼此的最新位置,为“好友”结伴出行,以及儿童安全等提供实时、直观的定位。

每个客户端都有一个唯一的ID,服务器对不同的“好友”圈进行分组,每个群组内部各个客户端定时将自己的位置信息发到服务器,并接受服务器发来的本群组内部的其他客户端的位置信息,然后将他们在地图上标志出来。

为了保证信息传输的可靠,客户端与服务器之间的通信采用TCP/IP协议。通信过程利用了TCP/IP网络通信的基本操作单元socket套节字,每个客户端与服务器通信至少需要一对套节字[12]。具体的通信过程为:客户端向服务器发送socket连接请求,服务器监听到该请求后建立socket连接,同时服务器继续监听其他客户端的连接请求,建立连接后双方进行数据传输,传输完毕后关闭socket套接字。其关键代码如下:

2.2.5 路线查询模块

路线查询功能可以选择自驾路线或公交路线,根据用户输入的起始地址和目标地址进行查询。地址信息既可以输入也可以直接点击屏幕,程序根据点击位置自动生成相应的地址信息。路线查询需要调用PoiSearch方法,该方法搜索地址有3种方式:关键字搜索、地域搜索以及类型搜索。本系统采用关键字搜索,其中关键代码如下:

2.2.6 实时路况模块

AutoNavi MAP API支持全国33个城市的实时路况查询。实时路况查询可以通过调用MapView类中的方法setTraffic()来实现,setTraffic(true)打开实时路况显示,setTraffic(false)关闭实时路况显示。选择打开实时路况显示后,将自动导入当前地图的实时路况信息,地图上的道路会出现红、黄、绿3种颜色。红色代表拥堵,黄色代表缓慢,绿色代表畅通。其关键代码如下:

其中,isChecked为实时路况标志,isChecked=true表示打开实时路况显示,isChecked=false则关闭实时路况显示。

3 系统实验

系统设计完成后,即对本系统进行了实验,以测试系统功能的正确性。Android手机的参数为:Android版本2.3.6、内核版本2.6.38.6-perf、版本号 www.azdyz.com_w619。实验结果如图3所示。

图3(a)是自我定位功能的测试结果,圆形红色图标为客户端当前所处位置,黑色长框为定位成功后系统提示的位置名称。图中客户端所处位置为“江西理工大学应用科学学院”,与系统提示的位置“江西省章贡区江西理工大学应用科学学院研究生公寓附近”一致。

图3(b)是地址查询功能的测试结果,在查询框中输入“江西省赣州市江西理工大学”并点击“确定”后,下方弹出该位置对应的经纬度值分别为:114.92915、25.852138,地址查询结果正确。

图3(c)是“好友”定位功能的测试结果,图中圆形红色图标为己方位置,圆形蓝色图标为“好友”位置,“好友”定位正确。

图3(d)和图3(e)是路线查询功能的测试结果,起始地址为“江西理工大学”,目标地址为“江西理工大学应用科学学院”。图3(d)所示路线为两地的最佳路线,图3(e)所示路线与公交线路一致。

图3(f)是实时路况功能的测试结果。目前,高德地图仅支持全国33个城市的实时路况查询,图中为北京故宫附近的实时路况。

以上实验结果表明:该系统功能准确,程序运行稳定可靠,定位和查询精度较高,满足了手机导航的要求。

4 结束语

本文设计并实现了一种C/S模式的Android手机导航系统,服务器端作轻量级设计,使用开源的tomcat服务器;客户端软件采用模块化设计,利用开源的Android系统和高德 MAP API开发客户端程序。该系统全部为软件实现,可根据需要扩展系统功能,具有成本低、便于携带以及系统升级和维护方便等特点,能够稳定、可靠地运行于绝大多数Android手机或其他Android设备,具有较好的应用前景。

图3 实验结果

[1]陈浩,张敏.基于ARM的车载导航接收机应用软件设计与实现[J].计算机测量与控制,2013,21(3):813-815.

[2]邵志举,崔光辉.手机导航系统研究与实例[J].计算机仿真,2008,25(3):142-144,170.

[3]董剑,张源,杨珉.利用硬件加速层优化Android显示系统[J].小型微型计算机系统,2012,33(7):1546-1550.

[4]李东炜,刘镇章.基于Android智能手机的实验室预约系统设计[J].实验技术与管理,2012,29(12):196-198,202.

[5]刘胜前,陈立定.基于Android平台的车辆导航系统设计与实现[J].自动化与仪表,2012(4):1-4.

[6]刘巍然,刘建伟.Android操作系统可信计算平台架构[J].武汉大学学报:理学版,2013,59(2):159-164.

[7]黄宏程,胡敏,陈如松.Android移动应用设计与开发[M].北京:人民邮电出版社,2012.

[8]雷鸣,靳婷,徐晓亮,等.面向龙芯平台的Android系统移植研究[J].计算机工程与应用,2012,48(22):71-73,87.

[9]姚昱旻,刘卫国.Android的架构与应用开发研究[J].计算机系统应用,2008(11):110-112,24.

[10]倪红军.基于Android平台的移动终端GPS研究[J].计算机技术与发展,2012,22(5):198-201.

[11]Reto Meier.Professional Android 2Application Development[M].王超,译.北京:清华大学出版社,2011.

[12]熊军华,贠超,王亭岭.基于多源信息融合的热缺陷监测系统研究[J].电力系统保护与控制,2012,41(5):146-150.

猜你喜欢

经纬度路况好友
高速公路路况信息系统
属羊
基于经纬度范围的多点任务打包算法
从路况报道看广播“类型化”新闻的要素构成
删除好友
自制中学实验操作型经纬测量仪
澳洲位移大,需调经纬度
高速公路实时路况分析系统方案
浅谈微信在路况信息发布中的应用
雪花特快专递