定义marker平滑移动
基本的思路就是将两个坐标点之间平分为n个坐标,然后一次一次setPosition就可以了,按照我之前的做法,定义一个定时函数,移除标注,添加标注,那样做,思路是对的 但是明显看到小车在跳动,后面参照uber的mapbox,添加一个动画,基本就实现了,引用一个turf.min.js,下载地址turn.min.js,具体代码如下
var line = turf.lineString([[startPoint.lng, startPoint.lat],[endPoint.lng,endPoint.lat]]); // 两点连线
var distance = turf.distance(turf.point([startPoint.lng, startPoint.lat]), [endPoint.lng,endPoint.lat], {'units': 'kilometers'}); // 计算两点距离
var steps = 1000; // 平滑步长
var arc = []; // 平滑轨迹
for (var i = 0; i < distance; i += distance/steps) { // 插值取点
var segment = turf.along(line, i, {'units': 'kilometers'});
arc.push(segment.geometry.coordinates);
}
var start = null;
//调用动画
function animate(timestamp){
if(!start){
start = timestamp;
}
var progress = timestamp - start;
if (progress < 1000) {
var idx = Math.floor(progress / 1000 * arc.length);
if(idx >= 0 && idx < arc.length){
var point1 = new BMap.Point(arc[idx][0], arc[idx][1]);
marker.setPosition(point1);
}
window.requestAnimationFrame(animate);
}
}