使用百度地图API实现轨迹回放

最近项目需要实现路线的轨迹回放功能,苦于对百度api不熟,一时想不到用什么方法实现回放,看到了网上有人分享的一个很简单例子,一下子清晰很多,总结了下,根据这个就可以实现很复杂的回放功能啦。

 

调用百度地图API实现路线的轨迹回放功能其实很简单,只要搞懂以下几点即可:

 

1.需要用Polyline方法先绘制好路线图

 

2.用Marker添加标注点

 

3.关键一步,通过结合定时器,使用Marker创建的标注点实例的setPosition改变标注点位置,实现播放功能

 

代码分享,直接复制即可使用

<!DOCTYPE html>  
<html>  
<head>  
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
<title>Track</title>  
<style type="text/css">  
    html{height:100%}  
    body{height:100%;margin:0px;padding:0px}  
    #controller{width:100%; border-bottom:3px outset; height:30px; filter:alpha(Opacity=100); -moz-opacity:1; opacity:1; z-index:10000; background-color:lightblue;}  
    #container{height:100%}  
</style>    
<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.5&ak=D2b4558ebed15e52558c6a766c35ee73"></script>  
<script type="text/javascript">  
//获取所有点的坐标  
var points = [  
    new BMap.Point(114.00100, 22.550000), new BMap.Point(114.00130, 22.550000),  
    new BMap.Point(114.00160, 22.550000), new BMap.Point(114.00200, 22.550000),  
    new BMap.Point(114.00300, 22.550500), new BMap.Point(114.00400, 22.550000),  
    new BMap.Point(114.00500, 22.550000), new BMap.Point(114.00505, 22.549800),  
    new BMap.Point(114.00510, 22.550000), new BMap.Point(114.00515, 22.550000),  
    new BMap.Point(114.00525, 22.550400), new BMap.Point(114.00537, 22.549500)  
];  
  
var map;   //百度地图对象  
var car;   //汽车图标  
var label; //信息标签  
var centerPoint;  
  
var timer;     //定时器  
var index = 0; //记录播放到第几个point  
  
var followChk, playBtn, pauseBtn, resetBtn; //几个控制按钮  
  
function init() {  
    followChk = document.getElementById("follow");  
    playBtn = document.getElementById("play");  
    pauseBtn = document.getElementById("pause");  
    resetBtn = document.getElementById("reset");  
  
    //初始化地图,选取第一个点为起始点  
    map = new BMap.Map("container");  
    map.centerAndZoom(points[0], 15);  
    map.enableScrollWheelZoom();  
    map.addControl(new BMap.NavigationControl());  
    map.addControl(new BMap.ScaleControl());  
    map.addControl(new BMap.OverviewMapControl({isOpen: true}));  
      
    //通过DrivingRoute获取一条路线的point  
    var driving = new BMap.DrivingRoute(map);  
    driving.search(new BMap.Point(114.00100, 22.550000), new BMap.Point(113.95100, 22.550000));  
    driving.setSearchCompleteCallback(function() {  
        //得到路线上的所有point  
        points = driving.getResults().getPlan(0).getRoute(0).getPath();  
        //画面移动到起点和终点的中间  
        centerPoint = new BMap.Point((points[0].lng + points[points.length - 1].lng) / 2, (points[0].lat + points[points.length - 1].lat) / 2);  
        map.panTo(centerPoint);  
        //连接所有点  
        map.addOverlay(new BMap.Polyline(points, {strokeColor: "black", strokeWeight: 5, strokeOpacity: 1}));  
          
        //显示小车子  
        label = new BMap.Label("", {offset: new BMap.Size(-20, -20)});  
        car = new BMap.Marker(points[0]);  
        car.setLabel(label);  
        map.addOverlay(car);  
          
        //点亮操作按钮  
        playBtn.disabled = false;  
        resetBtn.disabled = false;  
    });  
}  
  
function play() {  
    playBtn.disabled = true;  
    pauseBtn.disabled = false;  
      
    var point = points[index];  
    if(index > 0) {  
        map.addOverlay(new BMap.Polyline([points[index - 1], point], {strokeColor: "red", strokeWeight: 1, strokeOpacity: 1}));  
    }  
    label.setContent("经度: " + point.lng + "<br>纬度: " + point.lat);  
    car.setPosition(point);  
    index++;  
    if(followChk.checked) {  
        map.panTo(point);  
    }  
    if(index < points.length) {  
        timer = window.setTimeout("play(" + index + ")", 200);  
    } else {  
        playBtn.disabled = true;  
        pauseBtn.disabled = true;  
        map.panTo(point);  
    }  
}  
  
