基于Android平台的导航系统
2014-11-23安志宏高宇飞
安志宏,高宇飞
(衡水学院 数学与计算机科学学院,河北 衡水 053000)
随着移动终端技术及手机硬件的发展,智能手机已成为人们生活的重要组成部分.目前,市场占有率最大的当属Android及IOS平台.从2002到2007几年内,可以说是塞班的天下.而自Android1.1发布以来,Android以其开源性,迅速占领了手机市场的半壁江山.Android平台无论从接口,还是功能上,都有很强的优势.而在价格上,Android手机却比IOS的苹果手机低廉得多,使得苹果手机似乎成为了一种高消费的奢侈品.在国内,Android手机更是占到了智能机市场 90 %的份额.传统的以纸质地图来人工导航的方式就显得格格不入.纸质地图不能更新,容易磨损,携带不便,在使用时有很大的不便.地图科技化、自动化已成为相关产品发展的必然趋势,将地图融入Android,不仅使用简单,而且还实现了智能导航,省去了人工,提高了导航的精确度.
当前已有的地图导航应用存在一定缺陷性.谷歌是最早提供地图导航服务的商家之一,但国内使用谷歌导航存在一定的依赖性,如果谷歌不给提供服务,那么用户是不可能使用相关服务的.就在2010年2月23日,谷歌公司总部决定正式退出中国,并最终关闭中国的搜索服务,转用香港服务器来提供简体服务.同时,谷歌在中国相继关闭了一系列的服务.这使得谷歌导航的使用存在很大的风险性.
另外,现有产品的侧重点往往在导航上,忽视了用户在使用时遇到的问题,那就是方向的识别.地图给出的路径是在地图上标注到达目的地的路线.而用户通常在获得了路径以后,由于不确定方向,使得自己越走越远,当发现方向不对而原路返回时却浪费了不少的时间和精力.
因此,本文提出了在开发系统时采用国内数据,基于 Android平台,并在导航前让用户通过指南针功能明确方向的观点.
1 系统架构
系统的物理架构主要是这样的:基于Android API设计编码,通过Android系统加载到Android移动平台,而硬件平台通过键盘及触摸屏输入请求及参数来调用GPS等模块获得相关数据,再由显示器返回给用户[1].如图1所示.
图1 系统物理结构
2 UI规划
软件在打开时首先显示主界面,列出各项功能供用户进行选择,包括:地图浏览、位置定位、公交路线查询、路径规划、离线地图管理、指南针等功能,点击相对应的图片即可进入各个功能模块.
为了方便用户对地图的查看,首先设计一个地图浏览的功能,通过该功能,用户可以查看全国各地的交通图.并且提供给用户对地图的平移和缩放功能,通过放大功能使用户能够查看更为详细的情况,通过缩小功能则可以从全局查看.如图2所示.
图2 地图浏览
位置定位功能主要通过将用户位置在地图中作标记来实现.当用户位置发生改变时,通过设置监听器可以重新定位[2],实现动态定位.该功能的实现主要分为两种方式,即 GPS定位与网络定位[3].从精确度上分析,GPS定位的方法定位精确[4-5],无需网络连接,但受周边环境影响较大,有高层建筑物或是在室内时,都无法定位.而网络定位虽然在精度上不及 GPS定位,但网络定位的方法速度较快,不受周边环境影响,在一定程度上弥补了GPS的不足.定位时,用户可以手动设定定位方式,打开GPRS,关闭GPS,则系统使用网络定位;打开GPS,关闭GPRS,则使用GPS定位.定位成功,则返回用户在地图中的定位标记.
公交路线查询功能可以设置两个参数,分别为城市与线路,例如:查询衡水市的 12路公交车,即输入“衡水”,再输入“12”.如图3所示.
图3 公交路线
路径规划通过用户设置起点与终点,为用户展示路径,该功能主要使用网络资源,通过向百度地图的 API服务发送请求,来获取路径相关点,然后通过解析网络或本地地图数据,在地图上标记这些点,绘成路线,通过界面返回给用户.
离线地图管理功能主要用来管理离线地图,用户可以输入城市名称,通过搜索来查看该城市的离线地图,若存在则展示给用户,不存在可以点开始按钮进行下载,同时可以停止及删除.再加入扫描离线包的功能,若导入了离线地图,通过该功能可以自动识别并加载.
指南针功能为用户指明方向,使用时只需将手机放平,与水平面平行,箭头所指方向为北方,该功能主要通过手机的传感器实现,具体运用到了手机的电子罗盘功能.通过Android的sensor类来管理.
3 系统主要功能编码实现
3.1 地图浏览编码
该功能主要用到几个基础类:
MapActivity:该类用来显示 AndroidMap的 Activity类,如果没有本地地图资源,则需要连接底层网络来获取地图数据.所有要显示 MapView的 Activity都要继承 MapActivity类,由于该类属于抽象类,所以在onCreate()中,都必须创建一个MapView的实例.
MapView:主要用来显示地图的 View组件,继承自 android.view.ViewGroup.同时,该组件只能被MapActivity来创建,并配合使用.由MapActivity来管理MapView连接网络或本地资源的线程.
MapController:用来控制地图的移动和缩放等.使用 MapController来控制地图,可以通过下面的代码来实现:
MapController mapController= mapView.getController(); //获取控制对象
mapView.displayZoomControls(true); //实现缩放显示并可控
GeoPoint point = new GeoPoint((int) (37.715 * 1E6), (int) (115.704 * 1E6));//设置要显示的地图中心点,此处设为衡水市区
mapController.setCenter(point);//加载到地图组件中
mapView.getController().setZoom(12); //设置默认显示大小级别
mapView.setDoubleClickZooming(true)//设置双击实现放大
3.2 定位编码
该功能主要在地图组件的基础上标记当前手机所处的位置,通过GPS或网络方式向定位SDK发出请求,SDK根据定位依据通过LocationClientOption方法返回定位结果.再设置LocationListener监听器来监听位置的改变,重新标记当前位置.
3.3 导航编码
该功能需要实现MKSearchListener接口中的onGetWalkingRouteResult方法,该方法首先设置起点与终点,返回两点之间在地图中标记的路径.
3.4 指南针核心编码
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println("MainActivity.onCreate()");
setContentView(R.layout.activity_main);
// 获取界面中显示指南针的图片
znzImage = (ImageView) findViewById(R.id.znzImage);
// 获取真机的传感器管理服务
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
}
@Override
protected void onResume() {
super.onResume();
System.out.println("MainActivity.onResume()");
// 为系统的方向传感器注册监听器
mSensorManager.registerListener(this,
mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
SensorManager.SENSOR_DELAY_GAME);
}
public void onSensorChanged(SensorEvent event) {
System.out.println("MainActivity.onSensorChanged()");
// 真机上获取触发event的传感器类型
int sensorType = event.sensor.getType();
// 模拟器上获取触发event的传感器类型
switch (sensorType) {
case Sensor.TYPE_ORIENTATION:
// 获取绕Z轴转过的角度.
float degree = event.values[0];
// 创建旋转动画(反向转过degree度)
RotateAnimation ra = new RotateAnimation(currentDegree, -degree,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
// 设置动画的持续时间
ra.setDuration(200);
// 运行动画
znzImage.startAnimation(ra);
currentDegree = -degree;
break;
}}
4 结语
指南针功能的实现使用户成功避免了导航方向的错误,定位以及导航功能为用户出行带来了极大的方便.同时,百度地图API的使用摆脱了对国外数据的依赖.相信导航类的产品在今后会逐渐解决并完善方向问题,并且逐渐减小对国外地图数据的依赖性.
[1] 隆志坚.Android平台基于Google Map Api的导航应用技术研究和实现[J].办公自动化,2011(16):46-48.
[2] 曾薪夷.基于Android平台的GPS导航系统的设计与实现[J].计算机与现代化,2012(9):255-258.
[3] 刘洋.GPS+无线网络:混合定位助力LBS[J].电子设计技术,2009(4):82.
[4] 李明,陈晓,何锋锋.GSM网络在GPS/GSM卫星定位公众服务系统的应用[J].移动通信,2008(13):60-64.
[5] 邬群勇,张爱国,许其凤,等.GPS移动定位与移动网络定位精度的分析[J].全球定位系统,2010(5):33-37.