Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当Google Maps API多段线处于';画什么?_Javascript_Google Maps_Google Maps Api 3 - Fatal编程技术网

Javascript 当Google Maps API多段线处于';画什么?

Javascript 当Google Maps API多段线处于';画什么?,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我已经建立了一个GoogleMapsAPI工具集,允许用户在地图上绘制形状,给它们命名并记录区域。完成每个形状后,系统会提示用户为其命名,并设置一些其他选项,例如是否在地图上显示标签 我想给用户一个选项,在放置点时,即在绘制多段线(或多边形)时,右键单击并取消多段线(或多边形) 根据我在文档中读到的内容,我应该能够检测到用户右键单击地图,但我不确定如何取消他们正在绘制的覆盖,因为它尚未提交到地图,这意味着我无法将其作为对象引用 有什么想法吗 解决方案 感谢Molle博士的解决方案,具体如下:

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

我想给用户一个选项,在放置点时,即在绘制多段线(或多边形)时,右键单击并取消多段线(或多边形)

根据我在文档中读到的内容,我应该能够检测到用户右键单击地图,但我不确定如何取消他们正在绘制的覆盖,因为它尚未提交到地图,这意味着我无法将其作为对象引用

有什么想法吗

解决方案

感谢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();
    ...
(假设您使用
google.maps.drawing.DrawingManager

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

上单击鼠标右键
DrawingManager
-实例的
map
-属性设置为null,并创建一个新的
DrawingManager
-实例


这将删除当前编辑的覆盖图(但不是已完成的覆盖图)

当接受答案的代码工作时,它会抛出一个错误,可能是由于未正确删除事件侦听器

以下是一个更好的方法:

我使用了一个变量
cancelDrawingShape
来检测在绘制东西时是否按下了退出按钮。如果
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.
    }
});

对于Angular 7,这对我很有效

cancelDrawingShape: boolean = false; // declaration of variable
    @HostListener('document:keydown', ['$event']) onKeydownHandler(event: KeyboardEvent) {
        if (event.key === "Escape" || event.key === "Esc") {
          this.cancelDrawingShape = true;
          this.drawingManager.setDrawingMode(null); // To terminate the drawing, will result in autoclosing of the shape being drawn.
        }
      }

        google.maps.event.addListener(this.drawingManager,"polygoncomplete",
          polygon => {
            if(this.cancelDrawingShape){
              this.selectedShape = polygon;
              this.deleteSelectedShape();
              this.cancelDrawingShape = false;
              return false;
            }else{
               // else part
    }});

你的代码是什么样子的?你成功了!一个简单的实现和解决我的问题。非常感谢。