2016-07-01 3 views
1

У меня есть GeoJSON загрузку в векторном слое OpenLayers 3Как получить функции от загрузки geoJson?

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]; 
     } 
    }); 

Я хочу, чтобы пробегать все функции в этом источнике, используя

countriesLayer.getSource().forEachFeature(...);

Однако он никогда не называет свою функцию обратного вызова, и если я попробую getFeatures(), я получу пустой массив. Однако он отлично выглядит, поэтому я знаю, что данные загружены. Я даже попытался сделать через 5 секунд таймаут, чтобы убедиться, что он загружен и проанализирован.

Что я делаю неправильно?

ответ

2

Это похоже на работу:

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

Слушайте, когда ваши функции будут добавлены (AJAX) на источник:

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

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

Спасибо! Моя проблема заключалась также в том, что я дважды строил слой (и, следовательно, не загружал тот, на который я смотрел, думаю). – MrPurpleStreak

+0

Как только это называется, кажется, что все функции теперь есть - есть ли способ получить одно «загруженное» событие? – MrPurpleStreak

+0

@MrPurpleStreak вы можете использовать 'once' вместо' on'. –

Смежные вопросы