2013-04-10 91 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(); 

感谢您的帮助,

尼克

回答