如何在Google Maps中删除多边形?切换下拉区域时移除上一个多边形
在Google Maps中删除多边形及切换区域时清除旧多边形的解决方案
你好呀!针对你在Google Maps里操作多边形的两个问题,我来给你详细说说解决方案,结合你现有的drawPolygon函数来调整会更清晰~
一、如何删除单个多边形?
Google Maps的Polygon对象自带的setMap()方法就是关键!当你把方法的参数设为null时,就能把对应的多边形从地图上移除。比如你代码里创建的bermudaTriangle,只需要执行:
bermudaTriangle.setMap(null);
这样它就会立刻从地图上消失。这里要注意,这个操作只是把多边形从地图视图中移除,对象本身还保存在内存里,如果之后还需要重新显示它,再调用setMap(map)就能恢复啦。
二、切换下拉菜单选择新区域时,移除最后显示的多边形
你现在的drawPolygon函数每次调用都会创建新的多边形,但没有保留之前多边形的引用,所以没法直接清除旧的。我们只需要做两个小修改就能解决这个问题:
步骤1:保存当前显示的多边形引用
在你的代码里(比如全局作用域或者和drawPolygon同作用域的位置)定义一个数组,用来存储当前显示的所有多边形实例:
// 用来保存当前地图上显示的多边形集合 let currentPolygons = [];
步骤2:修改drawPolygon函数,先清旧再绘新
更新你的函数,在绘制新多边形之前,先遍历currentPolygons数组,把所有旧多边形从地图上移除,然后再绘制新的并保存引用:
function drawPolygon(polygons) { // 先清除之前显示的所有旧多边形 currentPolygons.forEach(polygon => { polygon.setMap(null); }); // 清空存储数组,准备保存新的多边形 currentPolygons = []; // 绘制新的多边形并保存引用 polygons.forEach(function(p) { const newPolygon = new google.maps.Polygon({ paths: p, strokeColor: '#FF0000', strokeOpacity: 0.8, strokeWeight: 2, fillColor: '#FF0000', fillOpacity: 0.35 }); newPolygon.setMap(map); // 将新多边形添加到存储数组中 currentPolygons.push(newPolygon); }) }
这样每次你从下拉菜单选择新区域调用drawPolygon时,都会先把之前显示的所有多边形清理掉,再绘制新的区域多边形,就不会出现多个多边形重叠的情况啦。
另外补充个小细节:如果之后你需要彻底释放旧多边形占用的内存,在调用setMap(null)后,清空currentPolygons数组就可以了,JavaScript的垃圾回收机制会自动处理这些不再被引用的对象。
内容的提问来源于stack exchange,提问作者AlisonVilmoreV




