具有选定样式的标记特征的样式函数

Style Function for Labelled Features with Selected Style

我是一个 OpenLayers 新手,我使用的是 v3.0.0。

我最近在我的地图中添加了一个样式函数代码来显示特征标签,使用了一些我在网上找到的代码:

function labelStyle(feature, resolution) {
    var text = '';

    if (options.showLabels && (resolution < 80)) {
        text = feature.get('name');
    }

    if (!styleCache[text]) {
        styleCache[text] = [
            new window.ol.style.Style({
                stroke: new window.ol.style.Stroke({ color: [0, 153, 255, 1], width: 2.5 }),
                fill: new window.ol.style.Fill({ color: [0, 255, 0, 0.1] }),
                text: new window.ol.style.Text({
                    font: '16px Calibri,sans-serif',
                    text: text,
                    fill: new ol.style.Fill({
                        color: [255, 255, 255, 1]
                    }),
                    stroke: new ol.style.Stroke({
                        color: [0, 0, 0, 1],
                        width: 3
                    })
                })
            })
        ];
    }

    return styleCache[text];
}

这很好用,我可以在创建矢量图层时传递这个函数而不是样式,标签现在出现在特征的中心。但是,如果我 select 一个特征,标签就会消失。

所以我的目标是能够将此样式应用于 selected 功能。

我看过 StyleMap 的代码,您可以在其中为 defaultselect 等定义样式。但是如果我实现这个 StyleMap,我无法从要素中获取名称以用于标记。

看来我可以有一个,但另一个不行。

ol.interaction.Select 从原始图层中删除选定的要素,并将它们添加到单独的图层/FeatureOverlay。因此,用于图层的任何样式都不适用于从图层中选择(离开)的功能。

ol.interaction.Select 接受 style 选项,就像 ol.layer.Vector 一样,它适用于所选功能。在交互选项中包含您的样式功能,您应该可以开始了。