javascript - OpenLayers 切换功能可见性(显示/隐藏)
问题描述
我试图在点击时显示或隐藏功能。
我有很多不同颜色的点,我正在尝试将不透明度更改为 0/1。
我设法做的是设置 2 种不同的功能样式并在单击时使用 setStyle。
我可以隐藏一个功能,但是当我尝试取消隐藏它时,所有功能都变成了我使用的相同图像,而不是使用它们在隐藏之前的颜色。我将尝试通过图片示例和一些代码片段更好地解释。图 1 显示地图加载时的功能,图 2 显示切换到隐藏时的功能,图 3 显示切换到显示时的功能(我不希望功能的样式像这样,我希望功能的样式与图 1 中的一样)
这是代码片段:
//visible style
var visibleStyleIcon = {
Point: [
new ol.style.Style({
image: new ol.style.Icon({
src: "https://openlayers.org/en/latest/examples/data/dot.png",
opacity: 1,
}),
}),
],
};
// invisible Style Icon Opacity
var invisibleStyleIcon = {
Point: [
new ol.style.Style({
image: new ol.style.Icon({
src: "https://openlayers.org/en/latest/examples/data/dot.png", //still need something even if it's invisible
opacity: 0,
}),
}),
],
};
forEachFeatureInExtent(extent, function (feature) {
if (
Object.values(Object.values(feature.get("info"))[0][2])[1] === t
) {
if (e.target.className === "menu-selector2")
feature.setStyle(
invisibleStyleIcon[feature.getGeometry().getType()]
);
if (e.target.className === "menu-selector")
feature.setStyle(
visibleStyleIcon[feature.getGeometry().getType()]
);
}
});
那么有没有办法将功能的不透明度设置为 0 或 1?
我试过这个没有成功。
var style = feature.getStyle();
var color = style.getFill().getColor();
var colorArray = ol.color.asArray(color).slice();
colorArray[3] = 1;
style.getFill().setColor(colorArray);
feature.setStyle(style);
selectedLayer.redraw();
我也发现了这个:
feature.getStyle().getImage().setOpacity(0);
但是该功能显示/隐藏具有相同样式的所有点,而不仅仅是选定的点。例如,如果我想隐藏 1 个要素及其一个灰色圆圈,它将在范围内隐藏所有灰色圆圈。
解决方案
层setStyle
方法将遍历该层的所有特征。
你应该有一个像这个例子这样的函数,每次你想要基于特定条件的样式特性(它可以是特性 id 或任何其他属性)你可以调用这个函数并传递图层和featureId并相应地设置你的特性。
function setLayerStyle(layer, featureId) {
layer.setStyle(feature => {
if (feature.getProperties().id === featureId) {
return style a
} else {
return style b
}
})
}
推荐阅读
- java - 使用 AWS Java SDK 从 S3 读取文本文件
- java - @Before 和 @AfterReturning 组合可能吗?
- javascript - 如何删除字符串和数字表达式的边缘情况
- javascript - 具有主从关系的数据表 ajax xml 显示
- java - JPA Repository.findByAll() 返回 null 但一切都存在于 db
- python - Python OpenCV:将图像裁剪为内容,并使背景透明
- reactjs - 如何从 Github 页面手动升级软件包?
- javascript - 来自 Db 的 Datetimepicker 设置值
- reactjs - ReactJS 应用程序中的配置文件
- r - R Modify dataframes to the same length