@vcmap/core 6.3.1 → 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 (65) 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} +88 -97
  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} +12 -26
  27. package/dist/src/layer/cesium/imageryProvider/vectorTileImageryProvider.js +88 -0
  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} +111 -119
  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} +35 -102
  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 +0 -133
  64. package/dist/src/layer/cesium/vectorTileImageryProvider.js.map +0 -1
  65. 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":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,KAAK,MAAM,WAAW,CAAC;AAC9B,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,yBAAyB,MAAM,gCAAgC,CAAC;AAWvE,SAAS,eAAe,CAAC,CAAS,EAAE,CAAS,EAAE,KAAa;IAC1D,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,MAAM,0BAA2B,SAAQ,yBAAyB;IAChE,MAAM,KAAK,SAAS;QAClB,OAAO,4BAA4B,CAAC;IACtC,CAAC;IAEO,iBAAiB,CAA2C;IAE5D,aAAa,CAAS;IAEtB,YAAY,GAAG,KAAK,CAAC;IAErB,UAAU,GAAG,IAAI,KAAK,CAAC;QAC7B,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;KACtC,CAAC,CAAC;IAEH,YAAY,OAA0C;QACpD,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,EAAE,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QAC9D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC3D,CAAC;IAED,YAAY,CACV,CAAS,EACT,CAAS,EACT,KAAa;QAEb,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,CAAS,EACT,CAAS,EACT,KAAa,EACb,QAAgB;QAEhB,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;QAC3C,MAAM,SAAS,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAC;QAEpD,mDAAmD;QACnD,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC;QACvE,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAE9C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CACzC,KAAK,EACL,cAAc,EACd,UAAU,CACX,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC9C,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACvC,UAAU,CAAC,WAAW,EAAE,CAAC;QACzB,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,cAAc,CAAC,KAAa;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAoB,IAAI,CAAC,aAAa,CAAC,CAAC;QAClE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACzC,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,WAAW,CACjB,KAAa,EACb,MAAgB,EAChB,UAAkB;QAElB,MAAM,UAAU,GAAG,IAAI,CAAC;QACxB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,UAAU,GAAG,KAAK,CAAC;YACvB,MAAM,MAAM,GAAG,CAAC,MAAyB,EAAQ,EAAE;gBACjD,IAAI,UAAU,EAAE,CAAC;oBACf,OAAO;gBACT,CAAC;gBACD,UAAU,GAAG,IAAI,CAAC;gBAClB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC,CAAC;YAEF,IAAI,CAAC;gBACH,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;oBACrB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBACzB,OAAO;gBACT,CAAC;gBAED,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,UAAU,CAAC;gBACpD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,UAAU,CAAC;gBAEtD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACvC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;gBAClC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACpB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;gBAErD,MAAM,oBAAoB,GAAG,GAAS,EAAE;oBACtC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;oBAE5D,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU;wBACpC,EAAE,WAAW,EAAE;yBACd,aAAa,CAAC,QAAQ,CAAC,CAAC;oBAE3B,IAAI,CAAC,cAAc,EAAE,CAAC;wBACpB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBACzB,OAAO;oBACT,CAAC;oBAED,qEAAqE;oBACrE,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;oBACpD,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;oBAClC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;oBACpC,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBACxC,IAAI,GAAG,EAAE,CAAC;wBACR,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,GAAG,WAAW,CAAC;wBAClD,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,GAAG,YAAY,CAAC;wBACpD,GAAG,CAAC,SAAS,CACX,cAAc,EACd,UAAU,GAAG,MAAM,EACnB,UAAU,GAAG,MAAM,EACnB,IAAI,CAAC,SAAS,GAAG,MAAM,EACvB,IAAI,CAAC,UAAU,GAAG,MAAM,EACxB,CAAC,EACD,CAAC,EACD,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,UAAU,CAChB,CAAC;oBACJ,CAAC;oBAED,MAAM,CAAC,UAAU,CAAC,CAAC;gBACrB,CAAC,CAAC;gBAEF,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;oBACvC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;oBAC5D,SAAS,CAAC,iCAAiC,CAAC,CAAC,OAAO,CAClD,8CAA8C,CAC/C,CAAC;oBACF,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC3B,CAAC,EAAE,UAAU,CAAC,CAAC;gBAEf,MAAM,2BAA2B,GAAG,GAAS,EAAE;oBAC7C,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;oBAC/B,oBAAoB,EAAE,CAAC;gBACzB,CAAC,CAAC;gBAEF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE,2BAA2B,CAAC,CAAC;gBACpE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YAC3B,CAAC;YAAC,OAAO,CAAU,EAAE,CAAC;gBACpB,SAAS,CAAC,iCAAiC,CAAC,CAAC,KAAK,CAChD,yBAA0B,CAAW,CAAC,OAAO,EAAE,CAChD,CAAC;gBACF,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,EAAE,CAAC;YACpD,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC;IAC7B,CAAC;CACF;AAED,eAAe,0BAA0B,CAAC"}
