2013-03-18 135 views
0

我使用的OpenLayers来绘制一个集群战略地图上的点的功能。的OpenLayers点击选择功能触发功能

 strategy = new OpenLayers.Strategy.Cluster(); 

     clusters = new OpenLayers.Layer.Vector("Clusters", { 
      strategies: [strategy], 
      styleMap: new OpenLayers.StyleMap({ 
       "default": style, 
       "select": { 
        fillColor: "#ff0000", 
        strokeColor: "#ffbbbb" 
       } 
      }) 
     }); 

     [.......] 

     clusters.addFeatures(features); 

我还在使用SelectFeature选择地图上的点要素。

 select = new OpenLayers.Control.SelectFeature(
       clusters, { 
        clickout: false, 
        toggle: false, 
        hover: false 
       } 
      ); 

     map.addControl(select); 
     select.activate(); 

     clusters.events.on({"featureselected": clickPoint}); 

当用户选择群集功能时,会弹出一个包含要选择的功能列表。当他选择其中一个弹出式关闭并且聚集功能保持选定状态时。

现在出现这个问题。我希望能够点击群集功能,以便弹出窗口再次出现。我能做的唯一事情就是设置切换:true,但是这个功能会被取消选中。

当用户点击选定的功能时,是否有办法触发事件?

Thx提前, 意利

回答

1

为了解决这个问题,我改写unselectAll为:

mySelectControl.unselectAll = function(options) { 
    OpenLayers.Control.SelectFeature.prototype.unselectAll.apply(
           mySelectControl, arguments); 
    if (options && options.except) { 
     var myReselecteFeature = options.except; 
     ... your code to show the popup of myReselecteFeature ... 
    } 
}; 

你可能会有兴趣看看下面这个例子:

http://jorix.github.com/OL-FeaturePopups/examples/feature-popups.html

这是一个控制,你做这个,做一点点。例如在使用群集缩放后保留选择。

注:默认行为是不是你在找什么,但可以定制。

+0

THX,解决方案行之有效我! – manilly 2013-03-19 09:03:16

0

选择功能时,您也可以取消选择您的功能。对我而言,这是实现该功能点击事件的最短途径。如果发生点击,还可以将切换标志设置为true以触发取消选择事件。

var pdfFeatureSelector = new OpenLayers.Control.SelectFeature(pdfLayer,{ 
     clickout: true, 
     multiple: true, 
     toggle: true, 
     autoActivate: true, 
     onSelect: function(){ 
      OpenLayers.Control.SelectFeature.prototype.unselectAll.apply(
        pdfFeatureSelector);//unselect the feature when it is selected 
     } 
});