具有所选样式的标记要素的样式函数

时间:2015-10-27 13:37:05

标签: openlayers-3

我是一个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];
}

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

所以我的目标是能够将这种风格应用于所选的功能。

我已经看到了StyleMap的代码,您可以在其中为defaultselect等定义样式。但是,如果我实现此StyleMap,我无法从功能中获取用于标记的名称。

似乎我可以拥有一个而不是另一个。

1 个答案:

答案 0 :(得分:4)

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

ol.interaction.Select接受style选项,就像ol.layer.Vector一样,适用于所选功能。在交互选项中包含您的样式函数,您应该很高兴。

相关问题