欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

百度地图js实时播放轨迹 百度地图实时播放轨迹 

程序员文章站 2024-02-25 08:46:16
...
功能:每个10秒获取车辆的最新位置点,然后地图上画出点和线路,两点之前是用规划路线,而不是直接连线,并且移动点时,根据位置是否在视野范围内,重新设置地图的视野,下面是代码
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
	body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑";}
</style>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你的ak"></script>
<title>单个标注点沿直线的轨迹运动</title>
</head>
<body>
	<div id="allmap"></div>
</body>
</html>
<script type="text/javascript">
// 百度地图API功能
var map=new BMap.Map("allmap");
var startPoint={lon:116.404,lat:39.915};
map.centerAndZoom(new BMap.Point(startPoint.lon, startPoint.lat), 15);
map.enableScrollWheelZoom(true);

var myIcon=new BMap.Icon("http://lbsyun.baidu.com/jsdemo/img/Mario.png", new BMap.Size(32, 70), { //小车图片
	//offset: new BMap.Size(0, -5),    //相当于CSS精灵
	imageOffset: new BMap.Size(0, 0)//图片的偏移量。为了是图片底部中心对准坐标点。
});
var carMk=new BMap.Marker(new BMap.Point(startPoint.lon, startPoint.lat),{icon:myIcon});
map.addOverlay(carMk);

function renderLastPoint(point){
	// 实例化一个驾车导航用来生成路线
	var driving=new BMap.DrivingRoute(map);
	var sp=new BMap.Point(startPoint.lon, startPoint.lat);
	var ep=new BMap.Point(point.lon, point.lat);
	driving.search(sp, ep);
	//设置新的开始点
	startPoint=point;
	
	driving.setSearchCompleteCallback(function(res){
		//console.info(res);
		if(driving.getStatus()==BMAP_STATUS_SUCCESS){
			//获取两点之间的实际点组
            var plan=res.getPlan(0);
            var arrPois=[];
            for(var j=0;j<plan.getNumRoutes();j++){
                var route=plan.getRoute(j);
                arrPois=arrPois.concat(route.getPath());
            }
			//把实际点加到地图上
            //根据点组的长度画线和画点
			drawMap(arrPois);
		}
	});
}

var t30=10*1000;

function drawMap(pointArr){
	if(pointArr.length==0){
		return;
	}
	var t=t30;//30秒
	//计算每次执行的时间
	var at=t/pointArr.length;
	var i=0;
	
	var f=function(){
		if((i+1)>(pointArr.length-1)){
			return;
		}
		var sp=pointArr[i];
		var ep=pointArr[i+1];
		
		//地图画线
		var polyline=new BMap.Polyline([sp,ep],{strokeColor:"blue", strokeWeight:2, strokeOpacity:0.5});//创建折线
		map.addOverlay(polyline);
		//移动点
		carMk.setPosition(ep);
		var bound=map.getBounds();//地图可视区域
		if(bound.containsPoint(ep)==false){
			map.panTo(ep);
		}
		
		i++;
		setTimeout(function(){
			f();
		},at);
	};
	
	f();
	
}

//模拟业务
var ii=0;
var _task=setInterval(function(){
	var lastPoint={lon:116.424374+ii*0.01,lat:39.914668};//终点
	if(lastPoint.lon==startPoint.lon&&lastPoint.lat==startPoint.lat){
		//相同点,则不需要画图
		return;
	}
	ii++;
	
	renderLastPoint(lastPoint);
	
},t30);

</script>