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