我正在尝试一个简单的测试,其中我有一个带有可拖动功能的基本图像。这些点特征具有相关的外部图形(我更喜欢使用具有相关图形的多边形,但这是另一个问题)。
我有一个完美的悬停控件。我也有一个几乎可以工作的选择控件。但是,一旦点击一下,我就无法重新选择一个功能。同样,如果我在尝试选择一个功能之前点击功能之外的任何地方,我就无法选择功能。
我希望这很明确 - 但如果没有,那么这个例子应该是(你也可以看到整个代码)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();
感谢您的帮助,
尼克
答案 0 :(得分:2)
结果拖动并且选择不兼容。但是,有一些工作,如
http://fastr.wordpress.com/2012/04/17/openlayers-selectfeature-where-did-i-clicked-2/
虽然这确实增加了一些事件问题......