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)
虽然已接受答案的代码有效,但它会引发错误,这可能是由于未正确删除事件侦听器。
下面是一个更好的方法:
我使用一个变量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)
(假设您使用google.maps.drawing.DrawingManager)
无法以任何方式访问当前覆盖。你可以做什么:
在rightclick设定map了的-property DrawingManager-instance为null,并创建一个新的DrawingManager-instance。
这将删除当前编辑的叠加层(但不会删除已经完成的叠加层)
| 归档时间: |
|
| 查看次数: |
1539 次 |
| 最近记录: |