百度地图实现轨迹播放

    xiaoxiao2021-11-03  75

    百度地图实现轨迹播放

    1、以下代码作为参考,也是实现轨迹的核心代码

    2、为什么要帖出这个百度轨迹播放代码,是因为百度实现轨迹回放比高德地图复杂些,另外百度轨迹播放有些细节处理不好会导致使用效果很差,比如地图跟随小车移动如果控制不好,会导致效果很差等,减少大家在做百度轨迹的弯路

    3、实现了根据一系列坐标数组,回放轨迹、自动播放轨迹、地图跟随小车移动

    4、没解决到暂停播放功能,很奇怪,希望大家解决了,贴出解决办法

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML> <html>   <head>     <base href="<%=basePath%>">          <title>轨迹</title>      <style type="text/css"> .Maptianw { width: 52px; height: 32px; line-height: 32px !important; border-radius: 3px; background: #1550B6; color: #ffffff !important; font-size: 12px; text-align: center; top: 11px; left: 430px; z-index: 1; cursor: pointer; } img { width: 32px; height: 32px; cursor: pointer; line-height: 32px !important; border-radius: 3px; background: #1550B6; } img:hover { cursor: pointer; line-height: 32px !important; border-radius: 3px; background: #ecedef; } .Maptianw input { display: block; margin: 10px 0px 0px 8px; float: left; } .Maptianw span { display: block; float: left; } </style>   </head>    <jsp:include page="/common/common.jsp" flush="true" /> <script type="text/javascript" src="<%=basePath%>company/login/js/jquery-1.11.1.min.js"></script> <script type="text/javascript" src="<%=basePath%>common/js/jquery-1.11.1.min.js"></script> <script type="text/javascript" src="<%=basePath%>common/js/bootstrap.min.js"></script>   <script type="text/javascript">   var _bMap=null;//百度地图对象   var parent=null;   var arrayPoints=null;   var startlon=""; var endlat="";   var startpic='<%=basePath%>/map/images/icon_st.png';   var endpic='<%=basePath%>/map/images/icon_en.png';   var picCar='<%=basePath%>/map/images/car.png';   var play_start='<%=basePath%>/img/play_start.png';   var play_play='<%=basePath%>/img/play_play.png';   var play_stop='<%=basePath%>/img/play_stop.png';   var play_res="<%=basePath%>/img/play_set.png";   var movePolyline=new Array();//轨迹线   var lushu;   var car; //汽车图标   var marker;   var label; //信息标签   var centerPoint;   //var timer; //定时器   var index = 0; //记录播放到第几个point   var BMap;   var followChk, playBtn, pauseBtn, resetBtn; //几个控制按钮   var me;   hwui().require('upload',"slider",'attachment','accordion','autocomplete','calendar', 'colorpicker','combobox','datepicker','datetimepicker','dialog','editor', 'validator', 'tab', 'effect', 'grid',   'treeview','menu', 'numerictextbox','slider','tab','tooltip','effect','binder',  'dropdownlist', 'datetimepicker', 'message', 'treeview', 'editor',function($, hwui,config) {      var $frame =$("#mapModalIframe");      var id='<%=request.getParameter("id")%>';      var personId='<%=request.getParameter("personId")%>';      var deadlineStarttime='<%=request.getParameter("deadlineStarttime")%>';      var deadlineEndtime='<%=request.getParameter("deadlineEndtime")%>';      followChk = document.getElementById("follow");        playBtn = document.getElementById("play");        resetBtn = document.getElementById("reset");        resetBtn.addEventListener("click", referesh);      $frame.load(function () {      //地图加载完成      document.getElementById('mapModalIframe').contentWindow.callMapInitSuccessFunc(function(){            parent = document.getElementById('mapModalIframe').contentWindow;      parent.setCallHideControl();      parent.setCallbackMapAddress("","","");      BMap=parent.BMap;      getPersonTrack();     });      });            /**      *获取坐标      */     function getPersonTrack(){           arrayPoints=new Array();     _bMap=parent.customMap.mMap;     $.ajax({     url:"",     type:"post",     dataType: "json",     data:{taskId:id,personId:personId,startTime:deadlineStarttime,endTime:deadlineEndtime},     success: function(result) {         if(result==null|| result=="" ||result.length<=0){     hwui.Msg.info("不存在轨迹!"); return;     };     var points="";         var lon="";     var lat="";     for ( var int = 0; int < result.length; int++) {     var lon=result[int].longitude;     var lat=result[int].latitude;     var point=lon+","+lat; points+=(points=="")?point:";"+point; if(int==0){ startlon=lon;     endlat=lat; } arrayPoints.push(new  parent.BMap.Point(lon, lat) ); }         //轨迹     parent.mapMarker.addPolyline(parent.customMap,points,1,"#EE2C2C",4,null);     //添加起点和终点         parent.mapMarker.addPictrueMarker2(parent.customMap,startlon,endlat,startpic,37,62,null,null);         parent.mapMarker.addPictrueMarker2(parent.customMap,lon,lat,endpic,37,62,null,null);         setControlPlay(true);     if( result.length>1){     playRout(_bMap);     }     }     });     }                /**      路线回放      **/            function playRout(map){      if(arrayPoints.length<=0){      hwui.Msg.info("不存在轨迹!");      return;      }  map.setViewport(arrayPoints); //parent.getCallPanByPointAndLevel(startlon,endlat,15);  parent.BMapLib.LuShu.prototype._move=function(arrayPoints,targetPos,effect) {         var pointsArr=[arrayPoints,targetPos]; //点数组         me = this;                //当前的帧数                currentCount = 0,                //步长,米/秒                timer = 100,                step = this._opts.speed / (1000 / timer),                //初始坐标                init_pos = this._projection.lngLatToPoint(arrayPoints),                //获取结束点的(x,y)坐标                target_pos = this._projection.lngLatToPoint(targetPos),                //总的步长                count = Math.round(me._getDistance(init_pos, target_pos) / step);              //如果小于1直接移动到下一点            if (count < 1) {                me._moveNext(++me.i);                return;            }            me._intervalFlag = setInterval(function() {            //两点之间当前帧数大于总帧数的时候,则说明已经完成移动            if (currentCount >= count) {                clearInterval(me._intervalFlag);                //移动的点已经超过总的长度         if(me.i > me._path.length){ return;         }         //运行下一个点                me._moveNext(++me.i);                          }else {                                    currentCount++;                        var x = effect(init_pos.x, target_pos.x, currentCount, count),                            y = effect(init_pos.y, target_pos.y, currentCount, count),                            pos = me._projection.pointToLngLat(new BMap.Pixel(x, y));                        if(followChk.checked) {                        me._map.setCenter(pos);       }                        //设置marker                        if(currentCount == 1){                            var proPos = null;                            if(me.i - 1 >= 0){                                proPos = me._path[me.i - 1];                            }                            if(me._opts.enableRotation == true){                                 me.setRotation(proPos,arrayPoints,targetPos);                            }                            if(me._opts.autoView){                                if(!me._map.getBounds().containsPoint(pos)){                                                                    me._map.setCenter(pos);                                }                               }                        }                        //正在移动                        me._marker.setPosition(pos);                        //设置自定义overlay的位置                        me._setInfoWin(pos);                                      }        },timer);        };        //设置沿路线移动        lushu = new  parent.BMapLib.LuShu(map,arrayPoints,{                defaultContent:"",                autoView:true,//是否开启自动视野调整,如果开启那么路书在运动过程中会根据视野自动调整 defaultContent:"",                icon  : new BMap.Icon(picCar , new BMap.Size(52,26),{anchor : new BMap.Size(27, 13)}),                speed: 1500,                enableRotation:true,//是否设置marker随着道路的走向进行旋转                landmarkPois: [ ]                });         setTimeout(function(){       play();//启动播放       },500);              }                 //播放      function play() {     //缩放到轨迹 parent.getCallPanByPointAndLevel(startlon,endlat,15);        lushu.start();        setControlPlay(false);      }      //暂停      function pauseTrack() {          setControlPlay(true);      referesh();      }      function setControlPlay(bln){     if(bln==true){     //播放     $("#play").attr("src",play_play);     playBtn.removeEventListener("click", pauseTrack);     playBtn.addEventListener("click", play);     }else{     //暂停播放      $("#play").attr("src",play_res);     playBtn.removeEventListener("click", play);     playBtn.addEventListener("click", pauseTrack);     }      }     function referesh(){     clearInterval( me._intervalFlag);     _bMap.clearOverlays(); getPersonTrack();     }   });      </script>    <body> <iframe id='mapModalIframe' style='height: 500px;width: 100%;border: none;' src='<%=basePath%>map/selectAddress.jsp'>     </iframe> <div id="hidden-for-desc"  align="center">   <label>路线轨迹播放:</label>     <label class="Maptianw" title="画面跟随"> <input id="follow" type="checkbox" checked="checked"><label for="follow" >跟随</label> </label>    <a href='javascript:'><img id="play" src='<%=basePath%>/common/img/play_stop.png'  title="播放轨迹" /></a> <a href='javascript:'  style="display: none" ><img id="reset" style="display: none" src='<%=basePath%>/common/img/play_set.png'  title="刷新路线" /></a> </div>   </body> </html>

    转载请注明原文地址: https://ju.6miu.com/read-677949.html

    最新回复(0)