百度地图api清除指定覆盖物

1、首先在官网api demo有如下例子:(地址:http://lbsyun.baidu.com/jsdemo.htm?a#c1_17)

// 百度地图API功能
	var map = new BMap.Map("allmap");
	var point = new BMap.Point(116.404, 39.915);
	map.centerAndZoom(point, 15);
	map.disableDoubleClickZoom(true);
		
	// 编写自定义函数,创建标注
	function addMarker(point,label){
		var marker = new BMap.Marker(point);
		map.addOverlay(marker);
		marker.setLabel(label);
	}
	// 随机向地图添加25个标注
	var bounds = map.getBounds();
	var sw = bounds.getSouthWest();
	var ne = bounds.getNorthEast();
	var lngSpan = Math.abs(sw.lng - ne.lng);
	var latSpan = Math.abs(ne.lat - sw.lat);
	for (var i = 0; i < 10; i++) {
		var point = new BMap.Point(sw.lng + lngSpan * (Math.random() * 0.7), ne.lat - latSpan * (Math.random() * 0.7));
		var label = new BMap.Label("我是id="+i,{offset:new BMap.Size(20,-10)});
		addMarker(point,label);
	}
	function deletePoint(){
		var allOverlay = map.getOverlays();
		for (var i = 0; i < allOverlay.length -1; i++){
			if(allOverlay[i].getLabel().content == "我是id=1"){
				map.removeOverlay(allOverlay[i]);
				return false;
			}
		}
	}

我们会发现 map.getOverlays() 函数会返回 页面 覆盖物的个数+1 个;

言归正传:在百度api里,清除覆盖物有两个方法:map.removeOverlay()或者 map.clearOverlays()。而 clearOverlays()方法一次移除所有的覆盖物,removeOverlay()一次移除一个指定覆盖物。

现在我的需求是如图:

点击左边的人员后,右边对应的人员显示自己管理的圆圈范围。同时清除 其他人员的圆圈区域(也就是说地图只显示当前管理员的管理区域),所以每次点击需要清除已有的圆圈。

 api又提供了另外2个配套的方法:disableMassClear()  和 enableMassClear();

disableMassClear():官网文档解释 禁止覆盖物在 map.clearOverlays 方法中被清除。 (自 1.1新增)

enableMassClear():官网文档解释 允许覆盖物在 map.clearOverlays 方法中被清除。 (自 1.1新增)

实现该功能的步骤如下:

第一步:在添加覆盖的时候对不需要进行移除操作的覆盖设置disableMassClear();

   marker.setLabel(label);  
   this.map.addOverlay(marker);//增加点
   marker.disableMassClear(); //mark不被清除

第二步:清除所要清除的覆盖物,这里需要清除所有的Polyline而不清除marker,现在可以直接使用
   
    var circle = new BMap.Circle(poi,dis,{fillColor:"blue", strokeWeight: 1 ,fillOpacity: 
     0.3,strokeOpacity: 0.3});
    this.map.clearOverlays();
    this.map.addOverlay(circle);
   

只需2步,功能就完成了

如果现在需要对marker进行移除操作时,可以使用enableMassClear()方法来取消禁止清除;

var allOverlay = map.getOverlays();
for (var i = 0; i < allOverlay.length; i++) {
     allOverlay[i].enableMassClear();
     return false;
};

参考:http://blog.csdn.net/frees_zhu/article/details/73743785

全部代码:

window.visualMonitor ={
    path:$("#path").val(),
    map:new BMap.Map("bdMap"),
    initMapBdMap:function(){//初始地图高度
        var mapHeight = $(window).height() - 85;
        $("#bdMap").css({"height":mapHeight});
        $("#treeContainer").niceScroll({
            cursoropacitymin: 0, 
            cursoropacitymax: 1, 
            zindex:99,
            cursorwidth: "5px",
            cursorborder: "none",
            cursorborderradius: "5px"
        });
    },
    initAnimHeight:function(){
        $(".okps-container-l").css({"pointer-events":"none","background":"transparent"});
        $(".okps-container-l-logo").css({"background": "rgba(1,21,36,0.8)"});
        $("#reguAnimateBox").css({"height":$(window).height() - 48 +"px"});
    },
    sideAnimate:function(){
        $("#animateArrow").click(function(){
            if($(this).attr("data-status") == "0"){
                $("#reguAnimateBox").animate({left:"-180px"},1000,function(){
                    $("#animateArrow").addClass("see-animate-box-arrow-s");
                    $("#animateArrow").animate({right:"-30px"},1000,function(){
                        $(this).addClass("see-animate-box-arrow-s");
                    });
                });
                $(".okps-container-r-content").animate({position:"relative",paddingLeft:"10px"},1000);
                $(this).attr("data-status","1");
            }else{
                $("#reguAnimateBox").animate({left:"0px"},1000,function(){
                    $("#animateArrow").removeClass("see-animate-box-arrow-s");
                    $("#animateArrow").animate({right:"0px"},1000);
                });
                $(".okps-container-r-content").animate({position:"relative",paddingLeft:"190px"},1000);
                $(this).attr("data-status","0");
            }
            
        });

    },
    leftTreeFill:function(){
        $.ajax({ 
            url:'/okps/visual/getAllClass', 
            type:'post',
            dataType:'json', 
            data:{}, 
            success: function(data){ //成功
               var InitData = {};
               InitData.data = data;
               $("#treeContainer").treeStru(InitData);
            },
            error: function(){  //失败
                layer.alert('统计分析数据加载失败,可能会导致页面显示异常,请刷新后重试', {
                     skin: 'layui-layer-molv'
                    , closeBtn: 0
                    , shift: 4 //动画类型
                 });
            }
        });

    },
    siberClick:function(lng,lat){ //左边点击
        this.point = new BMap.Point(lng,lat);
        this.map.centerAndZoom(this.point,20);
        return;
    },
    initMap:function(){//初始化地图
        this.map.enableScrollWheelZoom(true);//鼠标放缩地图
        //添加控件和比例尺
        var top_right_navigation = new BMap.NavigationControl({anchor: BMAP_ANCHOR_TOP_RIGHT, type: BMAP_NAVIGATION_CONTROL_SMALL});
        this.map.addControl(top_right_navigation);
    },
    moveGetData:function(){
        var _this = this;
        this.map.addEventListener("dragend", function(){    
            var center = this.map.getCenter();    
            _this.map.clearOverlays();
            $("#keywords").empty();
            _this.getStation(center.lng,center.lat);
        }.bind(this));
    },
    getCity:function(){//获取当前地点名
        var _this = this;
        $.ajax({
            url : _this.path + "user/getCurrentCity",
            type : 'post',
            dataType : 'json',
            async : false,
            error : function() { // 失败
                layer.alert('统计分析数据加载失败,可能会导致页面显示异常,请刷新后重试', {
                     skin: 'layui-layer-molv'
                    , closeBtn: 0
                    , shift: 4 //动画类型
                 });
            },
            success : function(data) {
                _this.initialCityName = data.city;
            }
        });
    },
    getSingleNum:function(){
        $.ajax({
            url : this.path + "visual/getSumbyType",
            type : 'post',
            dataType : 'json',
            async : false,
            error : function() { // 失败
                layer.alert('统计分析数据加载失败,可能会导致页面显示异常,请刷新后重试', {
                     skin: 'layui-layer-molv'
                    , closeBtn: 0
                    , shift: 4 //动画类型
                 });
            },
            success : function(data) {
                data.forEach(function(item,index,array){
                    if(item.type == '1'){
                        $("#beHere").text(item.ct);

                    }else if(item.type == '2'){
                        $("#goAway").text(item.ct);
                    }else{
                        $("#master").text(item.ct);
                    }

                });
            }
        });

    },
    firstLoad:function(){//第一次进入该页面
        var _this = this;
        this.getCurrentCenter(_this.initialCityName);
       
    },
    getCurrentCenter:function(city){//获取当前中心点
        layer.load(2, { shade: [0.3, '#393D49'] });
        var _this = this;
        $("#keywords").empty();
        var localSearch = new BMap.LocalSearch(_this.map);
        _this.map.clearOverlays();//清空原来的标注
        var keyword = city;
        
        localSearch.setSearchCompleteCallback(function (searchResult) {
            var poi = searchResult.getPoi(0);
            //console.log(poi);
            if(!poi){
                setTimeout(function(){
                    layer.closeAll('loading');
                },300);
                return;
            };
            _this.point = new BMap.Point(poi.point.lng,poi.point.lat);
            _this.map.centerAndZoom(_this.point,17);
            //console.log(poi.point.lng + "," + poi.point.lat);//搜索中心点
            //获取搜索地点附近 站点数据
            //泊位
            _this.getStation(poi.point.lng,poi.point.lat);
            
        });
        localSearch.search(keyword);
    },
    getStation:function(lng,lat){//传入当前经纬度获取岗位数据
        var _this = this;
        $.ajax({
            url : _this.path + "visual/getAllUserByAgent",
            type : 'post',
            dataType : 'json',
            async : false,
            data : {         
            },
            beforeSend : function(){ 
            },
            error : function() { // 失败
                layer.alert('数据加载失败,可能会导致页面显示异常,请刷新后重试', {
                     skin: 'layui-layer-molv'
                    , closeBtn: 0
                    , shift: 4 //动画类型
                 });
            },
            success : function(data) {
                /*alert();*/
                // console.log(data);
                if(data.length <= 0){
                    $("#gwToTotal").text(0);
                    setTimeout(function(){
                        layer.closeAll('loading');
                    },300);
                    return;
                };
                setTimeout(function(){
                    layer.closeAll('loading');
                },300);
                var array = new Array(); 
                for ( var i = 0; i < data.length; i++) {       
                    array[i] = new Array(); 
                    array[i][0] = data[i].lng * 1;
                    array[i][1] = data[i].lat * 1;
                    array[i][2] = data[i].className;
                    array[i][3] = data[i].classId;
                    array[i][4] = data[i].name;
                    array[i][5] = data[i].phone;
                    array[i][6] = data[i].isOut;
                    array[i][7] = data[i].usertype;
                    array[i][8] = data[i].groupName;
                    array[i][9] = data[i].id;
                    array[i][10] = data[i].sbTime.slice(0,-2);
                    array[i][11] = data[i].distance;
                }
                _this.initStation(array);
            }
        });
    },
    circleFun:function(poi,dis){ 
        var circle = new BMap.Circle(poi,dis,{fillColor:"#f3a08c", strokeWeight: 0.3 ,fillOpacity: 0.3, strokeOpacity: 0.3});
        this.map.clearOverlays();
        this.map.addOverlay(circle);
    },
    initStation:function(data){//初始岗位数据
        var _this = this;
        var json_data = data;
        var pointArray = new Array();
        var opts = {
            width : 200,  
            height: 140,
            enableMessage:true
           };
        for(var i=0;i<json_data.length;i++){
            var myIcon;
            if(json_data[i][7] == '7'){
                myIcon = new BMap.Icon("/okps/images/ry02.png", new BMap.Size(28,40));
            }else{
                if(json_data[i][6] == '1'){
                    myIcon = new BMap.Icon("/okps/images/ry03.png", new BMap.Size(28,40));
                }else{
                    myIcon = new BMap.Icon("/okps/images/ry04.png", new BMap.Size(28,40));
                }   
            }
            
            var marker = new BMap.Marker(new BMap.Point(json_data[i][0], json_data[i][1]),{icon:myIcon}); // 创建点
            var content = '<div class="map-gw-h">员工:'+json_data[i][4]+'</div>';
                content +='<div class="map-gw-h">班组:'+json_data[i][2]+'</div>';
                if(json_data[i][7] != '7'){
                    content +='<div class="map-gw-h nowrap">岗位:'+nullReturn(json_data[i][8])+'</div>';
                };
                
                content +='<div class="map-gw-h">手机:'+json_data[i][5]+'</div>';
                content +='<div class="map-gw-h">上班时间:'+json_data[i][10]+'</div>';
                if(json_data[i][7] == '7'){
                     content +='<div class="map-gw-h"><a href="/okps/visual/supervisionr/index?id='+json_data[i][9]+'" onclick=sessionJump("2_null",128,2) class="a-do" style="float:right;">查看运动轨迹</a></div>';
                };
               
                
            pointArray[i] = new BMap.Point(json_data[i][0], json_data[i][1]);
            var label = new BMap.Label(json_data[i][4],{offset:new BMap.Size(-15,-30)});//创建文本标注对象
            label.setStyle({
                 border:"1px solid #5291fc",
                 color : "#ffffff",
                 background:"#5291fc",
                 overflow:"hidden",
                 padding: "2px 5px",
                 borderRadius:"5px",
                 fontSize : "12px",
                 height : "20px",
                 lineHeight : "20px",
                 fontFamily:"微软雅黑"
            });

            marker.setLabel(label);  
            this.map.addOverlay(marker);//增加点
            marker.disableMassClear();
            var dis={lng:json_data[i][0],lat:json_data[i][1],disdance:json_data[i][11]};
           
            _this.addClickHandler(content,label,opts,dis);
            _this.addClickHandler(content,marker,opts,dis);
        }
        
        //让所有点在视野范围内
        //this.map.setViewport(pointArray);
    },
    getMonitor:function(id){
        var _this = this;
        var monitor=[];
        $.ajax({
            url : _this.path + "sup/getUsersListByGroupId",
            type : 'post',
            dataType : 'json',
            async : false,
            data : {"groupId":id},
            beforeSend : function(){ 
            },
            error : function() { // 失败
                layer.alert('数据加载失败,可能会导致页面显示异常,请刷新后重试', {
                     skin: 'layui-layer-molv'
                    , closeBtn: 0
                    , shift: 4 //动画类型
                 });
            },
            success : function(data) {
                if(data.length > 0){
                    if(data[0].sbsfy != undefined){
                         monitor.push(data[0].sbsfy);
                    }
                    if(data[0].wsbsfy != undefined){
                        monitor.push(data[0].wsbsfy);
                    }
                    if(data[0].sbbz != undefined){
                        monitor.push(data[0].sbbz);
                    }
                    if(data[0].wsbbz != undefined){
                        monitor.push(data[0].wsbbz);
                    }else{
                        monitor.push('');
                    }                 
                }
            }
        });
        
        return monitor;
    },
    addClickHandler:function(content,marker,opts,dis,id){
        var _this = this;
        
        marker.addEventListener("click",function(e){
            var mPoint = new BMap.Point(dis.lng, dis.lat);
            var circle = new BMap.Circle(mPoint,dis.disdance,{fillColor:"#f3a08c", strokeWeight: 0.3 ,fillOpacity: 0.3, strokeOpacity: 0.3});
            _this.map.clearOverlays();
            _this.map.addOverlay(circle);
            _this.map.centerAndZoom(mPoint,20);
            _this.openInfo(content,e,opts,id)}
        );
    },
    openInfo:function(content,e,opts,id){
        var _this = this;
        var p = e.target;
        if(id){
            var monitorA = this.getMonitor(id);
            content +='<div class="map-gw-h" style="margin-bottom:5px;">'+'<img src="/okps/images/bm09.png" alt="" />'+monitorA[0]+'<img src="/okps/images/ew.png" alt="" />'+monitorA[1]+'</div>';
            content +='<div class="map-gw-h">班长</div>';
            if(monitorA[3] != ''){
                content +='<div class="map-gw-h"><img src="/okps/images/bm09.png" alt="" />'+monitorA[2]+'<img src="/okps/images/ew.png" alt="" />'+monitorA[3]+'</div>';
            }else{
                content +='<div class="map-gw-h"><img src="/okps/images/bm09.png" alt="" />'+monitorA[2]+'</div>';
            }

        }
        var point = new BMap.Point(p.getPosition().lng, p.getPosition().lat);
        var infoWindow = new BMap.InfoWindow(content,opts);  // 创建信息窗口对象 
        _this.map.openInfoWindow(infoWindow,point); //开启信息窗口
       
    },
    init:function(){
        this.getSingleNum();
        this.initAnimHeight();
        $(window).resize(this.initAnimHeight);
        this.sideAnimate();
        this.leftTreeFill();
        this.getCity();
        this.initMapBdMap();
        this.firstLoad();
        this.initMap();
        //this.moveGetData();
    }
};

$(function(){
    visualMonitor.init(); 
});
 

//获取覆盖物位置
function attribute(e){
    var p = e.target;
    console.log(p.getPosition().url); 
    alert(p.getPosition().lng + "," + p.getPosition().lat);    
}; 



猜你喜欢

转载自my.oschina.net/u/2395167/blog/1543523
今日推荐