冯先成,周密,徐川
1.武汉工程大学电气信息学院,湖北 武汉 430205;2.智能机器人湖北省重点实验室(武汉工程大学),湖北 武汉 430205
基于Android的百度地图多功能实现
冯先成1,2,周密1,徐川1
1.武汉工程大学电气信息学院,湖北武汉430205;2.智能机器人湖北省重点实验室(武汉工程大学),湖北武汉430205
基于墨卡托投影法、A*算法等理论,调用百度地图应用程序接口(API)的SDKInitializer、MapView和BaiduMap三大核心类方法,设计出一套百度地图的方案.首先进行密钥申请和清单文件的配置,再自定义一个基类BaseActivity,完成地图界面初始化、调用生命周期方法等预操作.在基类上进行地图多功能开发,实现了浏览地图、搜寻地点、路线规划、自我定位等应用.结果表明,多功能百度地图有较好的移植性、实用性,更加贴近用户,能够满足用户搜索、定位等基本功能的实际需求.
Android;百度地图;A*算法;搜索
百度地图是一项网络地图搜索服务[1],地图覆盖区域广、查询功能多样,Android是基于Linux的操作系统,多用于移动设备.随着移动通信网络技术、互联网技术、GPS技术[2]和GIS技术的发展,二者的结合使得一种新形式的电子地图应用服务得以出现[3].因此,为满足用户基本需求,需要申请百度地图密钥[4]和使用百度提供的开源核心类接口[5],在手机端设计并实现浏览地图[6]、搜寻地点、路线规划、自我定位[7]等多功能.
2.1墨卡托投影
百度地图使用的投影方法是墨卡托投影.墨卡托投影是由荷兰地图学家墨卡托(G.Mercator)于1569年创拟.假设地球被套在一个圆柱中,赤道与圆柱相切,然后在地球中心放一盏灯,把球面上的图形投影到圆柱体上,再把圆柱体展开,就形成了一幅墨卡托投影的世界地图,广泛应用于航空、航海中.假设墨卡托投影的坐标系原点为(0,λ0),表示X轴为赤道,Y轴则在经度为λ0处垂直于赤道,X轴的刻度是等距的,Y轴方向越靠近两极变形越大.墨卡托投影公式为
式(1)中,λ为经度,φ为纬度.即有经纬度(φ,λ)对应的墨卡托平面坐标即为(x×R,y×R).很明显,y方向的距离只有在赤道附近才是接近实际距离的.
2.2A*寻径算法
A*算法可运用到百度地图路径搜索中.A*算法是一种静态路网中求解最短路径最有效的直接搜索方法,算法中的距离估算值与实际值越接近,最终搜索速度越快.寻径公式表示为
对于路径搜索问题,状态就是图中的节点,代价就是距离.定义f(n)是代价估计,g(n)为实际代价,h(n)最佳路径的估计代价.保证找到最短路径(最优解的)条件,关键在于估价函数f(n)的选取(或者说h(n)的选取),以d(n)表达状态n到目标状态的距离,那么h(n)的选取大致有如下3种情况:1)如果h(n)≤d(n)到目标状态的实际距离,这种情况下,搜索的点数多,搜索范围大,效率低,但能得到最优解;2)如果h(n)=d(n),即距离估计h(n)等于最短距离,那么搜索将严格沿着最短路径进行,此时的搜索效率是最高的;3)如果h(n)>d(n),则搜索的点数少、搜索范围小、效率高,但不能保证得到最优解.
图1 API Key申请流程图Fig.1Flowchart of applying API Key
3.1API Key申请及清单文件配置
百度地图是在软件Eclipse中进行开发.首先,在Eclipse中导入百度地图的核心开发包,开发包文件包括:baidumapapi_v3_3_0.jar、locSDK_5.0.jar、libBaiduMapSDK_v3_3_0_15.so和liblocSDK5.so等文件,其中,locSDK_5.0.jar和liblocSDK5.so为百度定位SDK所使用.
自v2.1.3版本开始,需要进入新的key申请系统.申请流程如图1所示,打开命令行进入Android签名目录,使用JDK的keytool.exe生成数字签名,根据规则加上应用包名,合成安全码,进而获取key.申请密钥和百度地图开发权限需要在清单文件中配置.
3.2总体方案
基于开源的百度地图API的核心类及接口,设计出一套总体方案,总体流程如图2所示.
图2 总体方案设计图Fig.2Overall design diagram
当打开手机APP时,会进入菜单主页面,这个页面显示的就是常用的百度地图应用列表.大致分为普通地图显示,地图图层切换(底图、卫星图、实时交通信息图),地图覆盖物(用户自行对地图进行标注)、指定范围内搜索、路线策略显示(驾车、步行、公交换乘)、自我定位.任意打开一个菜单列表都会校验Key、GPS(定位时才需要)、网络是否打开,不满足条件,无法进入应用,界面会提示用户打开相应的操作.当用户进入到某应用时,按返回键会重新回到主页面.
4.1定义基类
在程序中首先定义了一个基类BaseActivity让其作为父类[8],应用开发的类都是继承这个类,这样使得代码利用率高且程序简洁.首先初始化基类,然后定义两个对象即百度地图控件对象和控制器对象,再使用MapStatusUpdateFactory类来描述地图状态,如设置缩放级别、坐标、中心点.其流程如图3所示.
图3 定义基类Fig.3Defined base class
4.2覆盖物
地图覆盖物[9]是覆盖到地图上的内容,包括:本地覆盖物和搜索覆盖物.本地覆盖物[11-13]的抽象基类:OverlayOptions,搜索覆盖物抽象类:Overlay⁃ Manager.对于本地覆盖物,以marker覆盖物为例,会先新建markerOptions对象,然后设置对象的位置、图标、是否可以拖拽(默认是否)、标题等,最后将覆盖物添加至底图中.圆形覆盖物CircleOp⁃tions、文字覆盖物TextOptions等大体思路都与上例是一致的.Marker覆盖物运行结果如图4所示,图4中加入了泡泡窗口.
图4 marker覆盖物Fig.4Marker options
对于搜索覆盖物[14-15],包括位置检索、周边检索、范围检索、公交检索、驾乘检索、步行检索等,初始化PoiSearch类,通过setOnGetPoiSearch Re⁃sultListener方法注册搜索结果的监听对象OnGet⁃PoiSearchResultListener,通过自定义MySearchLis⁃tener实现类,处理不同的回调方法,获得搜索结果,再结合覆盖物展示结果.以步行路线为例,流程如图5所示.以从武汉工程大学步行到华中科技大学为例,运行结果如图6所示.
4.3定位
定位获取位置主要有GPS定位、网络定位和WIFI定位.定位流程如图7所示.图8为寝室WIFI定位.
图5 步行检索Fig.5Walk retrieval
图6 步行路线查询Fig.6Query of walk route
图7 定位流程图Fig.7Flowchart of positioning
图8 寝室定位Fig.8Dormitory location
本文基于墨卡托投影法及A*寻径算法等理论方法,通过使用开源的百度地图API核心类及接口,进行了密钥的申请、清单文件的配置,设计了一套百度地图方案,在真机上实现了3个常见应用,展示文字、全城搜索、公交换乘等其他应用均已实现,因篇幅有限没有列出.基于Android平台的地图服务具有日常实用性,未来研究重点是在Android平台下,完善和创新百度地图的应用,并以百度地图为基础,进一步拓展研究用户需求的其他项目.
[1]甄巍松,李国强,鲁统伟.基于特征点相似度的匹配定位算法[J].武汉工程大学学报,2011,33(4):85-88. ZHEN W S,LI G Q,LU T W.Match and location algorithm based on similarity of feature point[J]. Journal of Wuhan institute of technology,2011,33(4):85-88.
[2]鲁统伟,林芹,李熹,等.记忆运动方向的机器人避障算法[J].武汉工程大学学报,2013,35(4):66-71. LU T W,LIN Q,LI X,et al.Obstacle avoidance algorithm of robot based on recording move direction[J].Journal of Wuhan institute of technology,2013,35(4):66-71.
[3]靳岩,姚尚朗.Android开发入门与实践[M].北京:人民邮电出版社,2009.
[4]杨潇亮.基于安卓操作系统的应用软件开发[J].电子制作,2014(19):45-46. YANG X L.Application software development based on Android operating system[J].Practical electronics,2014(19):45-46.
[5]施连敏,盖之华.基于Android的百度地图应用的搭建[J].技术与市场,2014,21(12):34-35. SHI L M,GAI Z H.The building of Baidu map application based on Android[J].Technology and market,2014,21(12):34-35.
[6]张波,赵双明.基于Android平台的百度地图开发研究[J].软件导刊,2015,14(7):96-98. ZHANG B,ZHAO S M.Baidu map development research based on Android[J].Software guide,2015, 14(7):96-98.
[7]张燕兵.Android手机定位与地图设计与实现[D].长春:吉林大学,2013.
[8]Android移动应用基础教程[M].北京:中国铁道出版社,2015.
[9]孙迪,李沛鸿.百度地图API在WebGIS中的应用[J].河南科技,2013,11(22):165-166. SU D,LI P H.Application of Baidu map API in WebGIS[J].JournalofHenanscienceand technology,2013,11(22):165-166.
[10]潘伟洲,陈振洲,李兴民.基于人工神经网络的百度地图坐标解密方法[J].计算机工程与应用,2014,50(17):110-113. PAN W Z,CHEN Z Z,LI X M.Decryption method of Baidumap'scoordinatesbasedonartificialneural network[J].Computer engineering and applications,2014,50(17):110-113.
[11]朱根荣.百度地图API应用数例[J].电脑编程技巧与维护,2013(23):29-33. ZHU G R.Application examples of Baidu maps API[J].Computer programming skills and maintenance,2013(23):29-33.
[12]付林,闫强,李祥.基于百度地图的小区域导航实现方案研究[J].计算机技术与发展,2014,24(5):223-226. FU L,YAN Q,LI X.Research on small area naviga⁃tion based on baidu maps[J].Computer technology and development,2014,24(5):223-226.
[13]郑伟.基于Android的百度地图车辆定位系统设计与实现[D].呼和浩特:内蒙古大学,2014.
[14]王红崧,周海晏.基于百度地图API的旅游地理信息系统开发[J].现代计算机,2012(23):60-63. WANG H S,ZHOU H Y.Development of tourism geographic information system based on Baidu map API[J].Modern computer,2012(23):60-63.
[15]肖文汉,吴孝斌,曹莹莹,等.基于百度地图API的停车场查寻系统的设计[J].计算机技术与发展,2014,24(4):227-229. XIAO W H,WU X B,CAO Y Y,et al.Design of finding parking system based on Baidu Map API[J]. Computer technology and development,2014,24(4):227-229.
本文编辑:陈小平
Implementation of Multi-Function Baidu Map Based on Android
FENG Xiancheng1,2,ZHOU Mi1,XU Chuan1
1.School of Electrical and Information Engineering,Wuhan Institute of Technology,Wuhan 430205,China;
2.Hubei Key Laboratory of Intelligent Robot(Wuhan Institute of Technology),Wuhan 430205,China
Based on the theories of Mercator projection and A*algorithm,a set of Baidu map plan was designed by using the methods of three core classes of Baidu map application program interface—SDK Initializer,MapView and BaiduMap.First,the key application and manifest configuration were completed,and then the base class BaseActivity was defined to complete the pre-operation such as the initialization of map interface and the calling of life cycle's method.By which the multi-function Baidu map was developed and the basic functions of map browsing,specified location search,route planning,positioning,etc.were implemented.The results indicate that the multi-function Baidu map has better portability,practicality and popularization,satisfying the users'requirement of search and location.
Android;baidumap;A*algorithm;searching
TP317
A
10.3969/j.issn.1674⁃2869.2016.05.015
1674-2869(2016)05-0490-05
2016-06-11
住房和城乡建设部科研项目(2015-R3-007)
冯先成,硕士,副教授.E-mail:2023347921@QQ.com