百度地图API实现轨迹动态移动

编程入门 行业动态 更新时间:2024-10-09 12:34:50

百度地图API实现<a href=https://www.elefans.com/category/jswz/34/1767247.html style=轨迹动态移动"/>

百度地图API实现轨迹动态移动

先看实现效果

1,先实例化百度地图,再在此实例上进行操作

 var map = new BMap.Map("allmap");map.centerAndZoom(new BMap.Point(116.404, 36.015), 6);map.enableScrollWheelZoom(true); //启动滚轮放大缩小map.addControl(new BMap.NavigationControl()); // 添加平移缩放控件map.addControl(new BMap.ScaleControl()); // 添加比例尺控件map.addControl(new BMap.OverviewMapControl()); //添加缩略地图控件

2,实例化一个驾车对象DrivingRoute

 var driving = new BMap.DrivingRoute(map, {renderOptions:{map: map,    autoViewport: true}});// map.clearOverlays()driving.search(p1, p2);//自动获得一个从p1到p2的驾车实例,一般有多个方案,默认选取第一个方案

3,为驾车实例设置回调函数

 driving.setSearchCompleteCallback(function(){// map.clearOverlays()var pts = driving.getResults().getPlan(0).getRoute(0).getPath(); //通过驾车实例,获得一系列路径上所以点的组成的数组var paths = pts.length; //获得点的个数console.log(paths);var point = pts[0];//设置起始点为pointvar markers =  addMarker(point,index) //起始点上实例化一个标点var marks = addmarker(p2,start_name,end_name)//为终点添加信息框map.addOverlay(markers);

4,实现点和轨迹动画的关键。设置一个递归函数,i为轨迹中第i个点,在i与i+1之间添加线段,直到i等于终点,在整体上就相当于轨迹移动。

 var i=0;function dynamic(i){dynamicLine(pts[i].lng,pts[i].lat);//dynamicLine实现在i与i+1之间添加线段,下有参考代码if(i+10< paths){   //setTimeout(function(){i=i+10;//我这里是在i与i+10之间添加线段。markers.setPosition(pts[i]);   //特别注意一下迭代的顺序dynamic(i);},1);}}dynamic(i);

5,dynamicLine参考代码:

function dynamicLine(lng,lat){var lng =lng;  //100+getRandom(40);;var lat =lat;  //35+getRandom(30);var point = [lng,lat];var newLinePoints = [];var len;//addMarker(point);//增加对应该的轨迹点points.push(point);bPoints.push(new BMap.Point(lng,lat));len = points.length;newLinePoints = points.slice(len-2, len);//最后两个点用来画线。addLine(newLinePoints);//增加轨迹线//setZoom(bPoints);//setTimeout(dynamicLine, 1000);}function addLine(points){var linePoints = [],pointsLen = points.length,i,polyline;if(pointsLen == 0){return;}// 创建标注对象并添加到地图for(i = 0;i <pointsLen;i++){linePoints.push(new BMap.Point(points[i][0],points[i][1]));}var line = new BMap.Polyline(linePoints, {strokeColor:"red", strokeWeight:3, strokeOpacity:0.5}); //创建弧线对象map.addOverlay(line); //添加到地图中}

6,完整代码

function route(start,end,type,start_name,end_name){map.clearOverlays()var points = []//[[104.067588,30.58204],[116.412175,39.920125]];//原始点信息数组var bPoints = [];//百度化坐标数组。用于更新显示范                                                                     //当折线未加载完的时候,clear无法清除折线var p1 = start;var p2 =  end;//已经包装好的点index = -1;if (type=="自驾"||type=="乘车"){index=0;var driving = new BMap.DrivingRoute(map, {renderOptions:{map: map,    autoViewport: true}});// map.clearOverlays()driving.search(p1, p2);//driving.enableAutoViewport()driving.setSearchCompleteCallback(function(){// map.clearOverlays()var pts = driving.getResults().getPlan(0).getRoute(0).getPath(); //通过驾车实例,获得一系列点的数组var paths = pts.length; //获得有几个点console.log(paths);var point = pts[0];var markers =  addMarker(point,index)var marks = addmarker(p2,start_name,end_name)map.addOverlay(markers);var i=0;function dynamic(i){dynamicLine(pts[i].lng,pts[i].lat);if(i+10< paths){            //setTimeout(function(){i=i+10;markers.setPosition(pts[i]);   //特别注意一下迭代的顺序dynamic(i);},1);}}dynamic(i);})//driving回调函数结束}//if结束else if (type=="高铁"||type=="火车"){                      //无高铁,用火车代替index=1;var transit = new BMap.TransitRoute(map,{renderOptions: {map: map} ,onSearchComplete: function(result) {console.log("eee");if (transit.getStatus() == BMAP_STATUS_SUCCESS) {// 从结果对象中获取起点和终点信息// var plan = result.getPlan(0);// console.log(typeof(plan.getNumRoutes()));console.log("aaa");//plan.getNumRoutes()}}}
);
transit.search(p1,p2);
//transit.enableAutoViewport();
//成都104.067588,30.58204
//北京116.412175,39.920125
//郑州113.618085,34.758592
//重庆106.569621,29.573985
//上海121.48054,31.232965
//广州113.27875,23.137949
//var start= new BMap.Point(104.067588,39.58204);
//var end = new BMap.Point(116.412175,39.920125);
//transit.search(new BMap.Point(113.27875,23.137949), new BMap.Point(121.48054,31.232965));//console.log( transit.getStatus());
//var pt= transit.getResults().getPlan(0).getRoute(0).getPath();
// var phs = pt.length;
// console.log("aaaaaa");}else if (type=="飞机"){index=2;map.clearOverlays()var markers =  addMarker(end,index)map.addOverlay(markers);var points = [start,end];bPoints.push(start);bPoints.push(end);var curve = new BMapLib.CurveLine(points, {strokeColor:"blue", strokeWeight:3, strokeOpacity:0.5}); //创建弧线对象map.addOverlay(curve); //添加到地图中setZoom(bPoints);}else {index = 3;map.clearOverlays()var markers =  addMarker(end,index)map.addOverlay(markers);var points = [start,end];var line = new BMap.Polyline(points, {strokeColor:"yellow", strokeWeight:3, strokeOpacity:0.5}); //创建弧线对象map.addOverlay(line); //添加到地图中bPoints.push(start);bPoints.push(end);setZoom(bPoints);}//添加点function addMarker(point,index){var myIcon = new BMap.Icon(".png", new BMap.Size(23, 25), {offset: new BMap.Size(10, 25),imageOffset: new BMap.Size(0, 0 - index* 25)});var markers = new BMap.Marker(point, {icon: myIcon});return markers;}//添加线function addLine(points){var linePoints = [],pointsLen = points.length,i,polyline;if(pointsLen == 0){return;}// 创建标注对象并添加到地图for(i = 0;i <pointsLen;i++){linePoints.push(new BMap.Point(points[i][0],points[i][1]));}var line = new BMap.Polyline(linePoints, {strokeColor:"red", strokeWeight:3, strokeOpacity:0.5}); //创建弧线对象map.addOverlay(line); //添加到地图中}//添加动画function dynamicLine(lng,lat){var lng =lng;  //100+getRandom(40);;var lat =lat;  //35+getRandom(30);var point = [lng,lat];var newLinePoints = [];var len;//addMarker(point);//增加对应该的轨迹点points.push(point);bPoints.push(new BMap.Point(lng,lat));len = points.length;newLinePoints = points.slice(len-2, len);//最后两个点用来画线。addLine(newLinePoints);//增加轨迹线//setZoom(bPoints);//setTimeout(dynamicLine, 1000);}//设置随机数function getRandom(n){return Math.floor(Math.random()*n+1)}//设置视图等级function setZoom(bPoints){var view = map.getViewport(eval(bPoints));var mapZoom = view.zoom;var centerPoint = view.center;map.centerAndZoom(centerPoint,mapZoom);}}

7,代码看起来有些长,其实逻辑比较简单,希望读者有所收获~~

更多推荐

百度地图API实现轨迹动态移动

本文发布于:2024-03-14 15:59:59,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1736824.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:轨迹   地图   动态   API

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!