ImageVector与renderMode:' image'与OpenLayers 4.6中的选择风格

时间:2018-03-16 15:15:15

标签: openlayers openlayers-3

将我的代码从ol.layer.Imageol.source.ImageVector升级到ol.layer.VectorrenderMode: 'image'upgrade notes中所述,我注意到有关选择的行为有改变:

在升级之前,选择显示在所有其他图层的顶部。所选功能的所有表示都保留在原位。现在,选择似乎取代了所有其他表示。

我创造了一个小提琴来说明问题:https://jsfiddle.net/4ke2ad0j/47/

我们有两层:

  • layerOutline:显示要素轮廓的法线矢量图层,用于选择互动
  • layerText:描述图层,显示功能属性中的标签属性

layerText以两种不同的方式创建:一种使用新renderMode: 'image',另一种使用ImageVector。使用新模式的模式在选择时消失:

Different implementations with a selected feature

有没有人知道如何在不使用已弃用的ImageVector的情况下取回旧行为?

更改选择StyleFunction不是一个选项,因为我需要一种风格来进行大量不同的功能表示。

提前致谢!

1 个答案:

答案 0 :(得分:0)

ImageVector图层是绘制为图像的图层,不会在选择时刷新。因此,您可以在选择下看到所选的特征。

选择时会重新绘制矢量图层,所选的特征不会因此您只能看到所选样式的选区。

所以选择的StyleFunction是你唯一的选择。

如果您需要大量的表示,可以在选择的StyleFunction中调用默认样式函数并在其上面添加一个新样式:

// style used for selection (should be an overlay to be the most flexible)
function styleSelect(feature, resolution) {
  // Call the default style
  var style = [ styleText(feature, resolution) ];
  // Add red outline
  var outline = new ol.style.Style({
    stroke: new ol.style.Stroke({
      width: 2,
      color: '#f00'
    })   
  });
  style.push(outline);
  return style;
}

请参阅https://jsfiddle.net/Viglino/zz2t9jdf/