【问题标题】:Google Maps V3: drawing libraryGoogle Maps V3:绘图库
【发布时间】:2011-11-19 10:42:12
【问题描述】:

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

  1. Documentation 只提到了overlaycompleted{overlay}completed 事件,但我也提到了found drawingmode_changed 事件。某处是否有事件列表?

  2. 除了等到我们完成绘制并使用带有overlaycompleted 的侦听器(如上例中所做的那样)之外,还有其他方法可以获取我们正在绘制的多边形的引用(对象)吗?

  3. 有没有一种方法可以从多边形中删除顶点,只需单击它们?如果没有,你会怎么做?

【问题讨论】:

    标签: google-maps-api-3 drawing


    【解决方案1】:

    您可以像这样在完成时调用任何覆盖事件。

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

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

    我知道这个问题很老,但我还是想分享我的答案。

    【讨论】:

      【解决方案2】:

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

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

      2. 也找不到解决办法。

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

      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);
                          }
                      }
                  }
              });
          }
      });
      

      【讨论】:

      • 答案 3 真的帮助了我。 7年后,这仍然有用。几乎不可能找到这个信息。非常感谢。
      【解决方案3】:

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

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

      2. 我找不到。

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

      我希望这对其他人有所帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-15
        • 1970-01-01
        • 1970-01-01
        • 2012-01-25
        • 1970-01-01
        • 2012-06-08
        • 2012-10-14
        • 2013-10-03
        相关资源
        最近更新 更多