不透明度不适用于 openlayers 5 中 KML 图层的填充
Opacity is not applied for Fill for KML layer in openlayers 5
我目前正在将我们的 openlayers 从 2.x 升级到 5.3。
我们在服务器上有一些 KML 文件,它们应该在地图上显示为单独的图层。除了 KML 多边形的填充不应用颜色 alpha [r,g,b,alpha] 中提供的不透明度外,这在升级后工作得很好。
我知道这个问题经常被讨论,但建议 solution 总是包含在颜色的 alpha 中添加不透明度,这对我不起作用。我尝试同时使用颜色数组和通过 rgba 文本定义颜色。但 KML 内容填充的不透明度始终为 1。
但是,当我将不透明度字段添加到图层对象时,不透明度起作用了。但我只需要填充具有不透明度而不是描边。
由于这可能很有趣,我通过应用 OL3GM 项目在我的项目中集成了 Google 层。因此,ol.js 文件被这个 ol3gm 项目集成。
//pConfig contains all the relevant information
var lKmlLayers = [];
for(var i = 1; i < pConfig['kmlFiles'].length;++i) {
var lLayerName = getBaseName(pConfig['kmlFiles'][i][1]);
var lDropBoxPathParamValue = '?dropBoxPath=' + pConfig['kmlFiles'][i][0];
var lContextParamValue = '&context=' + pConfig['context'];
var lProjectIdParamValue = '&projectId=' + pConfig['projectId'];
var lKmlFileNameParamValue = '&kmlFileName=' + pConfig['kmlFiles'][i][1];
//here I define the fill color and set the opacity value
var fillColor = ol.color.asArray(pConfig['kmlFiles'][i][2]);
fillColor = fillColor.slice();
fillColor[3] = 0.3;
var strokeColor = ol.color.asArray(pConfig['kmlFiles'][i][2]);
strokeColor = strokeColor.slice();
strokeColor[3] =1;
lKmlLayers[i-1] = new ol.layer.Vector({
title:lLayerName,
source: new ol.source.Vector({
url: pConfig['context'] + '/filedata' + lDropBoxPathParamValue + lContextParamValue + lProjectIdParamValue + lKmlFileNameParamValue,
format: new ol.format.KML()
}),
style: new ol.style.Style({
fill: new ol.style.Fill({
color: fillColor
}),
stroke: new ol.style.Stroke({
color: strokeColor,
width: 1
})
}),
//opacity: 0.3//if I add this, the opacity is applied for the complete layer
});
}
未应用填充的不透明度。 KML 图层填充始终以不透明度 1 显示,尽管我将其设置为 0.3。有人可以告诉我为什么并告诉我如何解决这个问题吗?
感谢您的支持。
在这种情况下指定
format: new ol.format.KML({ extractStyles: false })
足以防止样式直接应用于要素并允许图层样式生效。在某些情况下,这可能不起作用,因为 OpenLayers 可以应用默认样式,您需要遍历这些功能并删除样式。参见
我目前正在将我们的 openlayers 从 2.x 升级到 5.3。 我们在服务器上有一些 KML 文件,它们应该在地图上显示为单独的图层。除了 KML 多边形的填充不应用颜色 alpha [r,g,b,alpha] 中提供的不透明度外,这在升级后工作得很好。
我知道这个问题经常被讨论,但建议 solution 总是包含在颜色的 alpha 中添加不透明度,这对我不起作用。我尝试同时使用颜色数组和通过 rgba 文本定义颜色。但 KML 内容填充的不透明度始终为 1。
但是,当我将不透明度字段添加到图层对象时,不透明度起作用了。但我只需要填充具有不透明度而不是描边。 由于这可能很有趣,我通过应用 OL3GM 项目在我的项目中集成了 Google 层。因此,ol.js 文件被这个 ol3gm 项目集成。
//pConfig contains all the relevant information
var lKmlLayers = [];
for(var i = 1; i < pConfig['kmlFiles'].length;++i) {
var lLayerName = getBaseName(pConfig['kmlFiles'][i][1]);
var lDropBoxPathParamValue = '?dropBoxPath=' + pConfig['kmlFiles'][i][0];
var lContextParamValue = '&context=' + pConfig['context'];
var lProjectIdParamValue = '&projectId=' + pConfig['projectId'];
var lKmlFileNameParamValue = '&kmlFileName=' + pConfig['kmlFiles'][i][1];
//here I define the fill color and set the opacity value
var fillColor = ol.color.asArray(pConfig['kmlFiles'][i][2]);
fillColor = fillColor.slice();
fillColor[3] = 0.3;
var strokeColor = ol.color.asArray(pConfig['kmlFiles'][i][2]);
strokeColor = strokeColor.slice();
strokeColor[3] =1;
lKmlLayers[i-1] = new ol.layer.Vector({
title:lLayerName,
source: new ol.source.Vector({
url: pConfig['context'] + '/filedata' + lDropBoxPathParamValue + lContextParamValue + lProjectIdParamValue + lKmlFileNameParamValue,
format: new ol.format.KML()
}),
style: new ol.style.Style({
fill: new ol.style.Fill({
color: fillColor
}),
stroke: new ol.style.Stroke({
color: strokeColor,
width: 1
})
}),
//opacity: 0.3//if I add this, the opacity is applied for the complete layer
});
}
未应用填充的不透明度。 KML 图层填充始终以不透明度 1 显示,尽管我将其设置为 0.3。有人可以告诉我为什么并告诉我如何解决这个问题吗? 感谢您的支持。
在这种情况下指定
format: new ol.format.KML({ extractStyles: false })
足以防止样式直接应用于要素并允许图层样式生效。在某些情况下,这可能不起作用,因为 OpenLayers 可以应用默认样式,您需要遍历这些功能并删除样式。参见