繁体   English   中英

如何从Openlayers 3中的功能获取图层?

[英]How to get a layer from a feature in Openlayers 3?

我无法找到从选择事件中的某个要素转到可能是其中一部分而无需遍历所有地图图层的所有要素,或者在创建时在每个要素中存储人工图层ID的图层。 这是不可能的吗?

ol.js 3.7.0 ol.interaction.Selection - > click - > callback(event){event.selected [0]}

在我的应用程序的另一部分,我想从功能到图层来确定功能上使用的样式,特别是它是否可见。

ol.Feature.getStyle()|| ol.Feature - >(图层?) - > getStyle()

您可以尝试使用过滤功能:

var select = new ol.interaction.Select({
    condition:  ...,
    filter: function(feature, layer){
        console.info(feature);
        console.info(layer.get('name'));
    }
});

UPDATE

我想出了这个原型方法,它完成了这项工作:

http://jsfiddle.net/jonataswalker/r242y7ke/

/**
 * This is a workaround.
 * Returns the associated layer.
 * @param {ol.Map} map.
 * @return {ol.layer.Vector} Layer.
 */
ol.Feature.prototype.getLayer = function(map) {
    var this_ = this, layer_, layersToLookFor = [];
    /**
     * Populates array layersToLookFor with only
     * layers that have features
     */
    var check = function(layer){
        var source = layer.getSource();
        if(source instanceof ol.source.Vector){
            var features = source.getFeatures();
            if(features.length > 0){
                layersToLookFor.push({
                    layer: layer,
                    features: features
                });
            }
        }
    };
    //loop through map layers
    map.getLayers().forEach(function(layer){
        if (layer instanceof ol.layer.Group) {
            layer.getLayers().forEach(check);
        } else {
            check(layer);
        }
    });
    layersToLookFor.forEach(function(obj){
        var found = obj.features.some(function(feature){
            return this_ === feature;
        });
        if(found){
            //this is the layer we want
            layer_ = obj.layer;
        }
    });
    return layer_;
};

select.on('select', function(evt){
    var feature = evt.selected[0];
    if(feature){
        var layer = feature.getLayer(map);

        console.info(layer.getStyle());
        console.info(layer.get('name'));
    }
});

在OL 5.3.0中,Select交互对象具有getLayer()函数以获取最后选定要素的关联图层。 例:

let selectClick = new Select({});
map.addInteraction(selectClick);

selectClick.on('select', function(e) {
    let featureSelected = e.selected[0];
    let layer = selectClick.getLayer(featureSelected);
    console.log(layer); // here you have the selected layer
});

在Openlayers 4中 - map.forEachFeatureAtPixel可用于获取每个要素的父层。

请参阅此处的代码段: https//stackoverflow.com/a/50415743/2288488

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM