Openlayers源码实践系列:ol.layer.Vector矢量地图图层获取要素为空的问题原因分析及解决(基于版本6,数据使用GeoJSON)

前言

ol.layer.Vector(vectorLayer)是我们在OpenLayers开发中使用非常频繁的一个图层容器类,有时我们需要在交互中获取矢量图层中的要素(Feature)对象,但是在某些情形下,自己觉得毫无问题的代码,却无法获取到想要的数据。

本文结合源码浅析一下这个问题的原因,并提出解决的方法。

现象

先来看一段代码:


var vectorLayer = new VectorLayer({
  source: new VectorSource({
    url: "data/geojson/countries.geojson",
    format: new GeoJSON()
  })
});

var map = new Map({
  layers: [vectorLayer],
  target: "map",
  view: new View({
    center: [0, 0],
    zoom: 1
  })
});

console.log(vectorLayer.getSource().getFeatures());

这是一段来自OpenLayers官方实例的很简单的代码,在代码的最后一行,我使用了getFeatures()方法来获取VectorSource对象中的所有要素,期待的输出应该是在控制台输出一个Feature对象的数组。

然而实际运行的结果是:

得到的是一个空数组。那么程序运行的时候是没有得到数据吗?看一下渲染的地图:

你可能感兴趣的:(OpenLayers,6源码解析)