【问题标题】:Style Function for Labelled Features with Selected Style具有选定样式的标记特征的样式函数
【发布时间】:2015-10-28 00:06:14
【问题描述】:

我是一个 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,我将无法从用于标记的功能。

似乎我可以拥有一个,但不能拥有另一个。

【问题讨论】:

  • 为什么选择 OpenLayers 3.0.0?最新版本是 3.10.1,自 3.0 以来完成了许多功能和错误修复。
  • 我个人喜欢保持最新。今天早上我正在考虑升级,据我所知,我们的代码中只有 2 个重大更改,所以如果我能说服团队,我可能会在本周晚些时候升级。
  • 是的,自 3.0 以来,大多数事情都得到了改进。如果不出意外,文档会更完整。我注意到我在回答中建议的样式选项在 3.0.0 文档中没有记录。

标签: openlayers-3


【解决方案1】:

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

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

【讨论】:

  • 这似乎是我丢失的关键信息。谢谢你的解释!
猜你喜欢
  • 1970-01-01
  • 2014-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
  • 2020-11-30
相关资源
最近更新 更多