@vcmap/core 6.3.2 → 6.3.3

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.
Files changed (64) hide show
  1. package/dist/index.d.ts +5 -2
  2. package/dist/index.js +4 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/src/interaction/panoramaFeatureHighlight.d.ts +1 -0
  5. package/dist/src/interaction/panoramaFeatureHighlight.js +18 -11
  6. package/dist/src/interaction/panoramaFeatureHighlight.js.map +1 -1
  7. package/dist/src/interaction/panoramaImageSelection.js +46 -2
  8. package/dist/src/interaction/panoramaImageSelection.js.map +1 -1
  9. package/dist/src/layer/cesium/cogCesiumImpl.js +1 -1
  10. package/dist/src/layer/cesium/cogCesiumImpl.js.map +1 -1
  11. package/dist/src/layer/cesium/imageryProvider/abstractVcsImageryProvider.d.ts +47 -0
  12. package/dist/src/layer/cesium/imageryProvider/abstractVcsImageryProvider.js +71 -0
  13. package/dist/src/layer/cesium/imageryProvider/abstractVcsImageryProvider.js.map +1 -0
  14. package/dist/src/layer/cesium/imageryProvider/cogImageryProvider.d.ts +17 -0
  15. package/dist/src/layer/cesium/{cogImageryProvider.js → imageryProvider/cogImageryProvider.js} +17 -67
  16. package/dist/src/layer/cesium/imageryProvider/cogImageryProvider.js.map +1 -0
  17. package/dist/src/layer/cesium/{mapboxStyleImageryProvider.d.ts → imageryProvider/mapboxStyleImageryProvider.d.ts} +5 -9
  18. package/dist/src/layer/cesium/imageryProvider/mapboxStyleImageryProvider.js +37 -0
  19. package/dist/src/layer/cesium/imageryProvider/mapboxStyleImageryProvider.js.map +1 -0
  20. package/dist/src/layer/cesium/imageryProvider/olImageRenderer.d.ts +18 -0
  21. package/dist/src/layer/cesium/imageryProvider/olImageRenderer.js +144 -0
  22. package/dist/src/layer/cesium/imageryProvider/olImageRenderer.js.map +1 -0
  23. package/dist/src/layer/cesium/imageryProvider/panoramaDatasetImageryProvider.d.ts +12 -0
  24. package/dist/src/layer/cesium/imageryProvider/panoramaDatasetImageryProvider.js +45 -0
  25. package/dist/src/layer/cesium/imageryProvider/panoramaDatasetImageryProvider.js.map +1 -0
  26. package/dist/src/layer/cesium/{vectorTileImageryProvider.d.ts → imageryProvider/vectorTileImageryProvider.d.ts} +5 -24
  27. package/dist/src/layer/cesium/{vectorTileImageryProvider.js → imageryProvider/vectorTileImageryProvider.js} +16 -65
  28. package/dist/src/layer/cesium/imageryProvider/vectorTileImageryProvider.js.map +1 -0
  29. package/dist/src/layer/cesium/mapboxStyleCesiumImpl.d.ts +1 -1
  30. package/dist/src/layer/cesium/mapboxStyleCesiumImpl.js +1 -1
  31. package/dist/src/layer/cesium/mapboxStyleCesiumImpl.js.map +1 -1
  32. package/dist/src/layer/cesium/panoramaDatasetCesiumImpl.d.ts +5 -0
  33. package/dist/src/layer/cesium/panoramaDatasetCesiumImpl.js +12 -0
  34. package/dist/src/layer/cesium/panoramaDatasetCesiumImpl.js.map +1 -0
  35. package/dist/src/layer/cesium/vectorRasterTileCesiumImpl.d.ts +4 -2
  36. package/dist/src/layer/cesium/vectorRasterTileCesiumImpl.js +10 -3
  37. package/dist/src/layer/cesium/vectorRasterTileCesiumImpl.js.map +1 -1
  38. package/dist/src/layer/panoramaDatasetLayer.js +11 -1
  39. package/dist/src/layer/panoramaDatasetLayer.js.map +1 -1
  40. package/dist/src/layer/vectorTileLayer.d.ts +1 -0
  41. package/dist/src/layer/vectorTileLayer.js +3 -0
  42. package/dist/src/layer/vectorTileLayer.js.map +1 -1
  43. package/index.ts +11 -2
  44. package/package.json +1 -1
  45. package/src/interaction/panoramaFeatureHighlight.ts +23 -16
  46. package/src/interaction/panoramaImageSelection.ts +58 -5
  47. package/src/layer/cesium/cogCesiumImpl.ts +1 -1
  48. package/src/layer/cesium/imageryProvider/abstractVcsImageryProvider.ts +126 -0
  49. package/src/layer/cesium/{cogImageryProvider.ts → imageryProvider/cogImageryProvider.ts} +23 -81
  50. package/src/layer/cesium/imageryProvider/mapboxStyleImageryProvider.ts +63 -0
  51. package/src/layer/cesium/imageryProvider/olImageRenderer.ts +219 -0
  52. package/src/layer/cesium/imageryProvider/panoramaDatasetImageryProvider.ts +73 -0
  53. package/src/layer/cesium/{vectorTileImageryProvider.ts → imageryProvider/vectorTileImageryProvider.ts} +19 -92
  54. package/src/layer/cesium/mapboxStyleCesiumImpl.ts +1 -1
  55. package/src/layer/cesium/panoramaDatasetCesiumImpl.ts +13 -0
  56. package/src/layer/cesium/vectorRasterTileCesiumImpl.ts +14 -4
  57. package/src/layer/panoramaDatasetLayer.ts +12 -1
  58. package/src/layer/vectorTileLayer.ts +4 -0
  59. package/dist/src/layer/cesium/cogImageryProvider.d.ts +0 -31
  60. package/dist/src/layer/cesium/cogImageryProvider.js.map +0 -1
  61. package/dist/src/layer/cesium/mapboxStyleImageryProvider.js +0 -147
  62. package/dist/src/layer/cesium/mapboxStyleImageryProvider.js.map +0 -1
  63. package/dist/src/layer/cesium/vectorTileImageryProvider.js.map +0 -1
  64. package/src/layer/cesium/mapboxStyleImageryProvider.ts +0 -214
