2013-03-18 114 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 
     } 
});