如果没有地图刷新,Openlayers功能不会被绘制

时间:2014-06-05 14:27:14

标签: javascript openlayers

我试图在点击它之后绘制该功能的图标(定义为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图层之前定义)。

有人知道可能导致问题的原因吗?我花了几个小时试图解决它,但现在我没有想法。提前谢谢!

0 个答案:

没有答案