2013-05-21 148 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(); 
       } 
      } 
     }