【问题标题】:Delete a vertex of polygon google maps API v3删除多边形的顶点 google maps API v3
【发布时间】:2014-02-11 22:11:20
【问题描述】:

所以有很多关于如何删除谷歌地图多边形顶点的帖子。他们都没有为我工作 - 这可能是由于他们引用过时的 API。我试图限制用户可以在多边形上创建的点数。如果他们创建了超过一定数量的点,我想以编程方式触发谷歌地图内置的“撤消”功能,或者通过某种方式删除最后创建的顶点。

当我为用户创建初始多边形时,我将这个事件监听器添加到:

google.maps.event.addListener(myPolygon.getPath(), 'insert_at', function(event){
  var numPoints = myPolygon.getPath().length;

  if(numPoints == 5){
    myPolygon.getPath().removeAt(4);
  }
});

这最终会从多边形中删除一个点(不一定是最后创建的点)。有时会导致以下错误:

未捕获的类型错误:无法读取未定义的属性“b”。

我尝试在多边形上使用“点击”侦听器,但是当用户创建新顶点时点击事件不会触发。它仅在单击实际的多边形形状时触发。

【问题讨论】:

    标签: javascript google-maps google-maps-api-3


    【解决方案1】:

    我猜你正在使用自动完成的路径(第一个 LatLng 不等于最后一个 LatLng)

    当您尝试从自动完成的路径中删除最后一个 LatLng 时,似乎存在错误。

    此错误不会阻止您删除该点,稍后会发生错误(我猜当 API 更新可编辑多边形的 UI 时)。 您可以简单地使用 try/catch 语句来绕过此错误。

    与移除点的位置有关:新创建的点不会插入到路径的末尾,它会插入到放置它的点之间。 当您在 point1(index 0) 和 point2(index 1) 之间插入一个点时,新创建的点将具有索引 1。

    您可以使用回调的第一个参数来检索此索引。

    总结:


    google.maps.event.addListener(myPolygon.getPath(), 'insert_at', function(index){
      if(this.getLength() > 4){
        try{
          this.removeAt(index);
        }catch(e){}
      }
    });
    

    【讨论】:

    • 那是我的问题。删除点时,自动完成的多边形无法正常工作,但只要最后一个点等于第一个点,它就可以正常工作。 jsbin.com/wipuv/2/edit 不起作用,而 jsbin.com/wipuv/3/edit 起作用。
    • 对不起,我必须收回。如果第一个点等于最后一个点,如果有人在编辑过程中选择移动第一个或最后一个点,它仍然不起作用。例如我的链接中的三角形有 4 个点,当有人移动第一个/最后一个点然后在它们之间插入一个新点时会引发错误。
    • 当我发现错误时就像一个魅力。感谢您的洞察力。 :)
    猜你喜欢
    • 2012-02-08
    • 2012-01-01
    • 2012-04-25
    • 1970-01-01
    • 2016-06-17
    • 2014-05-09
    • 2023-03-12
    • 1970-01-01
    • 2016-07-20
    相关资源
    最近更新 更多