@@ -1,133 +0,0 @@
1
- import { Event as CesiumEvent, Rectangle, Math as CesiumMath, } from '@vcmap-cesium/engine';
2
- import { compose, create as createTransform, scale as scaleTransform, } from 'ol/transform.js';
3
- import { wgs84ToMercatorTransformer } from '../../util/projection.js';
4
- import CanvasTileRenderer from '../../ol/render/canvas/canvasTileRenderer.js';
5
- import { rectangleToMercatorExtent } from '../../util/math.js';
6
- export function toContext(extent, center, context, tileSize) {
7
- const { canvas } = context;
8
- canvas.width = tileSize[0];
9
- canvas.height = tileSize[1];
10
- canvas.style.width = `${tileSize[0]}px`;
11
- canvas.style.height = `${tileSize[1]}px`;
12
- const scaleY = (extent[2] - extent[0]) / (extent[3] - extent[1]);
13
- const sx = 1 / ((extent[2] - extent[0]) / 256);
14
- const sy = -1 / ((extent[3] - extent[1]) / 256);
15
- const transform = scaleTransform(createTransform(), 1, 1);
16
- const newTransform = compose(transform, 128, 128, sx, sy, 0, -center[0], -center[1]);
17
- return new CanvasTileRenderer(context, 1, extent, newTransform, 0, undefined, undefined, scaleY);
18
- }
19
- /**
20
- * creates a canvas and draws the features on the canvas;
21
- */
22
- export function getCanvasFromFeatures(features, extent, center, tileSize) {
23
- const canvas = document.createElement('canvas');
24
- canvas.width = tileSize[0];
25
- canvas.height = tileSize[0];
26
- const centerMercator = wgs84ToMercatorTransformer([
27
- CesiumMath.toDegrees(center.longitude),
28
- CesiumMath.toDegrees(center.latitude),
29
- ]);
30
- const vectorContext = toContext(extent, centerMercator, canvas.getContext('2d'), tileSize);
31
- features.forEach((feature) => {
32
- const styleFunction = feature.getStyleFunction();
33
- const featureStyles = styleFunction(feature, 1);
34
- featureStyles.forEach((styleToUse) => {
35
- vectorContext.drawFeature(feature, styleToUse);
36
- });
37
- });
38
- return canvas;
39
- }
40
- /**
41
- * implementation of Cesium ImageryProvider Interface
42
- */
43
- class VectorTileImageryProvider {
44
- tileProvider;
45
- _tilingScheme;
46
- _tileSize;
47
- _errorEvent = new CesiumEvent();
48
- headers;
49
- emptyCanvas;
50
- minLevel = 0;
51
- maxLevel = 26;
52
- // eslint-disable-next-line @typescript-eslint/naming-convention
53
- _reload = undefined;
54
- constructor(options) {
55
- this.tileProvider = options.tileProvider;
56
- this._tilingScheme = this.tileProvider.tilingScheme;
57
- this._tileSize = options.tileSize;
58
- this._errorEvent = new CesiumEvent();
59
- this.emptyCanvas = document.createElement('canvas');
60
- this.emptyCanvas.width = this.tileWidth;
61
- this.emptyCanvas.height = this.tileHeight;
62
- this.headers = options.headers;
63
- }
64
- // eslint-disable-next-line class-methods-use-this,@typescript-eslint/naming-convention
65
- get _ready() {
66
- return true;
67
- }
68
- // eslint-disable-next-line class-methods-use-this
69
- get ready() {
70
- return true;
71
- }
72
- get rectangle() {
73
- return this._tilingScheme.rectangle;
74
- }
75
- get tileWidth() {
76
- return this._tileSize[0];
77
- }
78
- get tileHeight() {
79
- return this._tileSize[1];
80
- }
81
- get maximumLevel() {
82
- return this.maxLevel;
83
- }
84
- get minimumLevel() {
85
- return this.minLevel;
86
- }
87
- get tilingScheme() {
88
- return this._tilingScheme;
89
- }
90
- // eslint-disable-next-line class-methods-use-this
91
- get tileDiscardPolicy() {
92
- return undefined;
93
- }
94
- get errorEvent() {
95
- return this._errorEvent;
96
- }
97
- // eslint-disable-next-line class-methods-use-this
98
- get credit() {
99
- return undefined;
100
- }
101
- // eslint-disable-next-line class-methods-use-this
102
- get proxy() {
103
- return undefined;
104
- }
105
- // eslint-disable-next-line class-methods-use-this
106
- get hasAlphaChannel() {
107
- return true;
108
- }
109
- /**
110
- * Requests the image for a given tile. This function should
111
- * not be called before returns true.
112
- *
113
- * @param x The tile X coordinate.
114
- * @param y The tile Y coordinate.
115
- * @param level The tile level.
116
- * @returns A promise for the image that will resolve when the image is available, or
117
- * undefined if there are too many active requests to the server, and the request
118
- * should be retried later. The resolved image may be either an
119
- * Image or a Canvas DOM object.
120
- */
121
- async requestImage(x, y, level) {
122
- const features = await this.tileProvider.getFeaturesForTile(x, y, level, this.headers);
123
- if (features.length === 0) {
124
- return this.emptyCanvas;
125
- }
126
- const rectangle = this.tileProvider.tilingScheme.tileXYToRectangle(x, y, level);
127
- const extent = rectangleToMercatorExtent(rectangle);
128
- const center = Rectangle.center(rectangle);
129
- return getCanvasFromFeatures(features, extent, center, this._tileSize);
130
- }
131
- }
132
- export default VectorTileImageryProvider;
133
- //# sourceMappingURL=vectorTileImageryProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vectorTileImageryProvider.js","sourceRoot":"","sources":["../../../../src/layer/cesium/vectorTileImageryProvider.ts"],"names":[],"mappings":"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"}
@@ -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;