Google Maps V3:绘图库

时间:2011-11-19 10:42:13

标签: google-maps-api-3 drawing

我喜欢Google Maps v3.7的新绘图库,但我觉得文档仍然不完整,我有几个问题:

  1. Documentation仅提及overlaycompleted{overlay}completed个事件,但我还found drawingmode_changed个事件。某处有事件清单吗?

  2. 有没有办法让我们绘制的多边形的引用(对象)等到我们完成绘制它并使用overlaycompleted的监听器,如上例所示? / p>

  3. 我们有没有办法从多边形中删除椎骨,只需点击它们?如果没有,你会怎么做呢?

3 个答案:

答案 0 :(得分:2)

您可以像这样调用任何叠加事件。

google.maps.event.addListener(drawingManager, 'polygoncomplete', function(e) {
    //Your magic goes here 
});

overlaycomplete就像任何叠加层的全局事件,例如标记,折线,圆和多边形。但是如果你想为特定的叠加层创建一个监听器,只需将overlay更改为所需的叠加层:polygoncompletepolylinecompletecirclecomplete

我知道这些问题已经过时了,但无论如何我想分享我的答案。

答案 1 :(得分:1)

经过大量搜索后,我想出了:

  1. 除了this之外,我找不到任何事件列表。

  2. 我找不到任何。

  3. 不,这是不可能的,但我已经放了一个request in而且我看到了一个小trick,它使用右键单击。不幸的是,这对我来说不起作用,因为我需要左键单击。

  4. 我希望这有助于其他人

答案 2 :(得分:1)

很老的问题,但我对此有一些更新,也许会帮助某人。

  1. 可编辑的形状还有一些其他可能有用的事件:https://developers.google.com/maps/documentation/javascript/overlays#user_editable_shapes_events

  2. 也找不到解决办法。

  3. 这段代码展示了如何在左键单击中删除多边形/折线顶点:

  4. google.maps.event.addListener(drawingManager, 'overlaycomplete', function (e) {
        if (e.type !== google.maps.drawing.OverlayType.MARKER) {
            // Switch back to non-drawing mode after drawing a shape.
            drawingManager.setDrawingMode(null);
    
            // Add an click event listener for newly-drawn shape
            // and remove polygon vertex if it was clicked
            var newShape = e.overlay;
            google.maps.event.addListener(newShape, 'click', function (e) {
                if (e.vertex !== undefined) {
                    if (newShape.type === google.maps.drawing.OverlayType.POLYGON) {
                        var path = newShape.getPaths().getAt(e.path);
                        path.removeAt(e.vertex);
                        if (path.length < 3) {
                            newShape.setMap(null);
                        }
                    }
                    if (newShape.type === google.maps.drawing.OverlayType.POLYLINE) {
                        var path = newShape.getPath();
                        path.removeAt(e.vertex);
                        if (path.length < 2) {
                            newShape.setMap(null);
                        }
                    }
                }
            });
        }
    });