第39卷第6期辽宁工业大学学报(自然科学版)V ol.39, No.6 2019年12月Journal of Liaoning University of Technology(Natural Science Edition)Dec. 2019
收稿日期:2019-06-10
作者简介:刘丹(1987-),女,江苏淮安人,讲师,硕士。
优先出版地址:knski/kcms/detail/21.1567.T.20191115.1346.008.html DOI:10.15916/j.issn1674-3261.2019.06.003
基于百度地图的多点导航系统实现
刘  丹
(江苏联合职业技术学院苏州工业园区分院,江苏苏州215123)
摘  要:提供了基于百度地图的多点导航系统的设计和实现方案,重点阐述了地图显示、实时定位、地理编码和多点导航功能的实现。系统采用了安卓系统和百度地图API开发实现,可以满足用户设置多个途经点的导航需求,定制更多个性化的导航路线。
关键词:Android;百度地图;定位;地理编码;导航
中图分类号:TP319 文献标识码:A文章编号:1674-3261(2019)06-0359-04
Research on Multi-point Navigation Based on Baidu Map
LIU Dan
(Suzhou Industrial Park Branch, Jiangsu Union Technical Institute, Suzhou 215123, China)
Abstract: This paper provides the design and implementation of a multi-point navigation system based on Baidu Map, the implementation of map display, real-time positioning, geocoding and multi-point navigation is emphasized. The system is implemented with Android system and Baidu map API, which can satisfy the navigation needs of users to set up multiple transit points and customize more personalized navigation routes.
Key words: android; Baidu map; location; geographic coding; navigation
随着社会发展,人们生活水平不断提高,旅游占休闲活动比重日渐上升,逐渐成为国人的“幸福必须品”。由于人们外出活动半径不断扩大,旅游过程中,除了目的地外,难免会出现途经某地的情形,如中途接人、想要经过多个风景较好的地方等。为了避免多次设置导航的麻烦,研究途经多点的导航,并规划最优路线,显得尤为重要。
Android系统作为全球第一大移动终端平台,是主流智能设备的首选系统,在众多智能系统中,应用最为广泛。百度地图是国内导航软件领导者,免费提供多种服务,能最大程度地发挥电子地图的便利性,被越来越多开发者所喜欢。本文将Android 系统和百度地图相结合,设计并实现了基于Android和百度地图的多点导航系统,主要功能包括地图显示、定位、地理编码、多点导航。系统界面简洁、易用,用户可以方便地完成个性化的路线定制和导航。
1 关键技术研究
1.1Android系统
Android是基于Linux的开源操作系统,用于多种移动设备,如平板电脑、数码相机、智能手机、电视等;Android平台的标准化、可移植性等特点,使其成为了主流的移动操作系统平台[1]。Android 系统架构分4层,从下到上分别是Linux内核、核心类库、应用程序框架层、应用程序层;每一层专注于自己提供的服务,下层为上层提供服务[2]。1.2百度地图API
百度地图API是百度公司为开发者免费提供的一套基于百度地图的应用程序接口,包括
360                                    辽宁工业大学学报(自然科学版)                                第39卷
JavaScript、iOS、Andriod、静态地图、Web服务等多种版本,本文使用的是Android版[3]。
百度地图Android SDK是一套基于Android 4.0及以上版本设备的应用程序接口[3]。使用该套SDK 可以轻松访问百度地图服务和数据,定制功能丰富、交互性强的地图类应用程序,实现基本地图、位置搜索、周边搜索、公交、驾车线路查询、导航、鹰眼轨迹等功能[4]。
1.3百度定位
百度移动定位采用GPS、、WIFI进行定位。
(1)GPS定位系统由在轨道上运行的卫星和地面终端构成[5]。地面终端根据卫星信号,计算出当前位置。使用GPS时,不需要连接网络,只要在户外,基本都可以准确定位。
(2)当用户只打开数据流量,不打开GPS时,使用定位。定位必须在有信号的地方使用,移动终端搜索周围的信号,自动从这些中选择信号最好的连接注册。距离越近,信号越好,由于信号很容易受到干扰,所以定位不准确,但是定位速度很快。
(3)WiFi辅助定位。全世界绝大多数的Wifi热点都是固定位置的,拥有独一无二的MAC地址,设备的MAC地址发送到位置服务器,服务器计算出设备的地理位置并返回到用户设备[6]。一个Wifi 热点的覆盖范围仅有几十米就可以获得相当精确的位置信息。Wifi定位精度高、速度快,应优先选择。
2 系统设计
用户打开APP,进入主页,使用移动定位获取用户当前位置,作为路线起点,标注在地图上;输入目的地地址,自动在地图上添加终点标注;再输入0或多个途经点地址,每个途经点也会标注在地图上。起点、途经点和终点设置完成后,点击“开始导航”按钮,规划导航路线,路线规划成功,进入导航页面,导航页面显示到达终点,并经过中间点的最佳路线和所需要的时间,开始语音导航。系统包括以下4个模块:地图显示、实时定位、地理编码、多点导航模块,功能模块如图1所示。
各模块具体功能如下。
(1)地图显示:实现基础地图的显示、缩放、旋转等功能。
(2)实时定位:获取用户实时位置,将实时位置标注在地图上。
图1系统功能模块图
(3)地理编码:主要使用正向地理编码,将用户输入的地址信息转换成对应的经度、纬度。根据经度、纬度在地图上添加标注;同时也为后续的多点导航服务。
(4)多点路径规划和导航:通过地理编码,获取起点、终点、途经点的经纬度坐标。根据经纬度坐标,规划出途经各点的最佳路线,并在行进过程中实时语音播报导航信息。
3 系统实现
3.1地图显示
系统主界面包括地图显示和添加起点、终点、途经点功能,主界面实现过程如下。
(1)注册和获取密钥:通过百度地图开放平台网站申请百度地图开发密钥。应用类型选择Android SDK,输入发布版SHA1和包名后,自动生成开发密钥[7]。
(2)配置清单文件:新建工程,在清单文件l中配置申请的开发密钥,并添加定位、导航相关权限配置和定位服务配置。
(3)添加SDK:从百度地图上下载SDK,本文需要用到的SDK,包括基础定位、基础地图、检索功能、驾车导航。解压SDK,将相关jar包添加到工程APP的libs目录下;在main目录下创建文件夹jniLibs,将下载文件的armeabi文件夹复制到这个目录下。
(4)主界面的布局文件:主界面中添加百度地图控件和导航点设置的子布局,使用ListView显示起点和动态添加的多个途经点的位置,每添加一个途经点,ListView动态添加一行。ListView下面添加线性布局,点击可以添加中间点;最下面也是一个线性布局,用于设置终点位置。
(5)新建Application:在Application的onCreate 方法中,初始化SDK引用的Context全局变量SDK Initializer.initialize(this),主界面即可正常显示[8]。
3.2定位功能
移动定位获取用户当前位置坐标,作为导航路
第6期                            刘丹:基于百度地图的多点导航系统实现361
线起点标注在地图上。定位功能实现可以分为两步:获取当前位置的经度、纬度;在地图的当前位置上添加覆盖物。
3.2.1 获取经纬度
主线程中开启定位图层,初始化LocationClient 类;使用LocationClientOption类配置定位sdk参数,如定位模式、返回经纬度坐标类型、单次定位还是连续定位等,定位SDK获得的经纬度想要直接在百度地图上标注,坐标类型应选择“BD09ll”;注册LocationClient的BDAbstractLocation Listener,开启定位功能后,会回调BDAbstract LocationListener接口的onReceiveLocation(BD Location location)方法,location. getLatitude()获取当前位置的纬度值,Longitude()获取当前位置的经度值。
3.2.2 添加覆盖物
在地图上添加Marker覆盖物显示定位结果。定位的经度值和纬度值封装成地理坐标点LatLng对象;创建覆盖物Marker,Marker的位置即LatLng 指定的位置,使用MarkerOptions设置Marker的样式后,再通过baiduMap.addOverlays()将Marker覆盖物添加到地图上。
3.3地理编码
地理编码分为正向地理编码和反向地理编码。正向地理编码服务实现了将地址或地名描述转换为地球表面上地址坐标的功能[8]。用户在主界面的输入框中输入途经点或者终点地名,当输入框失去焦点时,调用:
.
city(cityName)
.address(address))
触发地理编码功能,其中cityName表示输入地址所在的城市名,address为用户输入框中输入的地址。mSearch设置地理编码检索OnGetGeoCoderResultListener,一旦触发地理编码,则回调接口的onGetGeoCodeResult (GeoCodeResult result)方法,参数result可获取用户输入地址的经度和纬度。将每个地址的经度、纬度、地名封装成自定义的LatLngAddress类对象,多个地址添加到List集合latLngAddress,为后续的多点导航功能服务。
3.4多点导航
多点导航功能实现包括导航初始化;根据起点、途经点和终点进行路线规划;路线规划成功后,开始导航,实时显示导航信息;导航过程中的语音播报功能实现。
3.4.1 导航初始化
使用百度地图导航前,需要先进行初始化,代码如下:
INaviInitListener接口接收初始化的返回结果,在初始化成功的回调方法initSuccess()继续初始化TTS,TTS负责导航的语音播报功能,本文使用的是内置TTS初始化。
3.4.2 路线规划
路线规划时,使用算路节点BNRoutePlanNode 表示导航路线中经过的每个点(包括起点、多个途经点和终点)。
BNRoutePlanNode node = new BNRoutePlan (i).getLongitude(),
<(i).getLatitude(),(i).getAddressName() ,null,coType);
遍历取出导航地址集合latLngAddresses中每个导航地址LatLngAddress对象的经度值、纬度值、节点名,赋值给算路节点BNRoutePlanNode对象,一个导航地址对象对应一个算路节点对象。所有的算路节点BNRoutePlanNode对象添加到List< BNRoutePlanNode>集合routePlanNodes。
将算路节点集合routePlanNodes传给RoutePlanManager().routepla nToNavi(routePlanNodes,preference,extBundle, handler)方法,该方法用于路线规划并通知发起导航。其中,handler接收路线规划的结果消息,当收到的消息为IBNRoutePlanManager.MSG_NA VI_ ROUTE_PLAN_TO_NA VI时,路线规划成功,发起导航并进入GuideActivity页面。
3.4.3 导航过程
GuideActivity中创建诱导View,将View加入布局文件中即可显示导航过程。调用RouteGuideManager(). setRouteGuideEventListener()设置导航过程监听事件。导航过程中,在接口IRouteGuide EventListener的回调方法onCommonEventCall()中调用方法Instance().handleNavi Event(what, arg1, arg2, bundle)处理导航事件。其中,参数what接收实时路况返回的消息;参数bundle 中封装了多种导航参数,如当前路名、当前驾驶速度、到达时间、剩余距离等。根据不同的what,从
362                                    辽宁工业大学学报(自然科学版)                                第39卷
bundle中取出需要的导航参数,显示在自定义的对话框上。如当what收到的消息为更新剩余距离BNaviCommonParams.MessageType.EVENT_REMA IN_DISTANCE_UPDATE时,取出bundle中的剩余距离,再更新对话框的剩余距离TextView的内容。导航结束后,弹出提示,退出导航页面。
3.4.4 语音播报
导航过程中,需要开启语音播报功能。百度地图SDK内置TTS语音播报功能,百度导航支持两种TTS实现:内置TTS和外置TTS,本文使用的内置TTS。为了能正常进行语音播报,需要初始化TTS模块,初
始化内置TTS代码如下:TTSManager().initTTS (context,mSDCardPath,APP_FOLDER_NAME, "tts appid");初始化成功后,调用setOnTTSState ChangedListener(IBNTTSManager.IOnTTSPlayState ChangedListener listener)方法设置内置TTS播报状态同步回调监听事件,在开始语音播报时,回调IOnTTSPlayStateChangedListener 的onPlayStart()方法;播报错误时回调onPlayError()方法;播报结束时,回调onPlayEnd()方法。
4 系统运行效果测试
打开应用进入主界面,地图上展示定位结果,以蓝图标标注(图2)。点击“请添加途经点”,listview新增一个item,展示一个输入框(图3);输入途经点1的地址,在地图上添加途经点1的绿标注(图4);类似操作,添加途经点2(图5),依此类推,可以添加若干个途经点;图6展示输入终点地址信息,添加红标注。点击“开始导航”,进入导航路线规划界面(图7);语音播报界面如图8所示。
图2主界面图3点击添加途径点图4添加途经点1
图5添加途经点2图6添加终点图7路线规划界面图8语音导航界面
(下转第365页)
第6期                          冯嘉俊等:激光波长对单阶谐波增强的影响365
的值。根据图1得出的结论,单阶谐波强度的增强不仅来源于谐波辐射能量峰的叠加结构,而且与不同谐波之间的干涉减小现象有关。这里,采用短波长时P B强度要明显高于采用长波长时。因此,P A 和P B之间的干涉减小现象得到增强,这反而导致第500次单阶谐波增强比率的下降。
3结论
理论研究了激光波长对单阶谐波增强的影响。结果表明,单阶谐波增强比率会随着激光波长的减小而下降。理论分析表明,单阶谐波的增强不仅来源于谐波辐射能量峰上的折叠结构,而且与多重谐波辐射能量峰之间的干涉减小现象有关。
参考文献:
[1] Krausz F, Ivanov M. Attosecond physics[J]. Rev Mod Phys,
2009, 81(1): 163-234.
[2] Feng L Q, Chu T S. Generation of an isolated sub-40-as
pulse using two-color laser pulses: Combined chirp effects[J]. Phys Rev A, 2011, 84(5): 053853.
[3] Corkum P    B. Plasma perspective on strong field
multiphoton ionization[J]. Phys Rev Lett, 1993, 71(13): 1994-1997.
[4] Feng L Q, Chu T S. Nuclear signatures on the molecular
harmonic emission and the attosecond pulse generation[J].
J Chem Phys, 2012, 136(5): 054102.
[5] 刘航, 刘辉, 冯立强. 利用Ar+团簇延伸高次谐波频率及
强度[J]. 辽宁工业大学学报: 自然科学版, 2017, 37(5): 340-342.
[6] 高丽, 李建, 朱爱军, 等. 利用高振动态H2+增强谐波及
脉冲强度[J]. 辽宁工业大学学报: 自然科学版, 2018, 38(2): 98-100.
[7] 冯立强. 利用高频谐波场增强阿秒脉冲的强度[J]. 辽宁
工业大学学报: 自然科学版, 2016, 36(1): 60-66.
[8] Feng L Q.Molecular harmonic extension and enhancement
from H2+ ions in the presence of spatially inhomogeneous fields[J]. Phys Rev A, 2015, 92(5): 053832.
[9]刘航, 刘辉, 冯立强. H2+在空间非均匀场下的电离解离
导航地图标注
行为[J]. 辽宁工业大学学报: 自然科学版, 2017, 37(1): 44-47.
[10] Wei P F, Miao J, Zeng Z N, et al. Selective enhancement of
a single harmonic emission in a driving laser field with
subcycle waveform control[J]. Phys Rev Lett, 2013, 110(23): 233903.
[11] Li Y, Feng L Q, Qiao Y. Improvement of high-order
harmonic generation via controlling multiple acceleration- recombination process[J]. Z Naturforsch A, 2019, 74(7): 561-571.
[12] Liu H, Feng L Q. Waveform control in selective
enhancement of single-order harmonic[J]. Laser Phys, 2019, 29(6): 065401.
[13] 冯立强. 核运动对H2+谐波辐射的影响[J]. 辽宁工业大
学学报: 自然科学版, 2017, 37(6): 355-357.
责任编校:孙  林
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(上接第362页)
5 结束语
本文基于Android平台,使用百度地图API设计并实现了多点导航系统,该系统包括地图显示、实时定位、地理编码和多点导航等功能。系统主界面使用ListView显示添加的多个途经点信息,操作方便,简单易用;后台修改了百度地图提供的接口,自行设计的接口扩展性较好,能支持0或多个途经点的设置,并根据起点、终点和多个途经点,规划最优路线,实现导航功能,为出行需要途经多个点的用户提供了方便,具有较强的实用价值。
参考文献:
[1] 黄宏涛. 基于LBS的旅游景区服务APP研究[J]. 科学技
术创新, 2017(36): 83-84. [2] 南京娅. 基于Android的家电智能控制系统的研究[D].
天津: 河北工业大学, 2015.
[3] 陈诚. 基于Android系统的畅跑助理软件的设计与实现
[D]. 成都: 电子科技大学, 2015.
[4] 高俊亚. 基于Android的智能停车诱导系统设计与实现
[D]. 南京: 南京邮电大学, 2017.
[5] 崔伯龙. 基于轨迹挖掘与特征向量融合的好友推荐研究
[D]. 杭州: 杭州电子科技大学, 2017.
[6] 李嘉诚. 室内WI-FI基于余弦匹配算法的研究与实现[J].
物流工程与管理, 2016, 38(1): 70-72.
[7] 董明华. 基于百度地图的周边检索方案研究[J]. 电脑知
识与技术, 2018, 14(27): 185-187.
[8] 王东琴. 基于Android的电动汽车充电桩移动平台客户
端开发[D]. 合肥: 合肥工业大学, 2017.
[9] 王博远, 李炳烈, 罗乐, 等. 基于GIS技术的地址转换经
纬度程序设计[J]. 电脑编程技巧与维护, 2018(2): 154-156. 责任编校:孙  林