繁体   English   中英

OpenLayers:我不能在事件侦听器之外获取VectorSource的功能吗?

[英]OpenLayers: can't i get features of VectorSource outside of event listener?

我试图只显示我的Vector Source中的某个特征。 所以我做了这样的功能:

function showUtility(id) {
        utilitiesSource.forEach(function(i) {
            //console.log(i.getFeatures());
            i.forEachFeature(function(f) {
                if (f.getProperties().id == id) {
                    f.setStyle(null);
                } else {
                    f.setStyle([]);
                }
            });
        });
}

utilitiesSource来自哪里:

utilitiesSource = [];

var utilitySource = new ol.source.Vector({
                format: new ol.format.GeoJSON(),
                projection: 'EPSG:4326',
                url: 'someUrl',
                extractStyles: false
        });

utilitiesSource.push(utilitySource);

问题 console.log(i.getFeatures())showUtility()总是给空数组虽然很好,如果我是这样的一个事件侦听使用它:

    var selectCtrl = new ol.control.Select({
        source: utilitiesSource,
        property: $(".options select").val(),
        selectLabel: 'Cari',
        addLabel: 'Tambah Kondisi',
        allLabel: 'Cocokkan Semua',
        attrPlaceHolder: 'atribut',
        valuePlaceHolder: 'nilai'
    });

 selectCtrl.on('select', function(e) {
        select.getFeatures().clear();
        utilitiesSource.forEach(function(i) {
            //console.log(i.getFeatures()); --> gives array of feature
            i.forEachFeature(function(f) {
                f.setStyle([]);
            });
        })
        e.features.forEach(function(f) {
            f.setStyle(null);
        });
    });

    var bar = new ol.control.Bar({ 
      group: true,
      controls: [
        selectCtrl,
        new ol.control.Button({
          html: '<i class="fa fa-undo" ></i>',
          title: 'Reset',
          handleClick: function() {
            select.getFeatures().clear();
            utilitiesSource.forEach(function(i) {
                //console.log(i.getFeatures()); --> gives array of feature
                i.getFeatures().forEach(function(f) {
                    f.setStyle(null);
                });
            })
          }
        })
     ]});

如果我使用浏览器的控制台并执行utilitiesSource.forEach(function(i) { i.getFeatures().forEach(function(j){ if (j.getProperties().id == 100) {j.setStyle(null);} else {j.setStyle([])} });}); 我得到了我想要的东西

这是为什么? 为什么我无法获得showUtility(id)中的功能?

(仍然没有足够的声誉,所以我不得不在评论中笨拙地问问题-.-)

你有没有试过在setTimeout()之后调用你的函数? geojson源异步加载数据,因此即使在最后一行代码中调用它也可能为时过早。 我认为应该是最新的。

暂无
暂无

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

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