我是一个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
的代码,您可以在其中为default
,select
等定义样式。但是,如果我实现此StyleMap
,我无法从功能中获取用于标记的名称。
似乎我可以拥有一个而不是另一个。
答案 0 :(得分:4)
ol.interaction.Select
从原始图层中删除所选要素,并将其添加到单独的图层/ FeatureOverlay
。因此,用于图层的任何样式都不适用于从中选择(离开)的特征。
ol.interaction.Select
接受style
选项,就像ol.layer.Vector
一样,适用于所选功能。在交互选项中包含您的样式函数,您应该很高兴。