最近用百度地图 api 做项目, 需要同时在地图显示 marker 与 Polyline, 且 Polyline 需要根据点击来显示或清除, 所以遇到了清除指定覆盖物的问题, 各种搜索后未能找到完美的解决方法, 通过自己思考, 摸索了一方法能解决这个问题, 发出来给大家分享. 好了, 进入正题:
清除覆盖物有两个方法: map.removeOverlay() 或者 map.clearOverlays(),clearOverlays() 方法一次移除所有的覆盖物, removeOverlay() 一次移除一个指定覆盖物, 显然, 我要一次移除一类 Polyline 覆盖物, 这两个方法都不适用.
百度 demo(http://developer.baidu.com/map/jsdemo.htm#c1_17) 有 removeOverlay() 的例子, 如下:
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;
}
}
}
是通过遍历所有覆盖物来筛选所要移除的覆盖;
对于要移除一类覆盖物; 可以在添加覆盖物的时候做限制设置;
第一步: 在添加覆盖的时候对不需要进行移除操作的覆盖设置 disableMassClear(); 官网文档解释如下
disableMassClear()
none 禁止覆盖物在 map.clearOverlays 方法中被清除. (自 1.1 新增)
我这里不需要对 marker 进行移除操作, 所以设置如下:
marker.disableMassClear();
第二步: 清除所要清除的覆盖物, 这里需要清除所有的 Polyline 而不清除 marker, 现在可以直接使用
map.clearOverlays();
这样就能很方便的清除所有 Polyline 而保留 marker;
第三步: 当后来需要对 marker 进行移除操作时, 可以使用 enableMassClear() 方法来取消禁止清除;
enableMassClear()
none 允许覆盖物在 map.clearOverlays 方法中被清除. (自 1.1 新增)
但是需要对每个 marker 进行恢复操作, 所以需要进行遍历:
var allOverlay = map.getOverlays();
for (var i = 0; i < allOverlay.length; i++) {
allOverlay[i].enableMassClear();
}
这样就恢复了所有覆盖物的可清除操作.
简单三步设置便可高效操作指定类覆盖物.
以上这篇基于百度地图 api 清除指定覆盖物 (Overlay) 的方法就是小编分享给大家的全部内容了, 希望能给大家一个参考, 也希望大家多多支持脚本之家.
来源: http://www.jb51.net/article/133766.htm