环境
Openlayers v4.6.5
背景
添加vectorLayer以后,需要定位并居中要素。但是在map.addLayer(vector);
后直接用vectorLayer.getSource().getFeatures()
获取要素是取不到的,原因是加载图层是异步的,在获取feature的时候图层并没有加载完成。所以获取前,要先判断一下图层是否加载完成才行。
解决方案
对vectorsource添加change的监听事件
// 因为是异步加载,所以要采用事件监听的方式来判定是否加载完成
var ls = _lyr.getSource().on('change', function () {
if (_lyr.getSource().getState() === 'ready') {
// 获取要素四至
let extent = _lyr.getSource().getExtent();
let view = encMap.encmap.getView();
view.fit(extent);
// 注销监听
_lyr.getSource().un(ls);
}
});