因为公司有一些特殊的需求,前几天在做上一个上一个项目的时候,用到了谷歌地图,路径回放这个功能再百度地图和高德地图是有API直接可以使用的,奈何公司领导只让用谷歌地图,搜索发现网上并无多少相关文章,所以我把我在开发过程中遇到的问题记录下来,希望能够帮助大家。
第一个遇到问题就是,两点之间的路径如果已经实现,怎么能够让路径在点击一个按钮之后一点一点绘制出来。
我是通过谷歌内置的 Polyline 这个方法来实现的,假如在点击进入页面的时候两点之间的路线已经生成在页面中,说明有一个数组中存放了两点之间路径的详细地点,比如为 my_trip
则我们可以声明一个新的数组new_trips,设置一个时间循环,增加时间,每次循环则把my_trip中的数组多一个放入new_trips中来绘制路径,会产生一种路径在一点点绘制出来的效果,代码如下:
假设按钮为:<div class="top_btn1">开始回放</div>
//声明一个数组放入不同的颜色
var polyLineColor = new Array(["blue"], ["#00FF00"], ["#333333"]);
//声明一个计数变量
var trip_count = 1;
//声明两个变量用来存储时间循环
var begin;
//回放路径执行的函数
//点击开始回放按钮
$('.top_btn1').on('click', function() {
if ($('.top_btn1').text() == '开始回放') {
//时间循环控制速度,go函数是绿色路径的绘制,200为一秒五次,可以使用一个变量来控制速度
begin = setInterval(go, 200);
$('.top_btn1').text('暂停回放');
} else {
//暂定时间循环
clearInterval(begin);
$('.top_btn1').text('开始回放');
}
});
//根据计数当前进度截取my_trip数组
let new_trips = my_trip.slice(0, trip_count );
//画出回放(绿色)路径
flightPath = new google.maps.Polyline({ //创建线性叠加层对象
path: myTrips, //路径
strokeColor: polyLineColor[1], //线条颜色
strokeOpacity: 0.8, //线条透明度
strokeWeight: 3, //线条宽度
});
flightPath.setMap(map);
//进度加一
trip_count++;
}
但是绘制路径的时候没有方向,效果不是太好,若有加剪头的需求,请看:谷歌地图路径回放动画的实现(二)
另外我建了一个公众号,会不时分享前端的一些技术,或者遇到的难题和解决办法,欢迎大家关注。
搜索:钱端工程师 或 Money-end-engineer