web端百度地图API实现实时轨迹动态展示

最近在工做中遇到了一个百度地图api中的难题,恐怕有的程序员可能也遇到过。就是实时定位并显示轨迹,网上大部分都是经过建立polyline对象贴到地图上。固然,百度地图的画线就是这样实现的,可是好多人会发现,若是数据量超过四五千的话,浏览器可能就要卡了,后面可能就直接由于浏览器内存不足直接崩溃。按理讲面对这么少的数据,百度地图确定会考虑到这一点,因此确定有解决的方法。下面将介绍本人的方法供你们参考:html

一、数据准备程序员

这方便的数据我是ajax请求从后台获取的就不说了。画线的话咱们就得用到百度地图api中的polyline类了,由于咱们是实时定位,之前的历史路径是存在,可是咱们不能每次都要new一个polyline对象贴到地图上,因此就须要用到polyline的setPath(path: Array<Point>),咱们把整条路径的数据所有塞进去就能够了。这里我用一个json格式的数组保存每一个历史路径的全部路径数据,后面就是来数据更新数组再找到地图上相应的polyline对象塞进去就能够了。ajax

var polylineArray = [];//此数组专门存储历史路径
var PolylineJson = {};
PolylineJson["Id"] = Id;//存储相应的polyline对象
PolylineJson ["PathArray"] = polylineArray ;
polylineArray.push(PolylineJson);

备注:Polyline是个覆盖物对象,能够和其余对象同样自定义属性的,好比在声明之后设置polyline的id属性直接用polyline.id=content就能够了json

var polyline = new BMap.Polyline([ startPoint, endPoint ], {
        strokeColor : color,
        strokeWeight : weight,
        strokeOpacity : opacity,
        strokeStyle : style // 实线solid或虚线dashed
    });
polyline.id = Id;
map.addOverlay(polyline);

二、路径更新api

if(PolylineArray != ""){
        for(var i = 0; i < PolylineArray.length; i++){
                        if(PolylineArray[i].Id == Id){//此条路径存在
                            var PathArray = PolylineArray[i].PathArray;
                            PathArray.push(endPoint);//更新数组中的数据
                            var allOverlay = map.getOverlays();// 获取地图上的覆盖物
                            for (var j = 0; j < allOverlay.length; j++) {
                                // 判断标注物是不是Polyline类型
                                if (allOverlay[j].toString() == "[object Polyline]") {
                                    if (allOverlay[j].id == Id) {
                                        allOverlay[j].setPath(PathArray);
                                        break;
                                    }else{//数组中存在,但地图上不存在
                                        if(j == allOverlay.length - 1){
                             var polylineTemp = new BMap.Polyline(PathArray, { 
                                                    strokeColor : color, 
                                                    strokeWeight : weight, 
                                                    strokeOpacity : opacity, 
                                                    strokeStyle : style // 实线solid或虚线dashed  
                                                  });
                                            polylineTemp.id = Id;//为这条路径赋值惟一的id
                                            map.addOverlay(polylineTemp); // 添加折线到地图上
                                        }
                                    }
                                }
                            }
                            break;
                        }else{//不存在
                            if(i == PolylineArray.length - 1){
                                var PathArray = [];
                                PathArray.push(startPoint);
                                PathArray.push(endPoint);
                                var polylineTemp = new BMap.Polyline(PathArray, { 
                                             strokeColor : color, 
                                             strokeWeight : weight, 
                                             strokeOpacity : opacity, 
                                             strokeStyle : style // 实线solid或虚线dashed  
                                           });
                                polylineTemp.id = Id;//为这条路径赋值惟一的id
                                map.addOverlay(polylineTemp); // 添加折线到地图上
                                var PolylineJson = {};
                                PolylineJson["Id"] = Id;
                                PolylineJson["PathArray"] = PathArray;
                                PolylineArray.push(Polyline);
                                break;
                            }
                        }
                    }
}else{//数组为空
            var PathArray = []; 
            PathArray.push(startPoint); 
            PathArray.push(endPoint);
            var polylineTemp = new BMap.Polyline(PathArray, { 
                  strokeColor : color, 
                  strokeWeight : weight, 
                  strokeOpacity : opacity, 
                strokeStyle : style // 实线solid或虚线dashed  
              });
            polylineTemp.id = Id;//为这条路径赋值惟一的id
            map.addOverlay(polylineTemp); // 添加折线到地图上
            var PolylineJson = {};
            PolylineJson["Id"] = Id;
            PolylineJson["PathArray"] = PathArray;
            PolylineArray.push(Polyline);
}

备注:本方法在加载轻量级的数据仍是能够的,不会使浏览器崩溃,若是每次实时定位加载许多路径数据,成百上千的那种,在加载的时候浏览器中地图卡一下是正常现象。数组

相关文章
相关标签/搜索