我试图在点击它之后绘制该功能的图标(定义为OpenLayers.Feature.Vector)(与原始图标不同,在同一点)。点击工作的过程非常好,但我想更改点击功能的图形,我有问题。
我在做什么?
首先,我声明两个图层(一个用于原始的可选特征,然后用于在选择第一个特征之后绘制的特征)并将其添加到地图中:
var firstLayer = new OpenLayers.Layer.Vector('Layer1');
map.addLayer(firstLayer);
var selectedLayer = new OpenLayers.Layer.Vector('Selected');
map.addLayer(selectedLayer);
这些图层是可点击的,适当的处理程序可以附着在它们上面。更重要的是,我为可以在两个图层上绘制的特征创建样式:
// Styling feature of type1 for Layer1
type1Marker = openLayers.Util.applyDefaults(type1Marker, openLayers.Feature.Vector.style['default']);
type1Marker.externalGraphic = "somefile.svg";
type1Marker.pointRadius = iconsRadius;
type1Marker.fillOpacity = 1;
// Styling feature of type1 for Selected layer
type1MarkerSelected= openLayers.Util.applyDefaults(type1MarkerSelected, openLayers.Feature.Vector.style['default']);
eventObdConnectionLostIconSelectedStyle.externalGraphic ="somefile_selected.svg";
type1MarkerSelected.pointRadius = iconsRadius;
type1MarkerSelected.fillOpacity = 1;
// Styling feature of type2 for Layer1
type2Marker = openLayers.Util.applyDefaults(type2Marker, openLayers.Feature.Vector.style['default']);
type2Marker.externalGraphic = "somefile2.svg";
type2Marker.pointRadius = iconsRadius;
type2Marker.fillOpacity = 1;
// Styling feature of type2 for Selected layer
type2MarkerSelected= openLayers.Util.applyDefaults(type2MarkerSelected, openLayers.Feature.Vector.style['default']);
type2MarkerSelected.externalGraphic = "somefile2_selected.svg";
type2MarkerSelected.pointRadius = iconsRadius;
type2MarkerSelected.fillOpacity = 1;
然后在不同的点创建Layer1的一些功能。我将这些功能存储在一些功能扩展中,这些功能通过我稍后使用的一些额外数据进行扩展,以区分我想要使用的标记的类型,并将标记的位置存储在地图上。现在,点击任何功能后会出现一些逻辑:
var size = new OpenLayers.Size(30, 30);
var offset = new OpenLayers.Pixel(-(size.w / 2), -size.h);
var icon = new OpenLayers.Icon('http://www.openlayers.org/dev/img/marker.png', size, offset);
var marker = new OpenLayers.Feature.Vector(closestPoint, icon);
var markerSel = new OpenLayers.Feature.Vector(closestPoint.event.point, icon);
switch (closestPoint.type) {
case "type1":
markerSel.style = type1MarkerSelected;
break;
case "type2":
markerSel.style = type2MarkerSelected;
break;
}
var selectedLayer = map.getLayersByName('Selected')[0];
if (selectedLayer.features.length != 0)
selectedLayer.removeAllFeatures();
selectedLayer.addFeatures(markerSel);
selectedLayer.redraw({ force: true });
对我来说真的很奇怪,即:从Layer1点击标记后没有任何反应,然后如果我滚动地图它会消失,最后当我滚动更多时,标记会显示我想要的样式(选择一个)。特别是Layer1中的特征消失是我根本无法获得的 - 为什么它在没有执行该层的操作时消失了?我想将新图标堆叠在Layer1的上方(zOrdering of the map设置为true,Layer1在Selected图层之前定义)。
有人知道可能导致问题的原因吗?我花了几个小时试图解决它,但现在我没有想法。提前谢谢!