1.介绍
在线地图导航工具在现代社会中,越来越受欢迎,成为了人们生活中必不可少的工具。在这篇文章中,我们将利用JavaScript和第三方库来构建一个在线地图导航工具,支持实时路线规划和导航。
2.准备工作
2.1 获取地图API密钥
我们将使用百度地图API提供的服务来构建我们的在线地图导航工具。首先,我们需要在百度地图开放平台中申请一个API密钥。
在申请密钥过程中,需要选择所需要的API服务,并且需要提供注册时所使用的IP地址或域名。申请成功后,系统将会分配一个AK(API Key),我们需要在代码中使用这个AK来访问地图API服务。
2.2 引入百度地图JavaScript API库
在使用百度地图API服务前,我们需要先引入百度地图JavaScript API库。
<script src="http://api.map.baidu.com/api?v=3.0&ak=您的密钥" type="text/javascript"></script>
其中,v表示API版本,ak表示API密钥。
2.3 引入第三方库
为了更加方便地操作地图和进行路线规划,我们将引入几个常用的第三方库:
jQuery:JavaScript库,用于简化HTML文档遍历、事件处理、动画等操作。
Bootstrap:HTML、CSS和JavaScript的开源框架,提供响应式布局、网格系统等功能。
ECharts:百度开发的数据可视化库,支持图表、地图等多种可视化方式。
<link rel="stylesheet" type="text/css" href="https://cdn.bootcdn.net/ajax/libs/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/echarts/4.7.0/echarts.min.js"></script>
3.实现步骤
3.1 显示地图
首先,我们需要在HTML中定义一个空的地图容器,并在JavaScript中设置它的样式和属性。
<div id="allmap" style="height: 100%;width:100%;"></div>
<script type="text/javascript">
var map = new BMap.Map("allmap"); // 创建Map实例
map.centerAndZoom(new BMap.Point(116.404, 39.915), 11); // 初始化地图,设置中心点坐标和地图级别
map.enableScrollWheelZoom(true); // 开启鼠标滚轮缩放
</script>
其中,BMap是百度地图API提供的命名空间,Point表示一个地理坐标点。
在以上代码中,我们创建了一个地图实例,并设置了地图的初始级别和中心点,使之处于北京市附近。同时,我们开启了鼠标滚轮缩放功能。
3.2 实现路线规划
3.2.1 配置路线规划
百度地图API提供了一个RoutePlan类,用于配置路线规划的相关参数。
var route = new BMap.RoutePlan("allmap", {
renderOptions: {map: map, panel: "route-result-panel"},
policy: 0
});
其中,renderOptions用于指定路线规划所使用的地图实例和显示路线的面板,policy用于指定路线规划的策略。
策略policy有以下几种取值:
BMAP_DRIVING_POLICY_LEAST_TIME:最少时间优先
BMAP_DRIVING_POLICY_LEAST_DISTANCE:最短路径优先
BMAP_DRIVING_POLICY_AVOID_HIGHWAYS:避开高速
3.2.2 触发路线规划
在路线规划配置完成之后,我们需要根据用户输入的起点和终点信息,触发路线规划。
route.search("北京市海淀区上地十街10号", "北京市海淀区中关村南大街27号");
其中,search方法用于启动路线规划,第一个参数为起点地址或坐标,第二个参数为终点地址或坐标。
3.2.3 显示路线结果
在路线规划完成后,我们需要将路线结果显示在地图上。
route.setSearchCompleteCallback(function(data){
var pts = data.getPlan(0).getRoute(0).getPath();
var polyline = new BMap.Polyline(pts);
map.addOverlay(polyline);
map.panTo(pts[0]);
});
其中,setSearchCompleteCallback方法用于设置路线规划完成后的回调函数。在回调函数中,我们获取路线的坐标点数组,并创建一个Polyline对象,将它添加到地图中,最后将地图移动到起点位置。
3.3 实现导航功能
3.3.1 获取当前位置
为了实现导航功能,我们需要获取设备的当前位置。百度地图API提供了一个Geolocation类,用于定位设备的位置。
var geolocation = new BMap.Geolocation();
geolocation.getCurrentPosition(function(r){
if(this.getStatus() == BMAP_STATUS_SUCCESS){
var point = new BMap.Point(r.point.lng, r.point.lat);
var marker = new BMap.Marker(point);
map.addOverlay(marker);
map.panTo(point);
}
});
其中,getCurrentPosition方法用于获取当前设备的位置信息,getStatus方法用于获取位置获取状态,返回值为BMAP_STATUS_SUCCESS表示获取成功。
在获取到位置信息后,我们创建一个Marker对象,并将它添加到地图中,并将地图移动到当前位置。
3.3.2 触发导航功能
在获取位置信息之后,我们需要将当前位置和终点位置进行导航。
var transit = new BMap.TransitRoute(map, {
renderOptions: {map: map, panel: "route-result-panel"}
});
transit.search(point, "北京市海淀区中关村南大街27号");
其中,TransitRoute类用于公共交通导航,search方法用于触发导航功能,第一个参数为起点坐标,第二个参数为终点地址或坐标。
3.3.3 显示导航结果
在导航完成之后,我们需要将导航结果显示在地图上。
transit.setSearchCompleteCallback(function(results){
var plan = results.getPlan(0);
var route = plan.getRoute(0);
var steps = route.getSteps();
var polyline = new BMap.Polyline([], {strokeColor: "blue", strokeWeight: 6, strokeOpacity: 0.5});
for(var i = 0; i < steps.length; i++){
var path = steps[i].getPath();
polyline.getPath().push(path[path.length - 1]);
if(i < steps.length - 1){
var walkPath = steps[i].getPolyline();
polyline.getPath().push(walkPath.getPath()[0]);
}
}
map.addOverlay(polyline);
map.setViewport(polyline.getPath());
});
其中,setSearchCompleteCallback方法用于设置导航完成后的回调函数。在回调函数中,我们获取导航结果的坐标点数组,并创建一个Polyline对象,并将它添加到地图中,并将地图移动到包含所有坐标点的矩形区域内。
4.结论
通过以上步骤,在JavaScript的帮助下,我们可以轻松构建一个在线地图导航工具,支持实时路线规划和导航。
在开发过程中,我们使用了百度地图API提供的服务和第三方库,大大简化了开发流程。同时,我们还涉及到了地图显示、路线规划和导航等多个方面,学到了许多新知识。
感谢您的耐心阅读!