@@ -1,147 +0,0 @@
1
- import { parseInteger } from '@vcsuite/parsers';
2
- import { getLogger } from '@vcsuite/logger';
3
- import { getCenter, buffer } from 'ol/extent.js';
4
- import LRUCache from 'ol/structs/LRUCache.js';
5
- import OLMap from 'ol/Map.js';
6
- import { rectangleToMercatorExtent } from '../../util/math.js';
7
- import VectorTileImageryProvider from './vectorTileImageryProvider.js';
8
- function getTileCacheKey(x, y, level) {
9
- return `${x}-${y}-${level}`;
10
- }
11
- function getGutterSize(level) {
12
- if (level < 12) {
13
- return 32;
14
- }
15
- if (level < 15) {
16
- return 48;
17
- }
18
- return 64;
19
- }
20
- /**
21
- * Implementation of Cesium ImageryProvider Interface for Mapbox Style Tiles
22
- */
23
- class MapboxStyleImageryProvider extends VectorTileImageryProvider {
24
- static get className() {
25
- return 'MapboxStyleImageryProvider';
26
- }
27
- _tileCacheByLevel;
28
- _maxCacheSize;
29
- _isRendering = false;
30
- _renderMap = new OLMap({
31
- target: document.createElement('div'),
32
- });
33
- constructor(options) {
34
- super(options);
35
- this._tileCacheByLevel = new Map();
36
- this._maxCacheSize = parseInteger(options.tileCacheSize, 100);
37
- this._renderMap.addLayer(options.styledMapboxLayerGroup);
38
- }
39
- requestImage(x, y, level) {
40
- const cacheKey = getTileCacheKey(x, y, level);
41
- const levelCache = this._getLevelCache(level);
42
- if (levelCache.containsKey(cacheKey)) {
43
- return Promise.resolve(levelCache.get(cacheKey));
44
- }
45
- if (this._isRendering) {
46
- return undefined;
47
- }
48
- return this._doRequestImage(x, y, level, cacheKey);
49
- }
50
- async _doRequestImage(x, y, level, cacheKey) {
51
- const { tilingScheme } = this.tileProvider;
52
- const rectangle = tilingScheme.tileXYToRectangle(x, y, level);
53
- const extent = rectangleToMercatorExtent(rectangle);
54
- // Add gutters to prevent labels from being cut off
55
- const gutterSize = getGutterSize(level);
56
- const gutter = ((extent[2] - extent[0]) / this.tileWidth) * gutterSize;
57
- const expandedExtent = buffer(extent, gutter);
58
- const renderedTile = await this._renderTile(level, expandedExtent, gutterSize);
59
- const levelCache = this._getLevelCache(level);
60
- levelCache.set(cacheKey, renderedTile);
61
- levelCache.expireCache();
62
- return renderedTile;
63
- }
64
- _getLevelCache(level) {
65
- const existing = this._tileCacheByLevel.get(level);
66
- if (existing) {
67
- return existing;
68
- }
69
- const cache = new LRUCache(this._maxCacheSize);
70
- this._tileCacheByLevel.set(level, cache);
71
- return cache;
72
- }
73
- _renderTile(level, extent, gutterSize) {
74
- const TIMEOUT_MS = 2500;
75
- return new Promise((resolve) => {
76
- this._isRendering = true;
77
- let isFinished = false;
78
- const finish = (canvas) => {
79
- if (isFinished) {
80
- return;
81
- }
82
- isFinished = true;
83
- this._isRendering = false;
84
- resolve(canvas);
85
- };
86
- try {
87
- if (!this._renderMap) {
88
- finish(this.emptyCanvas);
89
- return;
90
- }
91
- const renderWidth = this.tileWidth + 2 * gutterSize;
92
- const renderHeight = this.tileHeight + 2 * gutterSize;
93
- const view = this._renderMap.getView();
94
- view.setCenter(getCenter(extent));
95
- view.setZoom(level);
96
- this._renderMap.setSize([renderWidth, renderHeight]);
97
- const handleRenderComplete = () => {
98
- this._renderMap?.un('rendercomplete', handleRenderComplete);
99
- const renderedCanvas = this._renderMap
100
- ?.getViewport()
101
- .querySelector('canvas');
102
- if (!renderedCanvas) {
103
- finish(this.emptyCanvas);
104
- return;
105
- }
106
- // Crop the canvas to extract the center portion (original tile size)
107
- const tileCanvas = document.createElement('canvas');
108
- tileCanvas.width = this.tileWidth;
109
- tileCanvas.height = this.tileHeight;
110
- const ctx = tileCanvas.getContext('2d');
111
- if (ctx) {
112
- const scaleX = renderedCanvas.width / renderWidth;
113
- const scaleY = renderedCanvas.height / renderHeight;
114
- ctx.drawImage(renderedCanvas, gutterSize * scaleX, gutterSize * scaleY, this.tileWidth * scaleX, this.tileHeight * scaleY, 0, 0, this.tileWidth, this.tileHeight);
115
- }
116
- finish(tileCanvas);
117
- };
118
- const timeoutId = window.setTimeout(() => {
119
- this._renderMap?.un('rendercomplete', handleRenderComplete);
120
- getLogger('MapboxVectorTileImageryProvider').warning('Tile render timed out; returning empty tile.');
121
- finish(this.emptyCanvas);
122
- }, TIMEOUT_MS);
123
- const wrappedHandleRenderComplete = () => {
124
- window.clearTimeout(timeoutId);
125
- handleRenderComplete();
126
- };
127
- this._renderMap.once('rendercomplete', wrappedHandleRenderComplete);
128
- this._renderMap.render();
129
- }
130
- catch (e) {
131
- getLogger('MapboxVectorTileImageryProvider').error(`Error rendering tile: ${e.message}`);
132
- finish(this.emptyCanvas);
133
- }
134
- });
135
- }
136
- destroy() {
137
- for (const cache of this._tileCacheByLevel.values()) {
138
- cache.clear();
139
- }
140
- this._tileCacheByLevel.clear();
141
- this._isRendering = false;
142
- this._renderMap?.setTarget(undefined);
143
- this._renderMap?.dispose();
144
- }
145
- }
146
- export default MapboxStyleImageryProvider;
147
- //# sourceMappingURL=mapboxStyleImageryProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mapboxStyleImageryProvider.js","sourceRoot":"","sources":["../../../../src/layer/cesium/mapboxStyleImageryProvider.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"vectorTileImageryProvider.js","sourceRoot":"","sources":["../../../../src/layer/cesium/vectorTileImageryProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,IAAI,WAAW,GAGrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,OAAO,EACP,MAAM,IAAI,eAAe,EACzB,KAAK,IAAI,cAAc,GACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAe,SAAS,EAAE,MAAM,cAAc,CAAC;AAOtD,OAAO,kBAAkB,MAAM,8CAA8C,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,MAAM,UAAU,SAAS,CACvB,MAAc,EACd,MAAkB,EAClB,OAAiC,EACjC,QAAc;IAEd,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC3B,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IACxC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IACzC,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAC/C,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,cAAc,CAAC,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,OAAO,CAC1B,SAAS,EACT,GAAG,EACH,GAAG,EACH,EAAE,EACF,EAAE,EACF,CAAC,EACD,CAAC,MAAM,CAAC,CAAC,CAAC,EACV,CAAC,MAAM,CAAC,CAAC,CAAC,CACX,CAAC;IAEF,OAAO,IAAI,kBAAkB,CAC3B,OAAO,EACP,CAAC,EACD,MAAM,EACN,YAAY,EACZ,CAAC,EACD,SAAS,EACT,SAAS,EACT,MAAM,CACP,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAAmB,EACnB,MAAc,EACd,gBAA0C,EAC1C,QAAc;IAEd,IAAI,gBAAgB,EAAE,CAAC;QACrB,SAAS,CAAC,2BAA2B,CAAC,CAAC,SAAS,CAC9C,uBAAuB,EACvB,gFAAgF,CACjF,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,aAAa,GAAG,SAAS,CAC7B,MAAM,EACN,SAAS,CAAC,MAAM,CAAC,EACjB,MAAM,CAAC,UAAU,CAAC,IAAI,CAA6B,EACnD,QAAQ,CACT,CAAC;IAEF,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,MAAM,aAAa,GAAG,OAAO,CAAC,gBAAgB,EAAmB,CAAC;QAClE,MAAM,aAAa,GAAG,aAAa,CAAC,OAAO,EAAE,CAAC,CAAY,CAAC;QAC3D,aAAa,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;YACnC,aAAa,CAAC,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAQD;;GAEG;AACH,MAAM,yBAAyB;IAC7B,YAAY,CAAe;IAEnB,aAAa,CAAe;IAE5B,SAAS,CAAO;IAEhB,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IAExC,OAAO,CAA0B;IAEjC,WAAW,CAAoB;IAE/B,QAAQ,GAAG,CAAC,CAAC;IAEb,QAAQ,GAAG,EAAE,CAAC;IAEd,gEAAgE;IAChE,OAAO,GAA6B,SAAS,CAAC;IAE9C,YAAY,OAAyC;QACnD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;QACpD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;QAErC,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;QACxC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;QAC1C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACjC,CAAC;IAED,uFAAuF;IACvF,IAAI,MAAM;QACR,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kDAAkD;IAClD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;IACtC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,kDAAkD;IAClD,IAAI,iBAAiB;QACnB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,kDAAkD;IAClD,IAAI,MAAM;QACR,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,kDAAkD;IAClD,IAAI,KAAK;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,kDAAkD;IAClD,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,YAAY,CAChB,CAAS,EACT,CAAS,EACT,KAAa;QAGb,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,kBAAkB,CACzD,CAAC,EACD,CAAC,EACD,KAAK,EACL,IAAI,CAAC,OAAO,CACb,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,WAAW,CAAC;QAC1B,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,iBAAiB,CAChE,CAAC,EACD,CAAC,EACD,KAAK,CACN,CAAC;QACF,MAAM,MAAM,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAC;QACpD,OAAO,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5E,CAAC;CACF;AAED,eAAe,yBAAyB,CAAC"}
@@ -1,214 +0,0 @@
1
- import { parseInteger } from '@vcsuite/parsers';
2
- import { getLogger } from '@vcsuite/logger';
3
- import type LayerGroup from 'ol/layer/Group.js';
4
- import { getCenter, buffer } from 'ol/extent.js';
5
- import LRUCache from 'ol/structs/LRUCache.js';
6
- import OLMap from 'ol/Map.js';
7
- import { rectangleToMercatorExtent } from '../../util/math.js';
8
- import VectorTileImageryProvider from './vectorTileImageryProvider.js';
9
- import type { VectorTileImageryProviderOptions } from './vectorTileImageryProvider.js';
10
-
11
- export type MapboxStyleImageryProviderOptions =
12
- VectorTileImageryProviderOptions & {
13
- styledMapboxLayerGroup: LayerGroup;
14
- minimumTerrainLevel?: number;
15
- maximumTerrainLevel?: number;
16
- tileCacheSize?: number;
17
- };
18
-
19
- function getTileCacheKey(x: number, y: number, level: number): string {
20
- return `${x}-${y}-${level}`;
21
- }
22
-
23
- function getGutterSize(level: number): number {
24
- if (level < 12) {
25
- return 32;
26
- }
27
- if (level < 15) {
28
- return 48;
29
- }
30
- return 64;
31
- }
32
-
33
- /**
34
- * Implementation of Cesium ImageryProvider Interface for Mapbox Style Tiles
35
- */
36
- class MapboxStyleImageryProvider extends VectorTileImageryProvider {
37
- static get className(): string {
38
- return 'MapboxStyleImageryProvider';
39
- }
40
-
41
- private _tileCacheByLevel: Map<number, LRUCache<HTMLCanvasElement>>;
42
-
43
- private _maxCacheSize: number;
44
-
45
- private _isRendering = false;
46
-
47
- private _renderMap = new OLMap({
48
- target: document.createElement('div'),
49
- });
50
-
51
- constructor(options: MapboxStyleImageryProviderOptions) {
52
- super(options);
53
-
54
- this._tileCacheByLevel = new Map();
55
- this._maxCacheSize = parseInteger(options.tileCacheSize, 100);
56
- this._renderMap.addLayer(options.styledMapboxLayerGroup);
57
- }
58
-
59
- requestImage(
60
- x: number,
61
- y: number,
62
- level: number,
63
- ): Promise<HTMLImageElement | HTMLCanvasElement> | undefined {
64
- const cacheKey = getTileCacheKey(x, y, level);
65
- const levelCache = this._getLevelCache(level);
66
- if (levelCache.containsKey(cacheKey)) {
67
- return Promise.resolve(levelCache.get(cacheKey));
68
- }
69
- if (this._isRendering) {
70
- return undefined;
71
- }
72
- return this._doRequestImage(x, y, level, cacheKey);
73
- }
74
-
75
- private async _doRequestImage(
76
- x: number,
77
- y: number,
78
- level: number,
79
- cacheKey: string,
80
- ): Promise<HTMLImageElement | HTMLCanvasElement> {
81
- const { tilingScheme } = this.tileProvider;
82
- const rectangle = tilingScheme.tileXYToRectangle(x, y, level);
83
- const extent = rectangleToMercatorExtent(rectangle);
84
-
85
- // Add gutters to prevent labels from being cut off
86
- const gutterSize = getGutterSize(level);
87
- const gutter = ((extent[2] - extent[0]) / this.tileWidth) * gutterSize;
88
- const expandedExtent = buffer(extent, gutter);
89
-
90
- const renderedTile = await this._renderTile(
91
- level,
92
- expandedExtent,
93
- gutterSize,
94
- );
95
- const levelCache = this._getLevelCache(level);
96
- levelCache.set(cacheKey, renderedTile);
97
- levelCache.expireCache();
98
- return renderedTile;
99
- }
100
-
101
- private _getLevelCache(level: number): LRUCache<HTMLCanvasElement> {
102
- const existing = this._tileCacheByLevel.get(level);
103
- if (existing) {
104
- return existing;
105
- }
106
- const cache = new LRUCache<HTMLCanvasElement>(this._maxCacheSize);
107
- this._tileCacheByLevel.set(level, cache);
108
- return cache;
109
- }
110
-
111
- private _renderTile(
112
- level: number,
113
- extent: number[],
114
- gutterSize: number,
115
- ): Promise<HTMLCanvasElement> {
116
- const TIMEOUT_MS = 2500;
117
- return new Promise((resolve) => {
118
- this._isRendering = true;
119
- let isFinished = false;
120
- const finish = (canvas: HTMLCanvasElement): void => {
121
- if (isFinished) {
122
- return;
123
- }
124
- isFinished = true;
125
- this._isRendering = false;
126
- resolve(canvas);
127
- };
128
-
129
- try {
130
- if (!this._renderMap) {
131
- finish(this.emptyCanvas);
132
- return;
133
- }
134
-
135
- const renderWidth = this.tileWidth + 2 * gutterSize;
136
- const renderHeight = this.tileHeight + 2 * gutterSize;
137
-
138
- const view = this._renderMap.getView();
139
- view.setCenter(getCenter(extent));
140
- view.setZoom(level);
141
- this._renderMap.setSize([renderWidth, renderHeight]);
142
-
143
- const handleRenderComplete = (): void => {
144
- this._renderMap?.un('rendercomplete', handleRenderComplete);
145
-
146
- const renderedCanvas = this._renderMap
147
- ?.getViewport()
148
- .querySelector('canvas');
149
-
150
- if (!renderedCanvas) {
151
- finish(this.emptyCanvas);
152
- return;
153
- }
154
-
155
- // Crop the canvas to extract the center portion (original tile size)
156
- const tileCanvas = document.createElement('canvas');
157
- tileCanvas.width = this.tileWidth;
158
- tileCanvas.height = this.tileHeight;
159
- const ctx = tileCanvas.getContext('2d');
160
- if (ctx) {
161
- const scaleX = renderedCanvas.width / renderWidth;
162
- const scaleY = renderedCanvas.height / renderHeight;
163
- ctx.drawImage(
164
- renderedCanvas,
165
- gutterSize * scaleX,
166
- gutterSize * scaleY,
167
- this.tileWidth * scaleX,
168
- this.tileHeight * scaleY,
169
- 0,
170
- 0,
171
- this.tileWidth,
172
- this.tileHeight,
173
- );
174
- }
175
-
176
- finish(tileCanvas);
177
- };
178
-
179
- const timeoutId = window.setTimeout(() => {
180
- this._renderMap?.un('rendercomplete', handleRenderComplete);
181
- getLogger('MapboxVectorTileImageryProvider').warning(
182
- 'Tile render timed out; returning empty tile.',
183
- );
184
- finish(this.emptyCanvas);
185
- }, TIMEOUT_MS);
186
-
187
- const wrappedHandleRenderComplete = (): void => {
188
- window.clearTimeout(timeoutId);
189
- handleRenderComplete();
190
- };
191
-
192
- this._renderMap.once('rendercomplete', wrappedHandleRenderComplete);
193
- this._renderMap.render();
194
- } catch (e: unknown) {
195
- getLogger('MapboxVectorTileImageryProvider').error(
196
- `Error rendering tile: ${(e as Error).message}`,
197
- );
198
- finish(this.emptyCanvas);
199
- }
200
- });
201
- }
202
-
203
- destroy(): void {
204
- for (const cache of this._tileCacheByLevel.values()) {
205
- cache.clear();
206
- }
207
- this._tileCacheByLevel.clear();
208
- this._isRendering = false;
209
- this._renderMap?.setTarget(undefined);
210
- this._renderMap?.dispose();
211
- }
212
- }
213
-
214
- export default MapboxStyleImageryProvider;