OpenLayers 3 - 获取渲染要素的应用样式

3

是否可能获取所选要素的应用样式?我的图层使用样式函数而不是ol.style.Style。当我调用myFeature.getStyle()时,它返回该函数。

根据这里和其他地方的回复,更新了我的问题并尝试了一些方法。

最终我为每个图层创建了一个选择样式函数。

这种方式不起作用,不会返回任何样式:

selectInteraction = new ol.interaction.Select( {
    style: function( feature, resolution ) {
        if ( feature.selectStyle ) {
            return feature.selectStyle;
        }
    },
    layers: mylayers
} );

此外,使用上述方法我遇到了以下错误:
Uncaught TypeError: style.getImage is not a function
    ol.renderer.vector.renderFeature                @ol.js:38455
    ol.renderer.canvas.VectorLayer.renderFeature    @ol.js:44202
    renderFeature                                   @ol.js:44148
    ol.renderer.canvas.VectorLayer.prepareFrame     @ol.js:44164
    ol.renderer.canvas.Map.renderFrame              @ol.js:45268
    ol.Map.renderFrame_                             @ol.js:52034
    (anonymous function)                            @ol.js:50898

这确实有效,该功能使用我的选择样式进行呈现。但是,我不想管理重新设置样式,因此它真的需要在selectInteraction中实现:
evt.selected.forEach( function( evt ) {
    evt.setStyle( evt.selectStyle );
}, this );
3个回答

3

我的解决方法是将样式与特性分开创建,然后使用setStyle()应用它。 我还在特性的其他位置保存了该样式,以便稍后检索。

let myStyle = new ol.style.Style({
    image: new ol.style.RegularShape({
        fill: new ol.style.Fill({
            color: 'cyan'
        }),
        stroke: new ol.style.Stroke({
            color: 'black',
            width: 1
        }),
        points: 4,
        radius: 9,
        angle: Math.PI / 4
    }),
});
myFeature.setStyle(myStyle);
myFeature.set('myStyle', myStyle); // save it for later use

在“选择”过程中,只需使用以下选项:

feature.get('myStyle');

获取应用于特性的样式。


这个解决方法很好!感谢分享! - GLindqvist

1
你应该使用功能(如果您的样式函数依赖于它,则可以选择分辨率)来调用该函数。所以类似这样:myFeature.getStyle().call(this, feature); 或 myFeature.getStyle().call(this, feature, resolution);

我尝试过这个,但是myFeature.getStyle()返回null。当要素已被设置样式时,为什么feature的styleFunction_属性未定义? - MoreScratch

0

我认为你应该使用myFeature.getStyleFunction()而不是myFeature.getStyle()

祝你好运。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接