@vcmap/core 6.3.4 → 6.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,16 +1,17 @@
1
- import LayerGroup from 'ol/layer/Group.js';
1
+ import type LayerGroup from 'ol/layer/Group.js';
2
2
  import type Feature from 'ol/Feature.js';
3
3
  import type { Coordinate } from 'ol/coordinate.js';
4
4
  import type Layer from '../layer/layer.js';
5
5
  import AbstractFeatureProvider, { type AbstractFeatureProviderOptions } from './abstractFeatureProvider.js';
6
6
  export type MapboxFeatureProviderOptions = AbstractFeatureProviderOptions & {
7
- styledMapboxLayerGroup: LayerGroup;
7
+ createStyledLayerGroup: () => Promise<LayerGroup>;
8
8
  excludeLayerFromPicking?: string[];
9
9
  };
10
10
  export default class MapboxFeatureProvider extends AbstractFeatureProvider {
11
11
  static get className(): string;
12
12
  protected _inRenderingOrder: boolean;
13
13
  private _renderMap;
14
+ private _styledLayerGroup?;
14
15
  private _excludeLayerFromPicking?;
15
16
  constructor(options: MapboxFeatureProviderOptions);
16
17
  getFeaturesByCoordinate(coordinate: Coordinate, resolution: number, layer: Layer): Promise<Feature[]>;
@@ -1,7 +1,5 @@
1
1
  import { v4 as uuid } from 'uuid';
2
2
  import OLMap from 'ol/Map.js';
3
- import LayerGroup from 'ol/layer/Group.js';
4
- import VectorTileLayer from 'ol/layer/VectorTile.js';
5
3
  import { toFeature } from 'ol/render/Feature.js';
6
4
  import { vcsLayerName } from '../layer/layerSymbols.js';
7
5
  import AbstractFeatureProvider from './abstractFeatureProvider.js';
@@ -12,18 +10,24 @@ export default class MapboxFeatureProvider extends AbstractFeatureProvider {
12
10
  }
13
11
  _inRenderingOrder = true;
14
12
  _renderMap = new OLMap({ target: document.createElement('div') });
13
+ _styledLayerGroup;
15
14
  _excludeLayerFromPicking;
16
15
  constructor(options) {
17
16
  super(options);
18
17
  this._renderMap.setSize([256, 256]);
19
- const pickerLayers = options.styledMapboxLayerGroup
20
- .getLayersArray()
21
- .filter((layer) => layer instanceof VectorTileLayer)
22
- .map((layer) => new VectorTileLayer({
23
- source: layer.getSource() ?? undefined,
24
- style: layer.getStyleFunction() ?? undefined,
25
- }));
26
- this._renderMap.addLayer(new LayerGroup({ layers: pickerLayers }));
18
+ options
19
+ .createStyledLayerGroup()
20
+ .then((layerGroup) => {
21
+ if (this.isDestroyed) {
22
+ layerGroup.dispose();
23
+ return;
24
+ }
25
+ this._styledLayerGroup = layerGroup;
26
+ this._renderMap.addLayer(layerGroup);
27
+ })
28
+ .catch((error) => {
29
+ this.getLogger().error('Error creating styled layer group', error);
30
+ });
27
31
  this._excludeLayerFromPicking = options.excludeLayerFromPicking;
28
32
  }
29
33
  getFeaturesByCoordinate(coordinate, resolution, layer) {
@@ -50,6 +54,11 @@ export default class MapboxFeatureProvider extends AbstractFeatureProvider {
50
54
  return Promise.resolve(features);
51
55
  }
52
56
  destroy() {
57
+ if (this._styledLayerGroup) {
58
+ this._renderMap.removeLayer(this._styledLayerGroup);
59
+ this._styledLayerGroup.dispose();
60
+ this._styledLayerGroup = undefined;
61
+ }
53
62
  this._renderMap.setTarget(undefined);
54
63
  this._renderMap.dispose();
55
64
  super.destroy();
@@ -1 +1 @@
1
- {"version":3,"file":"mapboxFeatureProvider.js","sourceRoot":"","sources":["../../../src/featureProvider/mapboxFeatureProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mapboxFeatureProvider.js","sourceRoot":"","sources":["../../../src/featureProvider/mapboxFeatureProvider.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ import type { LayerImplementationOptions } from '../layer.js';
6
6
  import MapboxStyleImageryProvider from './imageryProvider/mapboxStyleImageryProvider.js';
7
7
  import RasterLayerCesiumImpl from './rasterLayerCesiumImpl.js';
8
8
  export type MapboxStyleLayerImplementationOptions = LayerImplementationOptions & {
9
- styledMapboxLayerGroup: LayerGroup;
9
+ createStyledLayerGroup: () => Promise<LayerGroup>;
10
10
  splitDirection: SplitDirection;
11
11
  minRenderingLevel?: number;
12
12
  maxRenderingLevel?: number;
@@ -14,6 +14,7 @@ export type MapboxStyleLayerImplementationOptions = LayerImplementationOptions &
14
14
  declare class MapboxStyleCesiumImpl extends RasterLayerCesiumImpl {
15
15
  static get className(): string;
16
16
  private _styledMapboxLayerGroup;
17
+ private _createStyledLayerGroup;
17
18
  minRenderingLevel: number | undefined;
18
19
  maxRenderingLevel: number | undefined;
19
20
  imageryProvider: MapboxStyleImageryProvider | undefined;
@@ -9,6 +9,7 @@ class MapboxStyleCesiumImpl extends RasterLayerCesiumImpl {
9
9
  return 'MapboxStyleCesiumImpl';
10
10
  }
11
11
  _styledMapboxLayerGroup;
12
+ _createStyledLayerGroup;
12
13
  minRenderingLevel;
13
14
  maxRenderingLevel;
14
15
  imageryProvider = undefined;
@@ -20,17 +21,18 @@ class MapboxStyleCesiumImpl extends RasterLayerCesiumImpl {
20
21
  tilingSchema: TilingScheme.MERCATOR,
21
22
  opacity: 1,
22
23
  });
23
- this._styledMapboxLayerGroup = options.styledMapboxLayerGroup;
24
+ this._createStyledLayerGroup = options.createStyledLayerGroup;
24
25
  this.minRenderingLevel = options.minRenderingLevel;
25
26
  this.maxRenderingLevel = options.maxRenderingLevel;
26
27
  }
27
28
  async activate() {
28
29
  await super.activate();
29
- if (this.active) {
30
+ if (this.active && this._styledMapboxLayerGroup) {
30
31
  this._styledMapboxLayerGroup.setVisible(true);
31
32
  }
32
33
  }
33
- getCesiumLayer() {
34
+ async getCesiumLayer() {
35
+ this._styledMapboxLayerGroup = await this._createStyledLayerGroup();
34
36
  const options = {
35
37
  headers: this.headers,
36
38
  styledMapboxLayerGroup: this._styledMapboxLayerGroup,
@@ -45,12 +47,13 @@ class MapboxStyleCesiumImpl extends RasterLayerCesiumImpl {
45
47
  const extent = this.extent.getCoordinatesInProjection(wgs84Projection);
46
48
  layerOptions.rectangle = Rectangle.fromDegrees(extent[0], extent[1], extent[2], extent[3]);
47
49
  }
48
- return Promise.resolve(
49
50
  // @ts-expect-error mistyped
50
- new CesiumImageryLayer(this.imageryProvider, layerOptions));
51
+ return new CesiumImageryLayer(this.imageryProvider, layerOptions);
51
52
  }
52
53
  destroy() {
53
54
  this.imageryProvider?.destroy();
55
+ this._styledMapboxLayerGroup?.dispose();
56
+ this._styledMapboxLayerGroup = undefined;
54
57
  super.destroy();
55
58
  }
56
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mapboxStyleCesiumImpl.js","sourceRoot":"","sources":["../../../../src/layer/cesium/mapboxStyleCesiumImpl.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,IAAI,kBAAkB,EAClC,SAAS,GACV,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,YAAY,MAAM,iCAAiC,CAAC;AAC3D,OAAO,0BAEN,MAAM,iDAAiD,CAAC;AACzD,OAAO,qBAAqB,MAAM,4BAA4B,CAAC;AAU/D,MAAM,qBAAsB,SAAQ,qBAAqB;IACvD,MAAM,KAAK,SAAS;QAClB,OAAO,uBAAuB,CAAC;IACjC,CAAC;IAEO,uBAAuB,CAAa;IAE5C,iBAAiB,CAAqB;IAEtC,iBAAiB,CAAqB;IAEtC,eAAe,GAA2C,SAAS,CAAC;IAEpE,YACE,GAAkB,EAClB,OAA8C;QAE9C,KAAK,CAAC,GAAG,EAAE;YACT,GAAG,OAAO;YACV,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,EAAE;YACZ,YAAY,EAAE,YAAY,CAAC,QAAQ;YACnC,OAAO,EAAE,CAAC;SACX,CAAC,CAAC;QACH,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC,sBAAsB,CAAC;QAC9D,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;QACnD,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,cAAc;QACZ,MAAM,OAAO,GAAsC;YACjD,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,sBAAsB,EAAE,IAAI,CAAC,uBAAuB;YACpD,mBAAmB,EAAE,IAAI,CAAC,iBAAiB;YAC3C,mBAAmB,EAAE,IAAI,CAAC,iBAAiB;YAC3C,YAAY,EAAE,IAAI,YAAY,CAAC,EAAE,CAAC;YAClC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;SACrB,CAAC;QAEF,IAAI,CAAC,eAAe,GAAG,IAAI,0BAA0B,CAAC,OAAO,CAAC,CAAC;QAE/D,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAClD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,0BAA0B,CAAC,eAAe,CAAC,CAAC;YACvE,YAAY,CAAC,SAAS,GAAG,SAAS,CAAC,WAAW,CAC5C,MAAM,CAAC,CAAC,CAAC,EACT,MAAM,CAAC,CAAC,CAAC,EACT,MAAM,CAAC,CAAC,CAAC,EACT,MAAM,CAAC,CAAC,CAAC,CACV,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC,OAAO;QACpB,4BAA4B;QAC5B,IAAI,kBAAkB,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,CAC3D,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,CAAC;QAChC,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;CACF;AAED,eAAe,qBAAqB,CAAC"}
1
+ {"version":3,"file":"mapboxStyleCesiumImpl.js","sourceRoot":"","sources":["../../../../src/layer/cesium/mapboxStyleCesiumImpl.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,IAAI,kBAAkB,EAClC,SAAS,GACV,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,YAAY,MAAM,iCAAiC,CAAC;AAC3D,OAAO,0BAEN,MAAM,iDAAiD,CAAC;AACzD,OAAO,qBAAqB,MAAM,4BAA4B,CAAC;AAU/D,MAAM,qBAAsB,SAAQ,qBAAqB;IACvD,MAAM,KAAK,SAAS;QAClB,OAAO,uBAAuB,CAAC;IACjC,CAAC;IAEO,uBAAuB,CAAyB;IAEhD,uBAAuB,CAA4B;IAE3D,iBAAiB,CAAqB;IAEtC,iBAAiB,CAAqB;IAEtC,eAAe,GAA2C,SAAS,CAAC;IAEpE,YACE,GAAkB,EAClB,OAA8C;QAE9C,KAAK,CAAC,GAAG,EAAE;YACT,GAAG,OAAO;YACV,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,EAAE;YACZ,YAAY,EAAE,YAAY,CAAC,QAAQ;YACnC,OAAO,EAAE,CAAC;SACX,CAAC,CAAC;QACH,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC,sBAAsB,CAAC;QAC9D,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;QACnD,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAChD,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC,uBAAuB,GAAG,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAEpE,MAAM,OAAO,GAAsC;YACjD,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,sBAAsB,EAAE,IAAI,CAAC,uBAAuB;YACpD,mBAAmB,EAAE,IAAI,CAAC,iBAAiB;YAC3C,mBAAmB,EAAE,IAAI,CAAC,iBAAiB;YAC3C,YAAY,EAAE,IAAI,YAAY,CAAC,EAAE,CAAC;YAClC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;SACrB,CAAC;QAEF,IAAI,CAAC,eAAe,GAAG,IAAI,0BAA0B,CAAC,OAAO,CAAC,CAAC;QAE/D,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAClD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,0BAA0B,CAAC,eAAe,CAAC,CAAC;YACvE,YAAY,CAAC,SAAS,GAAG,SAAS,CAAC,WAAW,CAC5C,MAAM,CAAC,CAAC,CAAC,EACT,MAAM,CAAC,CAAC,CAAC,EACT,MAAM,CAAC,CAAC,CAAC,EACT,MAAM,CAAC,CAAC,CAAC,CACV,CAAC;QACJ,CAAC;QACD,4BAA4B;QAC5B,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;IACpE,CAAC;IAED,OAAO;QACL,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,CAAC;QAChC,IAAI,CAAC,uBAAuB,EAAE,OAAO,EAAE,CAAC;QACxC,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC;QACzC,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;CACF;AAED,eAAe,qBAAqB,CAAC"}
@@ -11,6 +11,7 @@ declare class LayerImplementation<M extends VcsMap> extends VcsObject {
11
11
  url: string | undefined;
12
12
  protected _state: LayerState;
13
13
  private _initialized;
14
+ private _loadingPromise;
14
15
  headers?: Record<string, string>;
15
16
  constructor(map: M, options: LayerImplementationOptions);
16
17
  get map(): M;
@@ -11,6 +11,7 @@ class LayerImplementation extends VcsObject {
11
11
  url;
12
12
  _state = LayerState.INACTIVE;
13
13
  _initialized = false;
14
+ _loadingPromise = null;
14
15
  headers;
15
16
  constructor(map, options) {
16
17
  super(options);
@@ -49,12 +50,28 @@ class LayerImplementation extends VcsObject {
49
50
  * Once the promise resolves, the layer can still be inactive, if deactivate was called while initializing the layer.
50
51
  */
51
52
  async activate() {
52
- if (this.map.active && !this.active) {
53
- this._state = LayerState.LOADING;
54
- await this.initialize();
55
- if (this.loading) {
56
- this._state = LayerState.ACTIVE;
57
- }
53
+ if (this._loadingPromise) {
54
+ await this._loadingPromise;
55
+ return;
56
+ }
57
+ if (this.map.active && this._state === LayerState.INACTIVE) {
58
+ this._loadingPromise = (async () => {
59
+ this._state = LayerState.LOADING;
60
+ await this.initialize();
61
+ if (this.loading) {
62
+ this._state = LayerState.ACTIVE;
63
+ }
64
+ })()
65
+ .catch((err) => {
66
+ if (this.loading) {
67
+ this._state = LayerState.INACTIVE;
68
+ }
69
+ return Promise.reject(err);
70
+ })
71
+ .finally(() => {
72
+ this._loadingPromise = null;
73
+ });
74
+ await this._loadingPromise;
58
75
  }
59
76
  }
60
77
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"layerImplementation.js","sourceRoot":"","sources":["../../../src/layer/layerImplementation.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,UAAU,MAAM,iBAAiB,CAAC;AAIzC;;GAEG;AACH,MAAM,mBAAsC,SAAQ,SAAS;IAC3D,MAAM,KAAK,SAAS;QAClB,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IAEO,IAAI,CAAgB;IAE5B,GAAG,CAAqB;IAEd,MAAM,GAAe,UAAU,CAAC,QAAQ,CAAC;IAE3C,YAAY,GAAG,KAAK,CAAC;IAE7B,OAAO,CAA0B;IAEjC,YAAY,GAAM,EAAE,OAAmC;QACrD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACjC,CAAC;IAED,IAAI,GAAG;QACL,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,CAAC;IAC3C,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,OAAO,CAAC;IAC5C,CAAC;IAED;;;OAGG;IACH,UAAU;QACR,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAAQ;QACZ,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;YACjC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;QACtB,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;CACF;AAED,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"layerImplementation.js","sourceRoot":"","sources":["../../../src/layer/layerImplementation.ts"],"names":[],"mappings":"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"}
@@ -28,10 +28,10 @@ declare class MapboxStyleLayer extends Layer<MaboxStyleImplementation> implement
28
28
  static get className(): string;
29
29
  static getDefaultOptions(): MapboxStyleOptions;
30
30
  protected _supportedMaps: string[];
31
- private _mapboxLayerGroup;
32
31
  private _sources?;
33
32
  private _excludeLayerFromPicking?;
34
33
  private _splitDirection;
34
+ private _boundCreateStyledLayerGroup;
35
35
  splitDirectionChanged: VcsEvent<SplitDirection>;
36
36
  /**
37
37
  * defines the visible level in the rendered map, maps to Openlayers `minZoom` and Cesium `minimiumTerrainLevel`.
@@ -44,6 +44,7 @@ declare class MapboxStyleLayer extends Layer<MaboxStyleImplementation> implement
44
44
  */
45
45
  maxRenderingLevel: number | undefined;
46
46
  constructor(options: MapboxStyleOptions);
47
+ private _createStyledLayerGroup;
47
48
  initialize(): Promise<void>;
48
49
  get splitDirection(): SplitDirection;
49
50
  set splitDirection(direction: SplitDirection);
@@ -1,9 +1,6 @@
1
1
  import { SplitDirection } from '@vcmap-cesium/engine';
2
2
  import { parseInteger } from '@vcsuite/parsers';
3
3
  import { is } from '@vcsuite/check';
4
- import Collection from 'ol/Collection.js';
5
- import LayerGroup from 'ol/layer/Group.js';
6
- import { apply } from 'ol-mapbox-style';
7
4
  import { layerClassRegistry } from '../classRegistry.js';
8
5
  import AbstractAttributeProvider from '../featureProvider/abstractAttributeProvider.js';
9
6
  import CompositeFeatureProvider from '../featureProvider/compositeFeatureProvider.js';
@@ -16,8 +13,8 @@ import PanoramaMap from '../map/panoramaMap.js';
16
13
  import VcsEvent from '../vcsEvent.js';
17
14
  import MapboxVectorRasterTileCesiumImpl from './cesium/mapboxStyleCesiumImpl.js';
18
15
  import Layer from './layer.js';
16
+ import { createStyledMapboxLayerGroup } from './mapboxStyleLayerHelpers.js';
19
17
  import MapboxVectorTileOpenlayersImpl from './openlayers/mapboxStyleOpenlayersImpl.js';
20
- import { allowPicking, vcsLayerName } from './layerSymbols.js';
21
18
  /**
22
19
  * Layer class for Mapbox Style layers.
23
20
  * @group Layer
@@ -39,10 +36,10 @@ class MapboxStyleLayer extends Layer {
39
36
  OpenlayersMap.className,
40
37
  PanoramaMap.className,
41
38
  ];
42
- _mapboxLayerGroup;
43
39
  _sources;
44
40
  _excludeLayerFromPicking;
45
41
  _splitDirection = SplitDirection.NONE;
42
+ _boundCreateStyledLayerGroup;
46
43
  splitDirectionChanged = new VcsEvent();
47
44
  /**
48
45
  * defines the visible level in the rendered map, maps to Openlayers `minZoom` and Cesium `minimiumTerrainLevel`.
@@ -67,32 +64,22 @@ class MapboxStyleLayer extends Layer {
67
64
  }
68
65
  this.minRenderingLevel = parseInteger(options.minRenderingLevel, defaultOptions.minRenderingLevel);
69
66
  this.maxRenderingLevel = parseInteger(options.maxRenderingLevel, defaultOptions.maxRenderingLevel);
70
- this._mapboxLayerGroup = new LayerGroup({
71
- minZoom: this.minRenderingLevel,
72
- maxZoom: this.maxRenderingLevel,
67
+ this._boundCreateStyledLayerGroup = this._createStyledLayerGroup.bind(this);
68
+ }
69
+ _createStyledLayerGroup() {
70
+ return createStyledMapboxLayerGroup({
71
+ url: this.url,
72
+ name: this.name,
73
+ allowPicking: this.allowPicking,
74
+ sources: this._sources,
75
+ minRenderingLevel: this.minRenderingLevel,
76
+ maxRenderingLevel: this.maxRenderingLevel,
73
77
  });
74
78
  }
75
79
  async initialize() {
76
- if (!this.initialized) {
77
- await apply(this._mapboxLayerGroup, this.url);
78
- const layers = this._mapboxLayerGroup.getLayersArray();
79
- layers.forEach((layer) => {
80
- layer[vcsLayerName] = this.name;
81
- layer[allowPicking] = super.allowPicking;
82
- });
83
- if (this._sources && this._sources.length > 0) {
84
- const filteredCollection = new Collection();
85
- layers
86
- .filter((layer) => this._sources.includes(layer.get('mapbox-source')))
87
- .forEach((layer) => {
88
- filteredCollection.push(layer);
89
- });
90
- this._mapboxLayerGroup.setLayers(filteredCollection);
91
- }
92
- }
93
80
  if (!this.featureProvider) {
94
81
  this.featureProvider = new MapboxFeatureProvider({
95
- styledMapboxLayerGroup: this._mapboxLayerGroup,
82
+ createStyledLayerGroup: this._boundCreateStyledLayerGroup,
96
83
  excludeLayerFromPicking: this._excludeLayerFromPicking,
97
84
  });
98
85
  }
@@ -101,7 +88,7 @@ class MapboxStyleLayer extends Layer {
101
88
  attributeProviders: [this.featureProvider],
102
89
  featureProviders: [
103
90
  new MapboxFeatureProvider({
104
- styledMapboxLayerGroup: this._mapboxLayerGroup,
91
+ createStyledLayerGroup: this._boundCreateStyledLayerGroup,
105
92
  excludeLayerFromPicking: this._excludeLayerFromPicking,
106
93
  }),
107
94
  ],
@@ -124,7 +111,7 @@ class MapboxStyleLayer extends Layer {
124
111
  getImplementationOptions() {
125
112
  return {
126
113
  ...super.getImplementationOptions(),
127
- styledMapboxLayerGroup: this._mapboxLayerGroup,
114
+ createStyledLayerGroup: this._boundCreateStyledLayerGroup,
128
115
  splitDirection: this._splitDirection,
129
116
  minRenderingLevel: this.minRenderingLevel,
130
117
  maxRenderingLevel: this.maxRenderingLevel,
@@ -193,7 +180,6 @@ class MapboxStyleLayer extends Layer {
193
180
  }
194
181
  destroy() {
195
182
  this.splitDirectionChanged.destroy();
196
- this._mapboxLayerGroup.dispose();
197
183
  this.featureProvider?.destroy();
198
184
  super.destroy();
199
185
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mapboxStyleLayer.js","sourceRoot":"","sources":["../../../src/layer/mapboxStyleLayer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mapboxStyleLayer.js","sourceRoot":"","sources":["../../../src/layer/mapboxStyleLayer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import LayerGroup from 'ol/layer/Group.js';
2
+ export type StyledMapboxLayerGroupOptions = {
3
+ url: string;
4
+ name: string;
5
+ allowPicking: boolean;
6
+ sources?: string[];
7
+ minRenderingLevel?: number;
8
+ maxRenderingLevel?: number;
9
+ };
10
+ export declare function createStyledMapboxLayerGroup(options: StyledMapboxLayerGroupOptions): Promise<LayerGroup>;
@@ -0,0 +1,30 @@
1
+ import Collection from 'ol/Collection.js';
2
+ import LayerGroup from 'ol/layer/Group.js';
3
+ import { apply } from 'ol-mapbox-style';
4
+ import { allowPicking, vcsLayerName } from './layerSymbols.js';
5
+ async function applyStyleAndConfigureGroup(mapboxLayerGroup, options) {
6
+ await apply(mapboxLayerGroup, options.url);
7
+ const layers = mapboxLayerGroup.getLayersArray();
8
+ layers.forEach((layer) => {
9
+ layer[vcsLayerName] = options.name;
10
+ layer[allowPicking] = options.allowPicking;
11
+ });
12
+ if (options.sources && options.sources.length > 0) {
13
+ const filteredCollection = new Collection();
14
+ layers
15
+ .filter((layer) => options.sources.includes(layer.get('mapbox-source')))
16
+ .forEach((layer) => {
17
+ filteredCollection.push(layer);
18
+ });
19
+ mapboxLayerGroup.setLayers(filteredCollection);
20
+ }
21
+ }
22
+ export async function createStyledMapboxLayerGroup(options) {
23
+ const mapboxLayerGroup = new LayerGroup({
24
+ minZoom: options.minRenderingLevel,
25
+ maxZoom: options.maxRenderingLevel,
26
+ });
27
+ await applyStyleAndConfigureGroup(mapboxLayerGroup, options);
28
+ return mapboxLayerGroup;
29
+ }
30
+ //# sourceMappingURL=mapboxStyleLayerHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapboxStyleLayerHelpers.js","sourceRoot":"","sources":["../../../src/layer/mapboxStyleLayerHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAE1C,OAAO,UAAU,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAW/D,KAAK,UAAU,2BAA2B,CACxC,gBAA4B,EAC5B,OAAsC;IAEtC,MAAM,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAE3C,MAAM,MAAM,GAAG,gBAAgB,CAAC,cAAc,EAAE,CAAC;IACjD,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACvB,KAAK,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;QACnC,KAAK,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,kBAAkB,GAAG,IAAI,UAAU,EAAa,CAAC;QACvD,MAAM;aACH,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAChB,OAAO,CAAC,OAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAW,CAAC,CAChE;aACA,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACjB,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEL,gBAAgB,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,OAAsC;IAEtC,MAAM,gBAAgB,GAAG,IAAI,UAAU,CAAC;QACtC,OAAO,EAAE,OAAO,CAAC,iBAAiB;QAClC,OAAO,EAAE,OAAO,CAAC,iBAAiB;KACnC,CAAC,CAAC;IAEH,MAAM,2BAA2B,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAC7D,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}
@@ -6,8 +6,10 @@ import LayerOpenlayersImpl from './layerOpenlayersImpl.js';
6
6
  declare class MapboxVectorTileOpenlayersImpl extends LayerOpenlayersImpl {
7
7
  static get className(): string;
8
8
  private _styledMapboxLayerGroup;
9
+ private _createStyledLayerGroup;
9
10
  private _removeChildLayerListeners;
10
11
  constructor(map: OpenlayersMap, options: MapboxStyleLayerImplementationOptions);
12
+ initialize(): Promise<void>;
11
13
  getOLLayer(): OLLayerLike;
12
14
  updateSplitDirection(splitDirection: SplitDirection): void;
13
15
  destroy(): void;
@@ -6,12 +6,22 @@ class MapboxVectorTileOpenlayersImpl extends LayerOpenlayersImpl {
6
6
  return 'MapboxVectorTileOpenlayersImpl';
7
7
  }
8
8
  _styledMapboxLayerGroup;
9
+ _createStyledLayerGroup;
9
10
  _removeChildLayerListeners = null;
10
11
  constructor(map, options) {
11
12
  super(map, options);
12
- this._styledMapboxLayerGroup = options.styledMapboxLayerGroup;
13
+ this._createStyledLayerGroup = options.createStyledLayerGroup;
14
+ }
15
+ async initialize() {
16
+ if (!this.initialized) {
17
+ this._styledMapboxLayerGroup = await this._createStyledLayerGroup();
18
+ }
19
+ await super.initialize();
13
20
  }
14
21
  getOLLayer() {
22
+ if (!this._styledMapboxLayerGroup) {
23
+ throw new Error('Mapbox layer group must be initialized before use');
24
+ }
15
25
  return this._styledMapboxLayerGroup;
16
26
  }
17
27
  updateSplitDirection(splitDirection) {
@@ -19,6 +29,9 @@ class MapboxVectorTileOpenlayersImpl extends LayerOpenlayersImpl {
19
29
  if (this.initialized) {
20
30
  this._removeChildLayerListeners?.();
21
31
  this._removeChildLayerListeners = null;
32
+ if (!this._styledMapboxLayerGroup) {
33
+ return;
34
+ }
22
35
  if (splitDirection !== SplitDirection.NONE) {
23
36
  const childLayers = this._styledMapboxLayerGroup.getLayersArray();
24
37
  const listenerKeys = [];
@@ -42,6 +55,8 @@ class MapboxVectorTileOpenlayersImpl extends LayerOpenlayersImpl {
42
55
  destroy() {
43
56
  this._removeChildLayerListeners?.();
44
57
  this._removeChildLayerListeners = null;
58
+ this._styledMapboxLayerGroup?.dispose();
59
+ this._styledMapboxLayerGroup = undefined;
45
60
  super.destroy();
46
61
  }
47
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mapboxStyleOpenlayersImpl.js","sourceRoot":"","sources":["../../../../src/layer/openlayers/mapboxStyleOpenlayersImpl.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAK3C,OAAO,mBAAmB,MAAM,0BAA0B,CAAC;AAE3D,MAAM,8BAA+B,SAAQ,mBAAmB;IAC9D,MAAM,KAAK,SAAS;QAClB,OAAO,gCAAgC,CAAC;IAC1C,CAAC;IAEO,uBAAuB,CAAa;IAEpC,0BAA0B,GAAwB,IAAI,CAAC;IAE/D,YACE,GAAkB,EAClB,OAA8C;QAE9C,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACpB,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAChE,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,uBAAsC,CAAC;IACrD,CAAC;IAED,oBAAoB,CAAC,cAA8B;QACjD,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,0BAA0B,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC;YAEvC,IAAI,cAAc,KAAK,cAAc,CAAC,IAAI,EAAE,CAAC;gBAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,cAAc,EAAE,CAAC;gBAClE,MAAM,YAAY,GAAgB,EAAE,CAAC;gBACrC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;oBAC5B,YAAY,CAAC,IAAI,CACf,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CACvD,CAAC;oBACF,YAAY,CAAC,IAAI,CACf,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CACxD,CAAC;oBACF,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClB,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,0BAA0B,GAAG,GAAS,EAAE;oBAC3C,OAAO,CAAC,YAAY,CAAC,CAAC;gBACxB,CAAC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,cAAc,EAAE,CAAC;gBAClE,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;oBAC5B,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClB,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,CAAC,0BAA0B,EAAE,EAAE,CAAC;QACpC,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC;QACvC,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;CACF;AAED,eAAe,8BAA8B,CAAC"}
1
+ {"version":3,"file":"mapboxStyleOpenlayersImpl.js","sourceRoot":"","sources":["../../../../src/layer/openlayers/mapboxStyleOpenlayersImpl.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAK3C,OAAO,mBAAmB,MAAM,0BAA0B,CAAC;AAE3D,MAAM,8BAA+B,SAAQ,mBAAmB;IAC9D,MAAM,KAAK,SAAS;QAClB,OAAO,gCAAgC,CAAC;IAC1C,CAAC;IAEO,uBAAuB,CAAyB;IAEhD,uBAAuB,CAA4B;IAEnD,0BAA0B,GAAwB,IAAI,CAAC;IAE/D,YACE,GAAkB,EAClB,OAA8C;QAE9C,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACpB,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,uBAAuB,GAAG,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACtE,CAAC;QACD,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;IAC3B,CAAC;IAED,UAAU;QACR,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,IAAI,CAAC,uBAAsC,CAAC;IACrD,CAAC;IAED,oBAAoB,CAAC,cAA8B;QACjD,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,0BAA0B,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC;YAEvC,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBAClC,OAAO;YACT,CAAC;YAED,IAAI,cAAc,KAAK,cAAc,CAAC,IAAI,EAAE,CAAC;gBAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,cAAc,EAAE,CAAC;gBAClE,MAAM,YAAY,GAAgB,EAAE,CAAC;gBACrC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;oBAC5B,YAAY,CAAC,IAAI,CACf,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CACvD,CAAC;oBACF,YAAY,CAAC,IAAI,CACf,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CACxD,CAAC;oBACF,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClB,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,0BAA0B,GAAG,GAAS,EAAE;oBAC3C,OAAO,CAAC,YAAY,CAAC,CAAC;gBACxB,CAAC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,cAAc,EAAE,CAAC;gBAClE,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;oBAC5B,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClB,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,CAAC,0BAA0B,EAAE,EAAE,CAAC;QACpC,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC;QACvC,IAAI,CAAC,uBAAuB,EAAE,OAAO,EAAE,CAAC;QACxC,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC;QACzC,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;CACF;AAED,eAAe,8BAA8B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vcmap/core",
3
- "version": "6.3.4",
3
+ "version": "6.3.5",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -86,7 +86,7 @@
86
86
  "proj4": "^2.15.0",
87
87
  "rbush": ">=4.0.0",
88
88
  "rbush-knn": "^4.0.0",
89
- "uuid": "^11.1.0"
89
+ "uuid": "^14.0.0"
90
90
  },
91
91
  "overrides": {
92
92
  "serialize-javascript": "^7.0.5"
@@ -1,7 +1,6 @@
1
1
  import { v4 as uuid } from 'uuid';
2
2
  import OLMap from 'ol/Map.js';
3
- import LayerGroup from 'ol/layer/Group.js';
4
- import VectorTileLayer from 'ol/layer/VectorTile.js';
3
+ import type LayerGroup from 'ol/layer/Group.js';
5
4
  import type Feature from 'ol/Feature.js';
6
5
  import type { Coordinate } from 'ol/coordinate.js';
7
6
  import type RenderFeature from 'ol/render/Feature.js';
@@ -14,7 +13,7 @@ import AbstractFeatureProvider, {
14
13
  import { isProvidedFeature } from './featureProviderSymbols.js';
15
14
 
16
15
  export type MapboxFeatureProviderOptions = AbstractFeatureProviderOptions & {
17
- styledMapboxLayerGroup: LayerGroup;
16
+ createStyledLayerGroup: () => Promise<LayerGroup>;
18
17
  excludeLayerFromPicking?: string[];
19
18
  };
20
19
 
@@ -24,27 +23,27 @@ export default class MapboxFeatureProvider extends AbstractFeatureProvider {
24
23
  }
25
24
 
26
25
  protected _inRenderingOrder = true;
27
-
28
26
  private _renderMap = new OLMap({ target: document.createElement('div') });
27
+ private _styledLayerGroup?: LayerGroup;
29
28
  private _excludeLayerFromPicking?: string[];
30
29
 
31
30
  constructor(options: MapboxFeatureProviderOptions) {
32
31
  super(options);
33
32
 
34
33
  this._renderMap.setSize([256, 256]);
35
- const pickerLayers = options.styledMapboxLayerGroup
36
- .getLayersArray()
37
- .filter(
38
- (layer): layer is VectorTileLayer => layer instanceof VectorTileLayer,
39
- )
40
- .map(
41
- (layer) =>
42
- new VectorTileLayer({
43
- source: layer.getSource() ?? undefined,
44
- style: layer.getStyleFunction() ?? undefined,
45
- }),
46
- );
47
- this._renderMap.addLayer(new LayerGroup({ layers: pickerLayers }));
34
+ options
35
+ .createStyledLayerGroup()
36
+ .then((layerGroup) => {
37
+ if (this.isDestroyed) {
38
+ layerGroup.dispose();
39
+ return;
40
+ }
41
+ this._styledLayerGroup = layerGroup;
42
+ this._renderMap.addLayer(layerGroup);
43
+ })
44
+ .catch((error: unknown) => {
45
+ this.getLogger().error('Error creating styled layer group', error);
46
+ });
48
47
  this._excludeLayerFromPicking = options.excludeLayerFromPicking;
49
48
  }
50
49
 
@@ -80,6 +79,11 @@ export default class MapboxFeatureProvider extends AbstractFeatureProvider {
80
79
  }
81
80
 
82
81
  destroy(): void {
82
+ if (this._styledLayerGroup) {
83
+ this._renderMap.removeLayer(this._styledLayerGroup);
84
+ this._styledLayerGroup.dispose();
85
+ this._styledLayerGroup = undefined;
86
+ }
83
87
  this._renderMap.setTarget(undefined);
84
88
  this._renderMap.dispose();
85
89
  super.destroy();
@@ -16,7 +16,7 @@ import RasterLayerCesiumImpl from './rasterLayerCesiumImpl.js';
16
16
 
17
17
  export type MapboxStyleLayerImplementationOptions =
18
18
  LayerImplementationOptions & {
19
- styledMapboxLayerGroup: LayerGroup;
19
+ createStyledLayerGroup: () => Promise<LayerGroup>;
20
20
  splitDirection: SplitDirection;
21
21
  minRenderingLevel?: number;
22
22
  maxRenderingLevel?: number;
@@ -27,7 +27,9 @@ class MapboxStyleCesiumImpl extends RasterLayerCesiumImpl {
27
27
  return 'MapboxStyleCesiumImpl';
28
28
  }
29
29
 
30
- private _styledMapboxLayerGroup: LayerGroup;
30
+ private _styledMapboxLayerGroup: LayerGroup | undefined;
31
+
32
+ private _createStyledLayerGroup: () => Promise<LayerGroup>;
31
33
 
32
34
  minRenderingLevel: number | undefined;
33
35
 
@@ -46,19 +48,21 @@ class MapboxStyleCesiumImpl extends RasterLayerCesiumImpl {
46
48
  tilingSchema: TilingScheme.MERCATOR,
47
49
  opacity: 1,
48
50
  });
49
- this._styledMapboxLayerGroup = options.styledMapboxLayerGroup;
51
+ this._createStyledLayerGroup = options.createStyledLayerGroup;
50
52
  this.minRenderingLevel = options.minRenderingLevel;
51
53
  this.maxRenderingLevel = options.maxRenderingLevel;
52
54
  }
53
55
 
54
56
  async activate(): Promise<void> {
55
57
  await super.activate();
56
- if (this.active) {
58
+ if (this.active && this._styledMapboxLayerGroup) {
57
59
  this._styledMapboxLayerGroup.setVisible(true);
58
60
  }
59
61
  }
60
62
 
61
- getCesiumLayer(): Promise<CesiumImageryLayer> {
63
+ async getCesiumLayer(): Promise<CesiumImageryLayer> {
64
+ this._styledMapboxLayerGroup = await this._createStyledLayerGroup();
65
+
62
66
  const options: MapboxStyleImageryProviderOptions = {
63
67
  headers: this.headers,
64
68
  styledMapboxLayerGroup: this._styledMapboxLayerGroup,
@@ -80,14 +84,14 @@ class MapboxStyleCesiumImpl extends RasterLayerCesiumImpl {
80
84
  extent[3],
81
85
  );
82
86
  }
83
- return Promise.resolve(
84
- // @ts-expect-error mistyped
85
- new CesiumImageryLayer(this.imageryProvider, layerOptions),
86
- );
87
+ // @ts-expect-error mistyped
88
+ return new CesiumImageryLayer(this.imageryProvider, layerOptions);
87
89
  }
88
90
 
89
91
  destroy(): void {
90
92
  this.imageryProvider?.destroy();
93
+ this._styledMapboxLayerGroup?.dispose();
94
+ this._styledMapboxLayerGroup = undefined;
91
95
  super.destroy();
92
96
  }
93
97
  }
@@ -19,6 +19,8 @@ class LayerImplementation<M extends VcsMap> extends VcsObject {
19
19
 
20
20
  private _initialized = false;
21
21
 
22
+ private _loadingPromise: Promise<void> | null = null;
23
+
22
24
  headers?: Record<string, string>;
23
25
 
24
26
  constructor(map: M, options: LayerImplementationOptions) {
@@ -64,12 +66,30 @@ class LayerImplementation<M extends VcsMap> extends VcsObject {
64
66
  * Once the promise resolves, the layer can still be inactive, if deactivate was called while initializing the layer.
65
67
  */
66
68
  async activate(): Promise<void> {
67
- if (this.map.active && !this.active) {
68
- this._state = LayerState.LOADING;
69
- await this.initialize();
70
- if (this.loading) {
71
- this._state = LayerState.ACTIVE;
72
- }
69
+ if (this._loadingPromise) {
70
+ await this._loadingPromise;
71
+ return;
72
+ }
73
+
74
+ if (this.map.active && this._state === LayerState.INACTIVE) {
75
+ this._loadingPromise = (async (): Promise<void> => {
76
+ this._state = LayerState.LOADING;
77
+ await this.initialize();
78
+ if (this.loading) {
79
+ this._state = LayerState.ACTIVE;
80
+ }
81
+ })()
82
+ .catch((err: unknown) => {
83
+ if (this.loading) {
84
+ this._state = LayerState.INACTIVE;
85
+ }
86
+ return Promise.reject(err as Error);
87
+ })
88
+ .finally(() => {
89
+ this._loadingPromise = null;
90
+ });
91
+
92
+ await this._loadingPromise;
73
93
  }
74
94
  }
75
95
 
@@ -1,10 +1,7 @@
1
1
  import { SplitDirection } from '@vcmap-cesium/engine';
2
2
  import { parseInteger } from '@vcsuite/parsers';
3
3
  import { is } from '@vcsuite/check';
4
- import Collection from 'ol/Collection.js';
5
- import LayerGroup from 'ol/layer/Group.js';
6
- import type BaseLayer from 'ol/layer/Base.js';
7
- import { apply } from 'ol-mapbox-style';
4
+ import type LayerGroup from 'ol/layer/Group.js';
8
5
  import { layerClassRegistry } from '../classRegistry.js';
9
6
  import AbstractAttributeProvider from '../featureProvider/abstractAttributeProvider.js';
10
7
  import CompositeFeatureProvider, {
@@ -26,8 +23,8 @@ import MapboxVectorRasterTileCesiumImpl, {
26
23
  import Layer from './layer.js';
27
24
  import type { LayerOptions, SplitLayer } from './layer.js';
28
25
  import type LayerImplementation from './layerImplementation.js';
26
+ import { createStyledMapboxLayerGroup } from './mapboxStyleLayerHelpers.js';
29
27
  import MapboxVectorTileOpenlayersImpl from './openlayers/mapboxStyleOpenlayersImpl.js';
30
- import { allowPicking, vcsLayerName } from './layerSymbols.js';
31
28
 
32
29
  export type MapboxStyleOptions = LayerOptions & {
33
30
  /** The sources from the Mapbox Style to use. If not provided, all sources from the style will be used. */
@@ -72,10 +69,10 @@ class MapboxStyleLayer
72
69
  OpenlayersMap.className,
73
70
  PanoramaMap.className,
74
71
  ];
75
- private _mapboxLayerGroup: LayerGroup;
76
72
  private _sources?: string[];
77
73
  private _excludeLayerFromPicking?: string[];
78
74
  private _splitDirection: SplitDirection = SplitDirection.NONE;
75
+ private _boundCreateStyledLayerGroup: () => Promise<LayerGroup>;
79
76
  splitDirectionChanged = new VcsEvent<SplitDirection>();
80
77
  /**
81
78
  * defines the visible level in the rendered map, maps to Openlayers `minZoom` and Cesium `minimiumTerrainLevel`.
@@ -108,40 +105,24 @@ class MapboxStyleLayer
108
105
  options.maxRenderingLevel,
109
106
  defaultOptions.maxRenderingLevel,
110
107
  );
108
+ this._boundCreateStyledLayerGroup = this._createStyledLayerGroup.bind(this);
109
+ }
111
110
 
112
- this._mapboxLayerGroup = new LayerGroup({
113
- minZoom: this.minRenderingLevel,
114
- maxZoom: this.maxRenderingLevel,
111
+ private _createStyledLayerGroup(): Promise<LayerGroup> {
112
+ return createStyledMapboxLayerGroup({
113
+ url: this.url,
114
+ name: this.name,
115
+ allowPicking: this.allowPicking,
116
+ sources: this._sources,
117
+ minRenderingLevel: this.minRenderingLevel,
118
+ maxRenderingLevel: this.maxRenderingLevel,
115
119
  });
116
120
  }
117
121
 
118
122
  async initialize(): Promise<void> {
119
- if (!this.initialized) {
120
- await apply(this._mapboxLayerGroup, this.url);
121
-
122
- const layers = this._mapboxLayerGroup.getLayersArray();
123
- layers.forEach((layer) => {
124
- layer[vcsLayerName] = this.name;
125
- layer[allowPicking] = super.allowPicking;
126
- });
127
-
128
- if (this._sources && this._sources.length > 0) {
129
- const filteredCollection = new Collection<BaseLayer>();
130
- layers
131
- .filter((layer) =>
132
- this._sources!.includes(layer.get('mapbox-source') as string),
133
- )
134
- .forEach((layer) => {
135
- filteredCollection.push(layer);
136
- });
137
-
138
- this._mapboxLayerGroup.setLayers(filteredCollection);
139
- }
140
- }
141
-
142
123
  if (!this.featureProvider) {
143
124
  this.featureProvider = new MapboxFeatureProvider({
144
- styledMapboxLayerGroup: this._mapboxLayerGroup,
125
+ createStyledLayerGroup: this._boundCreateStyledLayerGroup,
145
126
  excludeLayerFromPicking: this._excludeLayerFromPicking,
146
127
  });
147
128
  } else if (is(this.featureProvider, AbstractAttributeProvider)) {
@@ -149,7 +130,7 @@ class MapboxStyleLayer
149
130
  attributeProviders: [this.featureProvider],
150
131
  featureProviders: [
151
132
  new MapboxFeatureProvider({
152
- styledMapboxLayerGroup: this._mapboxLayerGroup,
133
+ createStyledLayerGroup: this._boundCreateStyledLayerGroup,
153
134
  excludeLayerFromPicking: this._excludeLayerFromPicking,
154
135
  }),
155
136
  ],
@@ -176,7 +157,7 @@ class MapboxStyleLayer
176
157
  getImplementationOptions(): MapboxStyleLayerImplementationOptions {
177
158
  return {
178
159
  ...super.getImplementationOptions(),
179
- styledMapboxLayerGroup: this._mapboxLayerGroup,
160
+ createStyledLayerGroup: this._boundCreateStyledLayerGroup,
180
161
  splitDirection: this._splitDirection,
181
162
  minRenderingLevel: this.minRenderingLevel,
182
163
  maxRenderingLevel: this.maxRenderingLevel,
@@ -274,7 +255,6 @@ class MapboxStyleLayer
274
255
 
275
256
  destroy(): void {
276
257
  this.splitDirectionChanged.destroy();
277
- this._mapboxLayerGroup.dispose();
278
258
  this.featureProvider?.destroy();
279
259
  super.destroy();
280
260
  }
@@ -0,0 +1,52 @@
1
+ import Collection from 'ol/Collection.js';
2
+ import type BaseLayer from 'ol/layer/Base.js';
3
+ import LayerGroup from 'ol/layer/Group.js';
4
+ import { apply } from 'ol-mapbox-style';
5
+ import { allowPicking, vcsLayerName } from './layerSymbols.js';
6
+
7
+ export type StyledMapboxLayerGroupOptions = {
8
+ url: string;
9
+ name: string;
10
+ allowPicking: boolean;
11
+ sources?: string[];
12
+ minRenderingLevel?: number;
13
+ maxRenderingLevel?: number;
14
+ };
15
+
16
+ async function applyStyleAndConfigureGroup(
17
+ mapboxLayerGroup: LayerGroup,
18
+ options: StyledMapboxLayerGroupOptions,
19
+ ): Promise<void> {
20
+ await apply(mapboxLayerGroup, options.url);
21
+
22
+ const layers = mapboxLayerGroup.getLayersArray();
23
+ layers.forEach((layer) => {
24
+ layer[vcsLayerName] = options.name;
25
+ layer[allowPicking] = options.allowPicking;
26
+ });
27
+
28
+ if (options.sources && options.sources.length > 0) {
29
+ const filteredCollection = new Collection<BaseLayer>();
30
+ layers
31
+ .filter((layer) =>
32
+ options.sources!.includes(layer.get('mapbox-source') as string),
33
+ )
34
+ .forEach((layer) => {
35
+ filteredCollection.push(layer);
36
+ });
37
+
38
+ mapboxLayerGroup.setLayers(filteredCollection);
39
+ }
40
+ }
41
+
42
+ export async function createStyledMapboxLayerGroup(
43
+ options: StyledMapboxLayerGroupOptions,
44
+ ): Promise<LayerGroup> {
45
+ const mapboxLayerGroup = new LayerGroup({
46
+ minZoom: options.minRenderingLevel,
47
+ maxZoom: options.maxRenderingLevel,
48
+ });
49
+
50
+ await applyStyleAndConfigureGroup(mapboxLayerGroup, options);
51
+ return mapboxLayerGroup;
52
+ }
@@ -12,7 +12,9 @@ class MapboxVectorTileOpenlayersImpl extends LayerOpenlayersImpl {
12
12
  return 'MapboxVectorTileOpenlayersImpl';
13
13
  }
14
14
 
15
- private _styledMapboxLayerGroup: LayerGroup;
15
+ private _styledMapboxLayerGroup: LayerGroup | undefined;
16
+
17
+ private _createStyledLayerGroup: () => Promise<LayerGroup>;
16
18
 
17
19
  private _removeChildLayerListeners: (() => void) | null = null;
18
20
 
@@ -21,10 +23,20 @@ class MapboxVectorTileOpenlayersImpl extends LayerOpenlayersImpl {
21
23
  options: MapboxStyleLayerImplementationOptions,
22
24
  ) {
23
25
  super(map, options);
24
- this._styledMapboxLayerGroup = options.styledMapboxLayerGroup;
26
+ this._createStyledLayerGroup = options.createStyledLayerGroup;
27
+ }
28
+
29
+ async initialize(): Promise<void> {
30
+ if (!this.initialized) {
31
+ this._styledMapboxLayerGroup = await this._createStyledLayerGroup();
32
+ }
33
+ await super.initialize();
25
34
  }
26
35
 
27
36
  getOLLayer(): OLLayerLike {
37
+ if (!this._styledMapboxLayerGroup) {
38
+ throw new Error('Mapbox layer group must be initialized before use');
39
+ }
28
40
  return this._styledMapboxLayerGroup as OLLayerLike;
29
41
  }
30
42
 
@@ -34,6 +46,10 @@ class MapboxVectorTileOpenlayersImpl extends LayerOpenlayersImpl {
34
46
  this._removeChildLayerListeners?.();
35
47
  this._removeChildLayerListeners = null;
36
48
 
49
+ if (!this._styledMapboxLayerGroup) {
50
+ return;
51
+ }
52
+
37
53
  if (splitDirection !== SplitDirection.NONE) {
38
54
  const childLayers = this._styledMapboxLayerGroup.getLayersArray();
39
55
  const listenerKeys: EventsKey[] = [];
@@ -61,6 +77,8 @@ class MapboxVectorTileOpenlayersImpl extends LayerOpenlayersImpl {
61
77
  destroy(): void {
62
78
  this._removeChildLayerListeners?.();
63
79
  this._removeChildLayerListeners = null;
80
+ this._styledMapboxLayerGroup?.dispose();
81
+ this._styledMapboxLayerGroup = undefined;
64
82
  super.destroy();
65
83
  }
66
84
  }