是否可以在绘制时取消 Google Maps API 折线?

Mat*_*ard 3 javascript google-maps google-maps-api-3

我已经构建了一个 Google Maps API 工具集,它允许用户在地图上绘制形状,给它们命名并记录区域。完成每个形状后,系统会提示他们为其命名并设置一些其他选项,例如是否在地图上显示标签。

我想为用户提供在放置点时右键单击并取消折线(或多边形)的选项,即在绘制点时。

根据我在文档中阅读的内容,我应该能够检测到用户右键单击了地图,但我不确定如何取消他们正在绘制的叠加层,因为它不会被提交地图,这意味着我将无法将其称为对象。

有任何想法吗?

解决方案

感谢 Molle 博士的解决方案,内容如下:

    ...
    google.maps.event.addListener(_map, "rightclick", function(){
        InitialiseDrawingManager();
    });
}

function InitialiseDrawingManager(){
    if (_drawingManager != null)
        _drawingManager.setMap(null);

    _drawingManager = new google.maps.drawing.DrawingManager();
    _drawingManager.setMap(_map);

    UpdateOverlaySettings();
    ...
Run Code Online (Sandbox Code Playgroud)

Yan*_*Tay 8

虽然已接受答案的代码有效,但它会引发错误,这可能是由于未正确删除事件侦听器。

下面是一个更好的方法:

我使用一个变量cancelDrawingShape来检测在绘制内容时是否按下了 Escape 按钮。如果cancelDrawingShape设置为true,那么我将从地图中删除最后绘制的形状。

var cancelDrawingShape = false;

google.maps.event.addListener(drawingManager, 'overlaycomplete', function (e) {
    var lastDrawnShape = e.overlay;
    if (cancelDrawingShape) {
        cancelDrawingShape = false;
        lastDrawnShape.setMap(null); // Remove drawn but unwanted shape
        return;
    }

    // Else, do other stuff with lastDrawnShape
});

$(document).keydown(function (event) {
    if (event.keyCode === 27) { // Escape key pressed
        cancelDrawingShape = true;
        drawingManager.setDrawingMode(null); // To terminate the drawing, will result in autoclosing of the shape being drawn.
    }
});
Run Code Online (Sandbox Code Playgroud)


Dr.*_*lle 5

(假设您使用google.maps.drawing.DrawingManager

无法以任何方式访问当前覆盖。你可以做什么:

rightclick设定map了的-property DrawingManager-instance为null,并创建一个新的DrawingManager-instance。

这将删除当前编辑的叠加层(但不会删除已经完成的叠加层)