2015-04-24 71 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();