基于Android的地图服务应用程序设计与实现
段雅鑫
【摘 要】对Android操作系统以及百度地图Android SDK做了的简单介绍,设计了地图服务应用程序的整体流程,并按照设计流程在Android智能手机平台上实现了地图浏览、自我定位、路径规划等功能模块.程序运行结果表明,该地图服务程序界面友好、定位准确、加载流畅,基本上满足了用户的地图服务需求,具有一定的实用价值.
【期刊名称】《北京测绘》 【年(卷),期】2016(000)001 【总页数】4页(P96-99)
【关键词】Android;地图服务;百度地图SDK;LBS 【作 者】段雅鑫
【作者单位】中国矿业大学(北京)地球科学与测绘工程学院,北京100083 【正文语种】中 文 【中图分类】P208 1 引言
近年来,随着移动网络时代步伐的不断加快,各类基于智能手机平台的应用软件也如雨后春笋般不断涌现,其中,一种非常实用的移动互联网应用——LBS更是得到了人们的普遍关注。LBS又称基于位置的服务,英文全称是Location Based
Server,它是使用外部定位技术(如GPS)获取移动终端用户位置信息,在GIS平台的支持下通过电信移动运营商的无线电通讯网络,为用户提供相应的服务。LBS的核心应用就是与地图有关的应用服务,诸如百度地图、高德导航等给人们的日常生活带来前所未有的便捷与享受。本文将秉承这个理念,基于Android移动平台,结合百度地图Android SDK,设计并实现了一个集地图浏览、定位、公交查询、路线规划、POI(兴趣点)检索分享于一身的地图服务应用,并经过测试验证,本应用程序能从一定程度上满足用户对于地图服务需求。 2 Android平台和百度地图Android SDK简介 2.1 Android平台简介
Android是一种基于Linux的自由的、开放源码的操作系统,拥有4个核心组件,分别是:提供界面显示的Activity、提供后台计算的Service、提供进程间通信Intent和提供广播接收的Broadcast Receiver[1]。Android 采 用 软 件 堆 层(Software Stack)架构进行设计,主要包括三大部分:底层Linux操作系统、中间层的中间件(Middleware)、上层Java应用程序[2]。
在Android平台下,本地应用程序和第三方应用程序之间没有区别,所有Android应用程序使用的库都是一样的,并且Android应用程序前所未有的拥有对底层硬件的访问权限,这使得开发人员能够编写功能更加强大的应用程序。 Android平台最具革命性的特点在于设计巧妙的应用程序整合。它允许开发人员编写能够无缝整合诸如Web浏览器、地图软件等核心功能的应用软件,应用程序也能充当提供者以便安全地在程序中共享数据。 2.2 百度地图Android SDK简介
百度地图API是一套基于百度地图服务为开发者免费提供的应用程序接口,能够提供基本地图显示、位置搜索、定位、路线规划、LBS云存储与检索等功能,在PC端、移动端、服务器等多种设备都适用[3]。它具有多种开发工具和服务,
其中Android SDK就是其中之一。
百度地图Android SDK是一套基于Android操作系统的应用程序接口,它可以用于Android2.1及以上的版本。通过调用SDK接口,可以轻松访问百度地图服务和数据,构建功能丰富、交互性强的地图应用程序。与其他网络地图服务相比,百度地图服务的功能更具有本地特色,更具灵活性和实用性[4]。
百度地图Android SDK还有一个优势就是其提供的所有服务都是免费的,而且接口的使用没有次数限制,开发者只需要网上申请密钥(Key),就可使用百度地图Android SDK了。 3 地图服务应用的整体设计
本次设计的目的是为用户提供高效便捷的地图服务,主要包括以下几个核心功能: (1)地图浏览:地图浏览是地图服务程序提供的最基本的功能。程序提供了普通地图、卫星图、交通图、百度城市热力图等多种显示模式,以满足用户的不同需求。 (2)自我定位:为用户提供了高精度定位模式、低功耗定位模式、仅设备三种地位模式,分别满足用户的不同定位要求。高精度定位模式会同时应用网络定位和GPS定位,优先返回最高精度的定位结果;低功耗定位模式不会使用GPS定位,而只使用网络定位(Wi-Fi定位和基站定位);设备定位模式只使用GPS进行定位,所以这种模式下的定位不支持室内环境的定位。
(3)路线规划:用户需要输入起点和终点信息,然后查询这两点之间的路线信息并在地图上直观的显示出来。用户可以选择驾车搜索、公交搜索、步行搜索三种方式,地图服务程序会分别给出不同的建议路线。
(4)公交查询:用户只需要输入城市信息、公交车号便可以查找对应的公交路线以及各站点的位置和名称。
(5)短串分享:用户搜索查询POI(兴趣点)后得到的每一个地理位置结果都将对应一条短串(包含链接),用户可以通过短信、邮件或第三方分享组件(如微博、
微信等)把短串分享给其他用户,从而实现地理位置信息的分享。当其他用户收到分享的短串后,点击短串即可打开手机上的百度地图客户端或者手机上的浏览器进行查看。
整个地图服务应用程序的流程如图1所示: 图1 地图服务应用程序整体流程 4 关键技术及实现过程
在使用百度地图SDK提供的各种LBS功能之前,需要先申请百度地图移动版的开发密钥,进行官方授权确认。
4.1 地图浏览功能在Android终端的实现
地图浏览功能主要是向用户呈现整个地图,实现对地图的查阅和基本地图操作。该界面主要是由Map View组成,实现了对地图的平移、缩放等基本操作。用户还可以在该界面查看卫星图,添加交通图和城市热力图。 该功能实现的几个关键步骤如下:
(1)应用程序利用 SDKInitializer.initialize方法初始化SDK引用的Context全局变量;
(2)接着通过调用setContent View方法打开布局。在activity_display.xml中定义了 Map-View控件,需要使用find View ById方法对Map-View实例化。 (3)为了扩展其他功能,定义了两个RadioButton控件,使用户能够选择地图的显示模式,普通地图还是卫星图,同时还添加了两个Check Box控件,使用户能够在原有地图的基础上添加交通图和城市热力图。卫星图、交通图 的显示主要是通过Map View实例的set Map Type方法实现,城市热力图主要是通过Baidu Map实例的setBaidu Heat Map Enabled方法实现。 4.2 定位功能在Android终端的实现
手机定位技术[5-6]是一种能够获得用户当前位置信息,并将手机或移动终端
用户位置信息在手机上标识出来的技术和服务,是一种基于位置的服务
(Location Based Server)。它利用移动网络的基站群、手机终端以及手机自带的定位设备,获取手机用户当前位置信息(经纬度、坐标等),并将这些信息提供给用户。本功能的实现主要依靠百度地图的定位SDK,包括Location(定位SDK核心类)、LocationClient Option(用于设置定位SDK的各个配置参数)、BDLocation(封装定位SDK的定位结果)、BDLocation Listener(定位请求回调接口)等。关键步骤如下:
(1)初始化LocationClient类。该类必须在主线程中声明,需要Context类型的参数;
(2)配置定位SDK的参数。设置定位参数包括:定位模式(高精度定位模式、低功耗定位模式、仅设备定位模式),返回坐标类型,是否开启GPS,是否返回地址信息等。主要是通过set Location Mode 方 法、setCoor Type 方 法、setIs-Need Address方法和set OpenGps方法实现的。
(3)实现BDLocation Listener接口。在BDLocation Listener接口中,OnReceiveLocation方法需要实现,它接收异步返回的定位结果,参数类型是BDLocation类型参数。
(4)通过LocationClient实例的start方法开启定位。 4.3 路线规划功能在Android终端的实现
路线规划功能能够为用户提供出行路线建议,只要用户输入起点和终点名称,并选择出行方式(驾车、公交、步行),程序就能够提供出行路线并在地图上显示各个路线节点的信息。程序的主要实现过程如下:
(1)初始化索搜模块,创建RoutePlanSearch类的实例,并对该实例注册OnGetRoutePlanResult Listener事件监听器;
(2) 实 现 onGet DrivingRouteResult、onGet Transit RouteResult、on Get
Walking Route Result接口方法,添加路线覆盖物图层。下面以onGet Driving RouteResult方法的实现过程为例,首先创建驾车路线覆盖物Driving
RouteOverlay类的实例,然后通过覆盖物实例的set Data方法为覆盖物添加数据,该数据主要是通过result.get Rout Line.get()方法得到的路线信息,最后利用覆盖物实例的add To Map方法将覆盖物图层添加到地图上。
(3)该方法的作用主要是返回驾车搜索结果,其余两个方法的实现与上述方法类似,这里不再重复。
(4)调用 drivingSearch(DrivingRoutePlan-Option option)方法,完成路线查询。公交路线查询与步行路线查询的实现过程与此类似。 4.4 公交查询功能在Android终端的实现
公交查询功能为用户提供了一个方便的查询城市公交路线的方法,用户只要输入城市名称和公交车号,便可以在地图上看到查询的公交路线和沿途各站。程序的主要实现步骤如下:
(1)初始化搜索模块,创建PoiSearch类和BusLineSearch类的实例mSearch和mBus-LineSearch,分别为这两个实例注册On Get Poi-SearchResult Listener和OnGetBusLineSearch-Result Listener事件监听器
(2)发起POI检索,从得到的所有POI中找到公交线路类型的POI,再使用该POI的uid进行公交详情搜索。通过使用mSearch.searchInC-ity方法和mBus LineSearch.search Bus Line方法完成搜索功能。
(3)将搜索结果以覆盖物图层的形式显示出来,类似于显示路线规划图层的方法步骤,这里不再做过多叙述。 4.5 短串分享在Android终端的实现
使用该功能,用户可以将索搜到的每一个地理位置信息,以短串的形式,通过短信、邮件、第三方分享组件(如微博、微信)分享给其他用户。当其他用户点击短串即
可打开百度地图客户端或手机浏览器进行查看。实现的主要步骤如下:
(1)POI(兴趣点)索搜,主要是通过使用PoiSearch类实例的searchInCity方法,该方法接受一个PoiCitySearchOption类型的参数,包括城市名称和搜索关键字信息。
(2)在 POI(兴趣点)被点击时,通过Share UrlSearch类实例的requestPoiDetailShare Url方法发起短串请求。
(3)分享短串,主要是通过Intent类实例的putExtra方法、set Type方法创建短串,然后调用start Activity方法,打开分享组件选择界面,包括短信、邮件、第三方分享组件等,选择完成后,便可以将短串分享给自己的好友。 5 程序测试与结果
笔者在Android智能手机上对地图服务应用程序的各个功能进行了测试,测试结果如图2所示。测试结果表明,地图服务应用程序加载流畅,在手机GPS和移动网络都开通的情况下,定位精度可达10m,程序设计的功能模块都能顺利运行,能在一定程度上满足用户的地图服务需求。 图2 地图服务程序运行结果 6 结束语
本文以Android操作系统为开发平台,以百度地图SDK为开发工具完成了地图服务应用程序的设计与实现。主要介绍了该程序各个模块的功能和主要的实现步骤,展示了程序运行的结果。通过实际的运行与测试,基本上能满足用户对地图服务的要求。然而,本程序还有待进一步扩充与优化,以提供更加个性化和专业化的地图服务。 参考文献
【相关文献】
[1]苗忠良,曾旭,宛斌著.深入Android应用开发[M].北京:机械工业出版社,2012. [2]李瑞宣,王山东等.基于Android平台定位系统设计与实现[J].信息技术,2013(12):187-188.
[3]刘辉,兰梅等.主流电子地图API的综合评价分析[J].北京测绘,2015(3):59-60. [4]柳婷.基于Android手机地图服务系统的设计与实现[D].北京:北京邮电大学,2012. [5]杨国林.GPS技术在导航电子地图中应用研究.科技信息(学术版)[J].2006(3):69-70.
[6]崔和宏.移动定位技术概述.科技信息(科学教研)[J].2008(20):402.
因篇幅问题不能全部显示,请点此查看更多更全内容