2015-04-24 69 views
0

我使用Opnelayers控制功能的OpenLayers - 如何在功能

OpenLayers.Control.SelectFeature 

的選擇,當我觸發一次點擊事件,然後得到的特徵選擇及其對我工作的罰款使用單和雙擊事件。現在我想爲其他操作使用雙擊事件。

我從這個鏈接feature to have both a single click and double click event?

我已經使用了相同的代碼和工作的罰款都點擊事件,但我不能讓在其上單擊事件執行的功能的想法。這是密碼

handler = new OpenLayers.Handler.Click(
    select, 
    { 
     click: function(evt) 
     { 

      var feature = this.layer.getFeatureFromEvent(evt); 

      console.log(feature); // output null 

      if(this.layer.selectedFeatures){ 
       this.unselect(this.layer.selectedFeatures[0]); 
      } 
     }, 
     dblclick: function(evt) 
     { 
      // some other operation 
     } 
    }, 
    { 
     single: true, 
     double: true, 
     stopDouble: true, 
     stopSingle: true 
    } 
); 

handler.activate(); 

任何想法這個代碼中缺少哪些東西?

謝謝

回答

0

我已經在類似的情況,使用的層源的getClosestFeatureToCoordinate方法。代碼會是這樣的:

click: function(evt) { 
    var coord = evt.coordinate; 
    var source = this.layer.getSource(); 
    var feature = source.getClosestFeatureToCoordinate(coord); 
    // do something with feature 
} 
+0

不幸的是,我使用的OpenLayers 2.x版解決您的答案。我沒有在這個版本中找到layer.getSource()函數。 –

+0

對不起,我不太熟悉2.x版本。你有沒有嘗試過使用OpenLayers.Control.SelectFeature類?在http://dev.openlayers.org/examples/select-feature.html有一個例子 – prdnr

0

我已經這樣做了。

click: function(evt) { 

    var pos = map.getLonLatFromPixel(xy); 
    var point = new OpenLayers.Geometry.Point(pos.lon, pos.lat); 


    var list = $.map(this.layer.features, function(v) { 
      return v.geometry.distanceTo(point); 
    }); // get distance of all features 

    var min = (Math.min.apply(null, list)); // minimum distance 

    var closest = $.map(this.layer.features, function(v) { 
      if (v.geometry.distanceTo(point) == min) 
        return v; 
    }); 


    feature = closest[0]; 

}

0

對於上面的問題,這可能與一些變化

var handler = new OpenLayers.Handler.Click(
layerName, { 
    click: function(evt) { 
    console.log('click has triggered'); 
    var feature = layerName.getFeatureFromEvent(evt); 
    } 
    ,dblclick: function(evt) { 
    console.log('dblclick has triggered'); 
    } 
},{ 
    single: true 
    ,double: true 
    ,stopSingle: true 
    ,stopDouble: true 
} 
); 
handler.activate();