如何从geoJson加载中获取功能?

时间:2016-07-01 13:23:25

标签: javascript openlayers-3

我有一些GeoJson加载到openlayers 3矢量图层

load

我想使用

运行该源中的所有功能

var countriesLayer = new ol.layer.Vector({ source: new ol.source.Vector({ url: '/data/countriesandstates.geojson', format: new ol.format.GeoJSON() }), style: function (feature, resolution) { countriesLayerTextStyle.getText().setText(resolution < 5000 ? feature.get('name') : ''); return [countriesLayerStyle,countriesLayerTextStyle]; } });

然而它从不调用我的回调,如果我尝试getFeatures(),我会得到一个空数组。但它渲染得很好所以我知道数据已加载。我甚至尝试在超时后的5秒内完成,以确保它已被加载和解析。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

在您的功能添加(AJAX)到源时收听:

countriesLayer.getSource().on('addfeature', function() {
  // process further
});

// or just once
countriesLayer.getSource().once('addfeature', function() {
  // process further
});

答案 1 :(得分:2)

这似乎有效:

countriesLayer.getSource().on("change", function(ev) {
    if( countriesLayer.getSource().getState() === "ready" ) {
        console.log(countriesLayer.getSource().getFeatures().length)
    }
});