2013-05-21 150 views
0

我有一些简单的代码,我从一个openlayers例子复制在地图上绘制几种不同类型的几何图形。问题是,无论何时选择“点”几何,我都失去了双击放大的能力。示例和我的代码之间的唯一区别是我正在注册处理程序以使用MOD_SHIFT,因为我想保留平移/缩放的能力。这里是一个代码snipit:OpenLayers DrawFeature控制与点摧毁双击放大

point: new OpenLayers.Control.DrawFeature(this.geometryFilterLayer, 
          OpenLayers.Handler.Point, 

          { 
           'done': console.info("drew point") 
          }, 

          { 
           keyMask: OpenLayers.Handler.MOD_SHIFT 
          } 
          ), 
         polygon: new OpenLayers.Control.DrawFeature(this.geometryFilterLayer, 
          OpenLayers.Handler.Polygon, 
          { 
           'done': console.info("drew polygon") 
          }, 

          { 
           keyMask: OpenLayers.Handler.MOD_SHIFT 
          } 
          ), 

关于上述代码有趣的是,在“完成”事件仅被当控制/处理程序创建解雇,并且键码不会在所有的工作 - 我必须遍历这个对象,并且每次都手动设置keyMask,但这不是真正的问题。

我试过了我能想到的所有注册dblclick事件的方法,但无论如何,我无法在双击时放大它。它适用于所有其他几何(bbox,点/半径和多边形)。

有人可以给我一些建议吗?

回答

0

我从来没有解决过这个问题,但最终完全废除了MOD_XXX。每个不同的绘图控件都有太多的内置功能,当你按住shift,ctrl,alt等等时会发生什么。我最终使用自定义按钮和工具栏,这样用户可以明确地选择绘图控件本身。

this.toolbar = new OpenLayers.Control.Panel({ 
       displayClass: 'olControlEditingToolbar' 
      }); 
      map.addControl(this.toolbar); 

var navButton = new OpenLayers.Control.Button({ 
       displayClass: "olControlNavigation", 
       title: "Navigation", 
       trigger: lang.hitch(this, function(data){ 
        this.toggleDrawControl("navigation"); 

        navButton.activate(); 
        pointButton.deactivate(); 
        bboxButton.deactivate(); 
        pointRadiusButton.deactivate(); 
        polygonButton.deactivate(); 
       }) 
      }); 

... 

this.toolbar.addControls([navButton, pointButton, bboxButton, pointRadiusButton, polygonButton]); 

,我的功能切换平局控制(可从外部调用,所以这就是为什么我重新调用激活和取消功能:

toggleDrawControl: function(geometryType){ 
      this.currentGeometryType = geometryType; 
      for(key in this.drawControls) { 
       var control = this.drawControls[key]; 
       if(geometryType == key) { 
        control.activate(); 
        this.drawingButtons[key].activate(); 
       } else { 
        control.deactivate(); 
        this.drawingButtons[key].deactivate(); 
       } 
      } 
     }