地图加载启动事件未使用矢量图层(openlayers)触发

问题描述 投票:0回答:1

我有一个 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”事件。这是一个潜在的错误还是我理解错误?或者是否有一种手动方式让地图知道我的矢量图层正在加载?

events vector openlayers openlayers-8
1个回答
2
投票

使用自定义

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.

© www.soinside.com 2019 - 2024. All rights reserved.