function pause() {  
    playBtn.disabled = false;  
    pauseBtn.disabled = true;  
      
    if(timer) {  
        window.clearTimeout(timer);  
    }  
}  
  
function reset() {  
    followChk.checked = false;  
    playBtn.disabled = false;  
    pauseBtn.disabled = true;  
      
    if(timer) {  
        window.clearTimeout(timer);  
    }  
    index = 0;  
    car.setPosition(points[0]);  
    map.panTo(centerPoint);  
}  
</script>  
</head>    
     
<body onload="init();">    
    <div id="controller" align="center">  
        <input id="follow" type="checkbox"><span style="font-size:12px;">画面跟随</span></input>  
        <input id="play" type="button" value="播放" onclick="play();" disabled />  
        <input id="pause" type="button" value="暂停" onclick="pause();" disabled />  
        <input id="reset" type="button" value="重置" onclick="reset()" disabled />  
    </div>  
    <div id="container"></div>  
</body>    
</html>  

 

转载于:https://www.cnblogs.com/sq45711478/p/6537957.html

实现车辆轨迹回放,你需要先获取车辆行驶轨迹的数据,可以通过GPS或其他位置数据采集设备获取。接下来,你可以使用百度地图API提供的Polyline类来绘制轨迹线路,使用Marker类来标注车辆行驶的起点和终点,使用DrivingRoute类来绘制车辆行驶的路线。最后,你可以使用定时器或其他方式来控制车辆行驶过程中的速度和动画效果。 下面是一个使用百度地图API实现车辆轨迹回放的示例代码: ```javascript //创建地图实例 var map = new BMap.Map("container"); //设置地图中心点和缩放级别 map.centerAndZoom(new BMap.Point(116.404, 39.915), 15); //开启鼠标滚轮缩放 map.enableScrollWheelZoom(true); //定义轨迹数据 var path = [ {"lng":116.404,"lat":39.915}, {"lng":116.415,"lat":39.915}, {"lng":116.425,"lat":39.915}, {"lng":116.435,"lat":39.915}, {"lng":116.445,"lat":39.915}, {"lng":116.455,"lat":39.915}, {"lng":116.465,"lat":39.915}, {"lng":116.475,"lat":39.915}, {"lng":116.485,"lat":39.915}, {"lng":116.495,"lat":39.915} ]; //绘制轨迹线路 var polyline = new BMap.Polyline(path, {strokeColor:"blue", strokeWeight:6, strokeOpacity:0.5}); map.addOverlay(polyline); //标注起点和终点 var startMarker = new BMap.Marker(path[0]); var endMarker = new BMap.Marker(path[path.length-1]); map.addOverlay(startMarker); map.addOverlay(endMarker); //绘制车辆行驶路线 var driving = new BMap.DrivingRoute(map, {renderOptions:{map: map, autoViewport: true}}); driving.search(new BMap.Point(path[0].lng, path[0].lat), new BMap.Point(path[path.length-1].lng, path[path.length-1].lat)); //控制车辆行驶过程中的速度和动画效果 var index = 0; var timer = setInterval(function(){ if(index < path.length-1){ var p1 = new BMap.Point(path[index].lng, path[index].lat); var p2 = new BMap.Point(path[index+1].lng, path[index+1].lat); var angle = getAngle(p1, p2); startMarker.setRotation(angle); startMarker.setPosition(p2); index++; }else{ clearInterval(timer); } }, 1000); //计算两点之间的方向角度 function getAngle(p1, p2){ var dx = p2.lng - p1.lng; var dy = p2.lat - p1.lat; var angle = 0; if(dx == 0){ angle = dy > 0 ? 90 : 270; }else if(dy == 0){ angle = dx > 0 ? 0 : 180; }else{ angle = Math.atan(dy/dx) * 180 / Math.PI; if(dx < 0){ angle += 180; }else if(dy < 0){ angle += 360; } } return angle; } ``` 在上面的示例代码中,我们先定义了一个包含轨迹数据的数组path,然后创建了一个地图实例,并设置了地图中心点和缩放级别。接下来,我们使用Polyline类来绘制轨迹线路,使用Marker类来标注车辆行驶的起点和终点,使用DrivingRoute类来绘制车辆行驶的路线。最后,我们使用定时器来控制车辆行驶过程中的速度和动画效果。 需要注意的是,上面的示例代码中并没有使用实际的GPS或位置数据,而是直接使用了一个包含经纬度坐标的数组。在实际应用中,你需要根据实际情况获取真实的位置数据,并将其转换为经纬度坐标,然后再进行轨迹回放的绘制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值