2013-04-10 116 views
0

我想要一個簡單的測試,我有一個可拖動功能頂部的基礎圖像。這些點要素具有相關的外部圖形(我傾向於使用具有關聯圖形的多邊形,但這是另一個問題)。OpenLayers:無法選擇功能後點擊

我有一個完美的懸停控制。我也有一個幾乎可以工作的選擇控件。但是,一旦我點擊了一次,我就無法重新選擇一個功能。同樣,如果在嘗試選擇特徵之前單擊特徵之外的任何地方,我都無法選擇特徵。

我希望這是明確的 - 但如果沒有那麼這個例子應該是(你也可以看到整個代碼)http://sigfrid.co.uk/oltest/simple.html

我把我認爲是下面的代碼的鍵位....

創建地圖

var map = new OpenLayers.Map({ 
    div:'map', 
}); 

添加基底層

var base = new OpenLayers.Layer.Image(
    'Base level', 
    'img/base.png', 
    new OpenLayers.Bounds(-1000, -1000, 1000, 1000), 
    new OpenLayers.Size(864,864), 
    options 
); 
map.addLayer(base); 

樣式添加

var markerStyleMap = new OpenLayers.StyleMap 
({ 
    "default": new OpenLayers.Style(template, {context: context}), 
    "hover": new OpenLayers.Style ({graphicOpacity:0.5}), 
    "select": new OpenLayers.Style ({graphicOpacity:0.1})}); 

添加點

pt1 = new OpenLayers.Geometry.Point(0,0); 
pt1Feature = new OpenLayers.Feature.Vector(pt1); 
... 
markerLayer.addFeatures([pt1Feature,pt2Feature,pt3Feature]); 

添加獨特查找的不同標記圖像

var lookup = { 
    "f1": {externalGraphic:"img/f1.png"}, 
    "f2": {externalGraphic:"img/f2.png"}, 
    "f3": {externalGraphic:"img/f3.png"}, 
} 

markerStyleMap.addUniqueValueRules("default", "type", lookup); 
markerLayer.styleMap = markerStyleMap; 
markerLayer.features[0].attributes.type = "f1"; 
    ... 

添加控件

var dragControl = new OpenLayers.Control.DragFeature(markerLayer) 
map.addControl(dragControl); 
dragControl.activate(); 

var highlightCtrl = new OpenLayers.Control.SelectFeature(markerLayer, { 
    hover: true, 
    highlightOnly: true, 
    renderIntent: "hover", 
}); 
map.addControl(highlightCtrl); 
highlightCtrl.activate(); 


var selectCtrl = new OpenLayers.Control.SelectFeature(markerLayer, { 
    clickout: true,   
    renderIntent: "select", 
}); 
map.addControl(selectCtrl); 
selectCtrl.activate(); 

感謝您的幫助,

尼克

回答