2

我想在按钮上捕捉一个click事件。Draw Polygon但 DrawingManager API 仅提供overlaycomplete事件(多边形完成、圆形完成等)。如何click在这些按钮上添加事件?特别是如果地图上已经有一个多边形形状,我想禁止绘制第二个多边形。所以我想click为按钮添加一个处理程序Draw Polygon并返回否定响应。

升级版:

所以我做了如下:

onDrawingmode_changedListener = google.maps.event.addListener(drawingManager, 'drawingmode_changed', function(e) {
   if(this.getDrawingMode() == "polygon") {
      if(polygon) {
         alert("You already have one polygon shape on the map. Remove it in order to draw a new one.");
         this.setDrawingMode(null);
      }
   }
});
4

1 回答 1

3

没有实现的方式来访问这些控件。你有两个选择:

  1. 观察drawingmode_changedDrawingManager 实例的事件。当drawingmode设置为 时google.maps.drawing.POLYGON,将其设置为null(将不再可能绘制多边形)

  2. 更新drawingManager.drawingControlOptions.drawingModes。将它设置为一个包含所有覆盖类型的数组,除了google.maps.drawing.POLYGON(这将删除 POLYGON-control )。这里也设置drawingmodenull


drawingmode_changed-event的解释:

DrawingManager 实例是MVCObject。MVCObjects 有内置的属性设置器(set()setValues())。Maps-API 使用这些设置器来设置属性。每次使用这些方法时,将触发一个事件,其名称由属性名称和字符串组成_changed(例如,当您通过 setter 设置 anweather的属性时,将触发一个事件)。当您使用特定的 setter 函数(setZoom、setCenter、setMap 等)时,也会发生这种情况。MVCObjectweather_changed

因此,您可以假设对于_changedMVCObject 的每个属性,只要使用设置器(适用于内置属性和自定义属性),事件就会触发,无论该事件是否记录在案。

例子:

        google.maps.event.addListener(map,'weather_changed',function(){
          alert('it\'s '+this.get('weather'));
        });
         //this will fire a weather_changed-event
        map.set('weather','rainy');
         //this will not fire an event, because it doesn't use a setter-method
        map.weather='rainy';
于 2013-10-03T19:16:51.477 回答