我有一个 OpenLayers 8.2 项目,其中地图中有多种类型的图层。正如 ol 6.14 中所介绍的,我正在使用地图对象的“loadstart”和“loadend”事件(https://openlayers.org/en/latest/examples/load-events.html)。
import { Map, View } from 'ol'
this.map = new Map({
...
});
this.map.on('loadstart', () => {
console.warn("loadstart");
});
这对于大多数类型的图层(TileWMS、ImageWMS、XYZ)都能完美触发,但不适用于矢量图层。矢量层使用具有自定义加载器功能的 VectorSource,该功能会在当前范围的每次更改时向数据服务发送请求。
import sourceVector from 'ol/source/Vector'
let vectorSource = new sourceVector({
loader: function (extent, resolution, projection) {
let features = // fetch data using current extent
this.addFeatures(features);
}
});
我期望,当为矢量源调用加载函数时,将为地图对象触发“loadstart”事件。这是一个潜在的错误还是我理解错误?或者是否有一种手动方式让地图知道我的矢量图层正在加载?
使用自定义
loader
时,您需要处理两个附加参数以使 loadend
事件起作用:success
和 failure
回调:
import sourceVector from 'ol/source/Vector'
let vectorSource = new sourceVector({
loader: function (extent, resolution, projection, success, failure) {
try {
let features = // fetch data using current extent
this.addFeatures(features);
success(features);
} catch(e) {
vectorSource.removeLoadedExtent(extent);
failure();
}
}
});
另请参阅矢量源的 API 文档:https://openlayers.org/en/v8.1.0/apidoc/module-ol_source_Vector-VectorSource.html.