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

本文介绍了如何在百度地图API中清除指定的覆盖物。通过map.removeOverlay()方法可以移除单个覆盖物,而map.clearOverlays()则用于移除所有覆盖物。在实现特定需求时,如点击人员只显示其管理区域并清除其他区域,可以结合disableMassClear()和enableMassClear()方法。详细步骤和代码示例可供参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.youkuaiyun.com/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
清除百度地图指定覆盖物可以通过以下步骤实现: 1. 首先,确保已经加载了百度地图API,并创建了地图实例。 2. 在地图上绘制了覆盖物后,为了清除指定覆盖物,需要为每个覆盖物添加一个唯一的标识符(通常是一个字符串)。 3. 在需要清除指定覆盖物的时候,通过调用API提供的方法,查找并获取需要清除覆盖物对象。 4. 调用获取到的覆盖物对象的`remove()`方法,将其从地图中移除。 以下是一个示例代码,演示了如何清除指定覆盖物。 ```javascript // 创建地图实例 var map = new BMap.Map("map-container"); // 添加覆盖物,并为其设置唯一标识符 var marker1 = new BMap.Marker(new BMap.Point(116.404, 39.915)); marker1.myId = "marker1"; map.addOverlay(marker1); var marker2 = new BMap.Marker(new BMap.Point(116.417, 39.909)); marker2.myId = "marker2"; map.addOverlay(marker2); // 清除指定覆盖物 function removeOverlayById(id) { var overlays = map.getOverlays(); for (var i = 0; i < overlays.length; i++) { if (overlays[i].myId === id) { map.removeOverlay(overlays[i]); break; } } } // 调用清除覆盖物的方法 removeOverlayById("marker1"); ``` 以上代码示例中,我们通过为每个覆盖物对象设置了`myId`属性,代表它们的唯一标识符。然后,通过遍历地图上所有覆盖物对象的方式,找到需要清除覆盖物对象,并调用地图实例的`removeOverlay()`方法进行清除。 希望以上回答对您有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值