在Google Maps API v3中删除未完成的多边形/折线

时间:2014-07-22 17:19:46

标签: javascript google-maps google-maps-api-3

所以我的问题是:我正在尝试找到一种方法来清除绘制的多边形,同时它仍然被绘制。即使我创建了一个新的google.maps.Map对象,我仍然无法摆脱旧的多边形或折线,例如这样做:

Cursor outside map

目前,我将所有绘制的多边形/折线存储在一个数组中,并在需要时通过调用数组元素删除它们。唯一的问题是我不能删除多边形/折线,除非它在数组中。这是相关的代码:

//Code to reset map
bounds = new google.maps.LatLngBounds(
    new google.maps.LatLng(latSE, lonNW),
    new google.maps.LatLng(latNW, lonSE));

var mapOptions = {
    center: new google.maps.LatLng((latNW + latSE) / 2,
        (lonNW + lonSE) / 2),
    zoom: 12,
    mapTypeId: google.maps.MapTypeId.ROADMAP,
};
map = new google.maps.Map(document.getElementById("map-canvas"),
    mapOptions);
map.fitBounds(bounds);
drawingManager.setMap(map);
deleteAllRegions(); //remove all regions after switching

删除区域功能:

//delete all completed polygons
function deleteAllRegions() {
    for (var j = 0; j < regions.length; j++) {
        regions[j].setMap(null)
    }
    regions = new Array();
    for (var j = 0; j < paths.length; j++) {
        paths[j].setMap(null)
    }
    paths = new Array();
}

2 个答案:

答案 0 :(得分:2)

不那么困难,

  1. 致电drawingManager.setDrawingMode(null);

    这将完成当前操作,例如当你当前绘制多边形时,多边形将完成,overlay_complete - 事件触发(应该将形状推入数组)

  2. 运行清除形状的代码(最后一个形状也将在数组内)
  3. 无需重新创建地图或drawingManager

答案 1 :(得分:0)

刚刚发现我在清除时没有删除drawingManager。新代码是:

//Code to reset map
bounds = new google.maps.LatLngBounds(
    new google.maps.LatLng(latSE, lonNW),
    new google.maps.LatLng(latNW, lonSE));

var mapOptions = {
    center: new google.maps.LatLng((latNW + latSE) / 2,
        (lonNW + lonSE) / 2),
    zoom: 12,
    mapTypeId: google.maps.MapTypeId.ROADMAP,
};
//create new drawing manager
drawingManager = new google.maps.drawing.DrawingManager({
    drawingControlOptions: {
        drawingModes: [
            google.maps.drawing.OverlayType.POLYLINE,
            google.maps.drawing.OverlayType.POLYGON
        ]
    },
    polylineOptions:{
        editable: true
    },
    polygonOptions:{
        editable: true
    }
});
//create new map
map = new google.maps.Map(document.getElementById("map-canvas"),
    mapOptions);
map.fitBounds(bounds);
drawingManager.setMap(map);
deleteAllRegions(); //remove all regions after switching

似乎由于绘图管理器是相同的,它将保留先前绘制的多边形。