2020年第15期
信息与电脑
China Computer & Communication
软件开发与应用
基于百度地图API的智能停车SDK的设计与实现
邱龙龙1 牛 强1 飞2 张 军1
(1.东华理工大学 信息工程学院,江西 南昌 330013;
2.东华理工大学 软件学院,江西 南昌 330013)
摘 要:在经济日益发达的今天,越来越多的人都拥有私家车,这使得公众的出行更加方便。但是,随着私家车的数量日益增加,也带来了不少新问题。其中,停车就是一个非常典型的问题。车主将车开到目的地后,往往会遇到怎么到附近有空车位的问题。为此,基于Android端设计开发了这款智能停车推荐SDK,它包含定位、路径规划、停车场数据查询等一些基本功能。其中,停车场的数据正是由桌面端的绘
图工具绘制保存,并上传到数据库中的。使用这款SDK 可以很方便地在Android端开发出适合这类用户使用的APP。
关键词:智能停车;SDK;Android
中图分类号:U495;TP311.52  文献标识码:A  文章编号:1003-9767(2020)15-091-03
Design and Implementation of Intelligent Parking SDK Based on Baidu Maps API Qiu Longlong1, Niu Qiang1, Chen Yunfei2, Zhang Jun1
(1. School of Information Engineering, East China University of Technology, Nanchang Jiangxi 330013, China;
2. School of Software, East China University of Technology, Nanchang Jiangxi 330013, China)
Abstract: In today's increasingly developed economy, more and more people own private cars, which makes the travel of the public more convenient. But with the increasing number of private cars, it also brings a lot of new problems. Among them, parking is a very typical problem. After driving the car to the destination, the owner often encounters the problem how to find a parking lot with empty spaces nearby. To this end, we designed and developed this smart parking recommendation SDK based on th
e Android side, which includes some basic functions such as positioning, path planning, and parking lot data query. Among them, the parking lot data is drawn and saved by the drawing tool on the desktop and uploaded to the database. Using this SDK, it is easy to develop an App suitable for this type of user on the Android side.
Key words: smart parking; SDK; Android
0 引言
随着私家车的数量增长到一定程度,人们出行时选择自驾反而会有诸多麻烦。其中,查附近是否有空闲停车位是一个令人头疼的问题。因此,有必要设计一款可以查询附近停车场信息的移动端APP。为了方便实现室内停车功能,本文着重介绍一款基于百度地图API的封装了停车场地图以及导航功能SDK的设计与实现。
1 智能停车SDK概述
本文首先介绍了该智能停车SDK的功能及实现技术。该SDK主要包含显示地图、定位、导航几大模块。其中,显示地图主要利用百度地图提供的离线SDK;定位功能则使用Android官方提供的定位API;导航功能包括停车场室外导航和室内导航。室外导航利用百度地图提供的相关API实现,室内导航则是基于迪杰斯特拉算法。
另外,本SDK还提供了一些设置地图外观的接口,这可以让开发者自主设计地图的外观。在百度地图的SDK中,包含了地图的监听事件,如点击事件、移动事件等,这些事件也被封装在这款智能停车SDK中。上述设计可以让开发者根据需求定制出符合实际应用需求的功能。
2 显示地图与定位
这部分主要使用了百度地图提供的API和SDK,可以在Android端显示地图和定位标记[1-2]。首先,需要从百度
作者简介:邱龙龙(1997—),男,安徽安庆人,硕士研究生。研究方向:人工智能。
2020年第15期
信息与电脑
China Computer & Communication 软件开发与应用地图开发者的申请自己的AppKey ,并将其正确部署到Anddroid 工程中;再从下载官方提供的SDK 包,将其正确导入Android 工程中。2.1 显示地图完成了上述步骤后,就可以显示地图了。该SDK 对百度地图的离线SDK 作了进一步封装,使其能够更加符合当前的应用场景。具体将该SDK 导入到相应的Android 工程代码如下:
&le.smarkparking.ParkingMap android:id="@+id/map"android:layout_width="match_parent"android:layout_height="match_parent" />当包含SDK 控件的Activity (通常为主活动)被创建时,可以首先通过id 到这个地图控件,并设置地图id 。与百度地图APP 一样,也可以通过手指操作来放大或缩小地图。当地图放大到一定级别时,地图上就会自动显示附近的停车场,这些停车场的数据都是由桌面端的绘图软件绘制完成后再将其与位置信息一同保存到数据库中,这样就可以从Android 端访问数据库获取这些信息,并在相应的位置加标记。2.2 地图定位原生的Android SDK 给开发者提供了多种地理定位方式,考虑到定位精度和速度等多方面的因素,此处采用的是GPS 定位[3]。首先,需要获得一个位置管理器对象LocationManager 。LocationManager 提供的位置提供器默认为PASSIVE_PROVIDER ,它是一个特殊的位置提供器,用来被动接收位置信息,这个位置信息是由其他服务提供的位置信息。此处,使用较为常见的GPS 定位,GPS 定位的优点是定位精度高,但是比较耗电。需要注意的是,Android 定位必须开启相应的服务才能正常使用,主要包括ACCESS_FINE_LOCATION 、ACCESS_COARSE_LOCATION 以及INTERNET 网络服务等。当获取了LocationManager 对象并进行了相应的配置后,就可以使用GPS 获取定位信息(主要包括经纬度和海拔等信息)。通过LocationManager 获取到GPS 定位提供器GPSProvider 对象,通过这个GPSProvider 对象来获取GPS 定位信息,把这些信息存储到Location 类的对象中[4-5]。3 路径规划详解本文将详细讨论路径规划的问题,也包括室外路径规划。室外路径规划部分使用百度地图官方提供的API 实现。停车场内部路径规划主要用到迪杰斯特拉(Dijkstra )算法。3.1 室外路径规
划室外路径规划主要是指车主从当前位置到目的停车场入口的这一段路程的规划与导航,主要使用了百度地图官方提供的API [4]。
api接口和sdk接口的区别首先通过前文介绍的定位功能获取车主当前的定位,这里只需要经纬度信息即可,然后再选择一个附近的停车场作
为终点位置,并将起点和终点的经纬度信息作为参数传入百
度地图提供的相关API 中进行路径规划。为了调用方便,将这些百度地图官方提供的API 封装到智能停车推荐SDK 中。通过该SDK ,开发者只需要进行简单编码就可以实现路径规划操作。通过调用智能停车SDK 实现路径规划时,首先需要通过enableRoutePlanning 来打开路径规划功能,再调用
setPathEnd 设置终点车位的下标就可以进行路径规划。
3.2 停车场室内路径规划
虽然百度地图也提供了室内的路径规划,但是它无法准确地获取停车场内部的车位和路径信息。因此,停车场室内路径规划需要访问系统数据库中的停车场信息,并根据算法规划出一条从停车场入口到指定空车位的最优(最短)路径。在图论中,求有权图中两个顶点之间的最短路径时,Dijkstra 算法可以快速求解单源最短路径。此处将使用该算法来解决停车场内的路径规划问题。所谓单源,是指指定有
权图中的一个顶点作为起点,求出有权图中其他顶点到该起
点的最短路径。
3.2.1 Dijkstra 算法详解
迪杰斯特拉算法(Dijkstra )是由荷兰计算机科学家迪杰
斯特拉于1959年提出的,主要用于解决有权图中的最短路径问题,也即从一个顶点到其余各顶点的最短路径问题。迪杰斯特拉算法的主要特点是从起始点开始,采用贪心算法的策略,每次遍历到离起始点距离最近且未访问过顶点的邻接节点,直到扩展到终点为止。
算法思想:设G=(V,E)是一个带权有向图,把图中顶点
集合V 分成两组:第一组为已求出最短路径的顶点集合(用S 表示,初始时S 中只有一个源点,以后每求得一条最短路径,就加入集合S 中,直到全部顶点都加入S 中,算法结束);第二组为其余未确定最短路径的顶点集合(用U 表示),按最短路径长度的递增次序依次把第二组的顶点加入S 中。在
加入的过程中,总保持从源点v 到S 中各顶点的最短路径长度不大于从源点v 到U 中任何顶点的最短路径长度。此外,每个顶点对应一个距离,S 中顶点的距离就是从v 到此顶点的最短路径长度。U 中的顶点距离,是从源点v 到此顶点只
包括S 中的顶点为中间顶点的当前最短路径长度。下面是该算法的步骤:
(1)初始时,S 只包含起点s ;U 包含除s 外的其他顶点,
且U 中顶点的距离为“起点s 到该顶点的距离”(例如,U
中顶点v 的距离为(s,v)的长度,然后s 和v 不相邻,则v 的
距离为∞)。
(2)从U 中选出“距离最短的顶点k ”,并将顶点k
2020年第15期
信息与电脑
China Computer & Communication
软件开发与应用
加入S中;同时,从U中移除顶点k。
(3)更新U中各个顶点到起点s的距离。之所以更新U中顶点的距离,是由于上一步中确定了k是求出最短路径的顶点,从而可以利用k来更新其他顶点的距离;例如,(s,v)的距离可能大于(s,k)+(k,v)的距离。
(4)重复步骤(2)和(3),直到遍历完所有顶点。
3.2.2 将Dijkstra算法应用到路径规划
为了应用Dijkstra算法实现路径规划,需要构建停车场室内地图。在停车场室内绘制地图的过程中,路径使用一系列点来标记存储,而停车位也用一个个的点表示。所以只需要将这些点看作有权图的顶点,将点之间的距离看成有权图边的权值,将停车场入口当作源点。
4 地图监听事件以及个性化地图
4.1 地图的监听事件
表1所示的方法实质上都是当触发了某个事件时,就会自动调用相应的回调方法来响应该事件。每个方法的参数都是一个线程,也即地图事件的响应是在子线程中完成的。例如,当点击地图时,就会触发点击事件,此时会自动调用作为参数传入相应监听事件函数中的子线程对象,并将点击相关的信息传入这个子线程中,比如点击位置等信息。
表1 常见的几种地图监听事件
函数名说明void setParkingMapOnClickListener(Runnable)设置点击事件
void setParkingMapOnMoveListener(Runnable)设置移动事件void onLoadFinished(Runnable)设置数据加载完成回调事件void setOnUpdateParkListener(Runnable)设置车位更新事件4.2 个性化地图
为了使停车场室内的地图看起来更加美观,在该SDK中封装了一系列的API函数,包括setLineColor、setTextColor、setRoadColor、setTextWidth、setLineWidth、setRoadWidth和setTextSize等函数,用来让用户自定义定制地图的外观。
5 结 语
本文将百度地图开发者官方提供的显示地图、地点检索、室外导航、搜索附近等API,以及停车场绘图数据的调用进行了封装,还通过迪杰斯特拉算法实现了室内导航功能的API。该SDK的实现可以让Android开发者更加方便地开发出智能停车应用系统。
参考文献
[1]王建勋,王海龙,毕超,等.基于百度地图API的地震处置应用研究[J].电脑与信息技术,2020,28(2):25-28.
[2]赵仕林,秦雅琴,马玲玲.基于百度地图实时路况的昆明市道路拥堵研究[J].物流科技,2020,43(1):111-114.
[3]陈玲.基于百度地图API和Android的手机端校园消息发布系统设计与实现——以南京晓庄学院为例[J].南京晓庄学院学报,2019,35(6):90-97.
[4]仉新,张禹,苏晓明.移动机器人自主定位和导航系统设计与实现[J].机床与液压,2020,48(10):88-91.
[5]Zhang Bo,Hu De Ji.Research on the construction and simulation of PO-Dijkstra algorithm model in parallel network of multicore platform[J].Springer International Publishing,2020,2020(1):83.