删除多边形谷歌地图API v3的顶点

时间:2014-02-11 22:11:20

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

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

当我为用户创建初始多边形时,我在:

中添加了此事件侦听器
google.maps.event.addListener(myPolygon.getPath(), 'insert_at', function(event){
  var numPoints = myPolygon.getPath().length;

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

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

  

未捕获的TypeError:无法读取未定义的属性“b”。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

要点:


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