不透明度不适用于 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 可以应用默认样式,您需要遍历这些功能并删除样式。参见