@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,18 +1,41 @@
1
1
  import { createEmpty as createEmptyExtent, extend as extendExtent, getWidth as getExtentWidth, getHeight as getExtentHeight, getTopLeft as getTopLeftExtent, } from 'ol/extent.js';
2
2
  import TileState from 'ol/TileState.js';
3
- import { Cartesian2, Event as CesiumEvent, GeographicTilingScheme, Math as CesiumMath, Rectangle, WebMercatorTilingScheme, } from '@vcmap-cesium/engine';
3
+ import { Cartesian2, GeographicTilingScheme, Math as CesiumMath, Rectangle, WebMercatorTilingScheme, } from '@vcmap-cesium/engine';
4
4
  import EventType from 'ol/events/EventType.js';
5
- import { mercatorExtentToRectangle, rectangleToMercatorExtent, } from '../../util/math.js';
5
+ import { mercatorExtentToRectangle, rectangleToMercatorExtent, } from '../../../util/math.js';
6
+ import AbstractVcsImageryProvider from './abstractVcsImageryProvider.js';
6
7
  export function createEmptyCanvas(width, height) {
7
8
  const canvas = document.createElement('canvas');
8
9
  canvas.width = width;
9
10
  canvas.height = height;
10
11
  return canvas;
11
12
  }
12
- function areGridsAligned(tileGrid, tilingScheme) {
13
+ function areGridsAligned(tileGrid, tilingScheme, source) {
13
14
  const olRectangle = mercatorExtentToRectangle(tileGrid.getTileCoordExtent([0, 0, 0]));
14
15
  const cesiumRectangle = tilingScheme.tileXYToRectangle(0, 0, 0);
15
- return Rectangle.equalsEpsilon(cesiumRectangle, olRectangle, CesiumMath.EPSILON8);
16
+ const rectanglesEqual = Rectangle.equalsEpsilon(cesiumRectangle, olRectangle, CesiumMath.EPSILON8);
17
+ if (rectanglesEqual) {
18
+ let width = 0;
19
+ let height = 0;
20
+ const numResolutions = tileGrid.getResolutions().length;
21
+ for (let i = 0; i < numResolutions; i++) {
22
+ // @ts-expect-error protected
23
+ const size = source.getTileSize(i);
24
+ if (!width) {
25
+ width = Math.round(size[0]);
26
+ }
27
+ else if (width !== Math.round(size[0])) {
28
+ return false;
29
+ }
30
+ if (!height) {
31
+ height = Math.round(size[1]);
32
+ }
33
+ else if (height !== Math.round(size[1])) {
34
+ return false;
35
+ }
36
+ }
37
+ }
38
+ return rectanglesEqual;
16
39
  }
17
40
  function getTilingSchemeFromSource(source) {
18
41
  const tileGrid = source.getTileGrid();
@@ -40,83 +63,73 @@ function getTilingSchemeFromSource(source) {
40
63
  }
41
64
  return tilingScheme;
42
65
  }
43
- export default class COGImageryProvider {
66
+ function drawData(ctx, data, size, offsetX = 0, offsetY = 0) {
67
+ const imageData = ctx.createImageData(size[0], size[1]);
68
+ let usedData = data;
69
+ // this is a grey image
70
+ if (data.length === imageData.data.length / 2) {
71
+ usedData = new Uint8Array(imageData.data.length);
72
+ for (let i = 0; i < data.length; i++) {
73
+ const value = data[i];
74
+ if (i % 2 === 0) {
75
+ const pixelOffset = (i / 2) * 4;
76
+ usedData[pixelOffset] = value;
77
+ usedData[pixelOffset + 1] = value;
78
+ usedData[pixelOffset + 2] = value;
79
+ }
80
+ else {
81
+ const pixelOffset = ((i - 1) / 2) * 4;
82
+ usedData[pixelOffset + 3] = value;
83
+ }
84
+ }
85
+ }
86
+ imageData.data.set(usedData);
87
+ ctx.putImageData(imageData, offsetX, offsetY);
88
+ }
89
+ function getMaximumTileSize(source) {
90
+ let width = 0;
91
+ let height = 0;
92
+ const numResolutions = source.getTileGrid().getResolutions().length;
93
+ for (let i = 0; i < numResolutions; i++) {
94
+ // @ts-expect-error protected
95
+ const size = source.getTileSize(i);
96
+ if (width < size[0] && height < size[1]) {
97
+ width = Math.round(size[0]);
98
+ height = Math.round(size[1]);
99
+ }
100
+ }
101
+ return [width, height];
102
+ }
103
+ export default class COGImageryProvider extends AbstractVcsImageryProvider {
44
104
  _source;
45
- _emptyCanvas;
46
105
  // eslint-disable-next-line @typescript-eslint/naming-convention
47
106
  _reload = undefined;
48
107
  _projection;
49
- _tilingScheme;
50
108
  _tileGrid;
51
109
  _boundTileLoader;
52
- tileWidth = 256;
53
- tileHeight = 256;
54
110
  constructor(_source) {
111
+ const tileSize = getMaximumTileSize(_source);
112
+ const maxLevel = _source.getTileGrid()?.getMaxZoom?.() ?? 26;
113
+ super({
114
+ tilingScheme: getTilingSchemeFromSource(_source),
115
+ tileSize,
116
+ minLevel: 0,
117
+ maxLevel,
118
+ });
55
119
  this._source = _source;
56
- this._emptyCanvas = createEmptyCanvas(this.tileWidth, this.tileHeight);
57
120
  this._projection = this._source.getProjection();
58
121
  this._tileGrid = this._source.getTileGrid();
59
- this._tilingScheme = getTilingSchemeFromSource(this._source);
60
- if (areGridsAligned(this._tileGrid, this._tilingScheme)) {
122
+ if (areGridsAligned(this._tileGrid, this._tilingScheme, this._source)) {
61
123
  this._boundTileLoader = this._loadAlignedTile.bind(this);
62
124
  }
63
125
  else {
64
126
  this._boundTileLoader = this._loadUnalignedTile.bind(this);
65
127
  }
66
- // @ts-expect-error protected
67
- const [width, height] = this._source.getTileSize(0);
68
- this.tileWidth = Math.round(width);
69
- this.tileHeight = Math.round(height);
70
- }
71
- // eslint-disable-next-line class-methods-use-this,@typescript-eslint/naming-convention
72
- get _ready() {
73
- return true;
74
- }
75
- // eslint-disable-next-line class-methods-use-this
76
- get ready() {
77
- return true;
78
- }
79
- get rectangle() {
80
- return this._tilingScheme.rectangle;
81
- }
82
- get tilingScheme() {
83
- return this._tilingScheme;
84
- }
85
- errorEvent = new CesiumEvent();
86
- // eslint-disable-next-line class-methods-use-this
87
- get credit() {
88
- return undefined;
89
- }
90
- // eslint-disable-next-line class-methods-use-this
91
- get proxy() {
92
- return undefined;
93
- }
94
- get maximumLevel() {
95
- const tileGrid = this._source.getTileGrid();
96
- if (tileGrid) {
97
- return tileGrid.getMaxZoom();
98
- }
99
- else {
100
- return 18; // some arbitrary value
101
- }
102
128
  }
103
- // eslint-disable-next-line class-methods-use-this
104
- get minimumLevel() {
105
- // WARNING: Do not use the minimum level (at least until the extent is
106
- // properly set). Cesium assumes the minimumLevel to contain only
107
- // a few tiles and tries to load them all at once -- this can
108
- // freeze and/or crash the browser !
109
- return 0;
110
- //var tg = this._source.getTileGrid();
111
- //return tg ? tg.getMinZoom() : 0;
112
- }
113
- // eslint-disable-next-line class-methods-use-this
114
- get tileDiscardPolicy() {
115
- return undefined;
116
- }
117
- // eslint-disable-next-line class-methods-use-this
118
- get hasAlphaChannel() {
119
- return true;
129
+ _getTileSizeForLevel(level) {
130
+ // @ts-expect-error protected
131
+ const [width, height] = this._source.getTileSize(level);
132
+ return [Math.round(width), Math.round(height)];
120
133
  }
121
134
  async _loadOLTile(x, y, level) {
122
135
  const tile = this._source.getTile(level, x, y, 1, this._projection);
@@ -151,40 +164,17 @@ export default class COGImageryProvider {
151
164
  }
152
165
  return Promise.resolve(undefined);
153
166
  }
154
- _drawData(ctx, data, offsetX = 0, offsetY = 0) {
155
- const imageData = ctx.createImageData(this.tileWidth, this.tileHeight);
156
- let usedData = data;
157
- // this is a grey image
158
- if (data.length === imageData.data.length / 2) {
159
- usedData = new Uint8Array(imageData.data.length);
160
- for (let i = 0; i < data.length; i++) {
161
- const value = data[i];
162
- if (i % 2 === 0) {
163
- const pixelOffset = (i / 2) * 4;
164
- usedData[pixelOffset] = value;
165
- usedData[pixelOffset + 1] = value;
166
- usedData[pixelOffset + 2] = value;
167
- }
168
- else {
169
- const pixelOffset = ((i - 1) / 2) * 4;
170
- usedData[pixelOffset + 3] = value;
171
- }
172
- }
173
- }
174
- imageData.data.set(usedData);
175
- ctx.putImageData(imageData, offsetX, offsetY);
176
- }
177
167
  async _loadAlignedTile(x, y, level) {
178
168
  const tileData = await this._loadOLTile(x, y, level);
179
169
  if (tileData) {
180
170
  const canvas = createEmptyCanvas(this.tileWidth, this.tileHeight);
181
171
  const ctx = canvas.getContext('2d');
182
172
  if (ctx) {
183
- this._drawData(ctx, tileData);
173
+ drawData(ctx, tileData, [this.tileWidth, this.tileHeight]);
184
174
  }
185
175
  return canvas;
186
176
  }
187
- return this._emptyCanvas;
177
+ return this.emptyCanvas;
188
178
  }
189
179
  async _loadUnalignedTile(x, y, level) {
190
180
  const rectangle = this._tilingScheme.tileXYToRectangle(x, y, level);
@@ -192,10 +182,11 @@ export default class COGImageryProvider {
192
182
  const resolution = Math.max(getExtentWidth(extent) / this.tileWidth, getExtentHeight(extent) / this.tileHeight);
193
183
  const levelResolution = this._tileGrid.getZForResolution(resolution);
194
184
  const tileRange = this._tileGrid.getTileRangeForExtentAndZ(extent, levelResolution);
195
- const canvas = createEmptyCanvas(this.tileWidth * tileRange.getWidth(), this.tileHeight * tileRange.getHeight());
185
+ const [levelWidth, levelHeight] = this._getTileSizeForLevel(levelResolution);
186
+ const canvas = createEmptyCanvas(levelWidth * tileRange.getWidth(), levelHeight * tileRange.getHeight());
196
187
  const ctx = canvas.getContext('2d');
197
188
  if (!ctx) {
198
- return this._emptyCanvas;
189
+ return this.emptyCanvas;
199
190
  }
200
191
  const promises = [];
201
192
  const tileRangeExtent = createEmptyExtent();
@@ -208,15 +199,15 @@ export default class COGImageryProvider {
208
199
  ]));
209
200
  promises.push(this._loadOLTile(partialX, partialY, levelResolution).then((tileData) => {
210
201
  if (tileData) {
211
- this._drawData(ctx, tileData, (partialX - tileRange.minX) * this.tileWidth, (partialY - tileRange.minY) * this.tileHeight);
202
+ drawData(ctx, tileData, [levelWidth, levelHeight], (partialX - tileRange.minX) * levelWidth, (partialY - tileRange.minY) * levelHeight);
212
203
  }
213
204
  }));
214
205
  }
215
206
  }
216
207
  await Promise.all(promises);
217
- const unitsPerPixelX = getExtentWidth(tileRangeExtent) / (this.tileWidth * tileRange.getWidth());
218
- const unitsPerPixelY = getExtentHeight(tileRangeExtent) /
219
- (this.tileHeight * tileRange.getHeight());
208
+ // TODO if canvas has same height and width early escape
209
+ const unitsPerPixelX = getExtentWidth(tileRangeExtent) / (levelWidth * tileRange.getWidth());
210
+ const unitsPerPixelY = getExtentHeight(tileRangeExtent) / (levelHeight * tileRange.getHeight());
220
211
  const tileRangeTopLeft = getTopLeftExtent(tileRangeExtent);
221
212
  const extentTopLeft = getTopLeftExtent(extent);
222
213
  const windowX = Math.abs(tileRangeTopLeft[0] - extentTopLeft[0]) / unitsPerPixelX;
@@ -229,7 +220,7 @@ export default class COGImageryProvider {
229
220
  windowCtx.drawImage(canvas, windowX, windowY, windowWidth, windowHeight, 0, 0, this.tileWidth, this.tileHeight);
230
221
  return windowCanvas;
231
222
  }
232
- return this._emptyCanvas;
223
+ return this.emptyCanvas;
233
224
  }
234
225
  requestImage(x, y, level) {
235
226
  return this._boundTileLoader(x, y, level);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cogImageryProvider.js","sourceRoot":"","sources":["../../../../../src/layer/cesium/imageryProvider/cogImageryProvider.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import type LayerGroup from 'ol/layer/Group.js';
2
- import VectorTileImageryProvider from './vectorTileImageryProvider.js';
3
2
  import type { VectorTileImageryProviderOptions } from './vectorTileImageryProvider.js';
3
+ import AbstractVcsImageryProvider from './abstractVcsImageryProvider.js';
4
+ import type TileProvider from '../../tileProvider/tileProvider.js';
4
5
  export type MapboxStyleImageryProviderOptions = VectorTileImageryProviderOptions & {
5
6
  styledMapboxLayerGroup: LayerGroup;
6
7
  minimumTerrainLevel?: number;
@@ -10,17 +11,12 @@ export type MapboxStyleImageryProviderOptions = VectorTileImageryProviderOptions
10
11
  /**
11
12
  * Implementation of Cesium ImageryProvider Interface for Mapbox Style Tiles
12
13
  */
13
- declare class MapboxStyleImageryProvider extends VectorTileImageryProvider {
14
+ declare class MapboxStyleImageryProvider extends AbstractVcsImageryProvider {
14
15
  static get className(): string;
15
- private _tileCacheByLevel;
16
- private _maxCacheSize;
17
- private _isRendering;
18
- private _renderMap;
16
+ tileProvider: TileProvider;
17
+ private _olImageRenderer;
19
18
  constructor(options: MapboxStyleImageryProviderOptions);
20
19
  requestImage(x: number, y: number, level: number): Promise<HTMLImageElement | HTMLCanvasElement> | undefined;
21
- private _doRequestImage;
22
- private _getLevelCache;
23
- private _renderTile;
24
20
  destroy(): void;
25
21
  }
26
22
  export default MapboxStyleImageryProvider;
@@ -0,0 +1,37 @@
1
+ import { createOLImageRenderer, } from './olImageRenderer.js';
2
+ import AbstractVcsImageryProvider from './abstractVcsImageryProvider.js';
3
+ /**
4
+ * Implementation of Cesium ImageryProvider Interface for Mapbox Style Tiles
5
+ */
6
+ class MapboxStyleImageryProvider extends AbstractVcsImageryProvider {
7
+ static get className() {
8
+ return 'MapboxStyleImageryProvider';
9
+ }
10
+ tileProvider;
11
+ _olImageRenderer;
12
+ constructor(options) {
13
+ super({
14
+ tilingScheme: options.tileProvider.tilingScheme,
15
+ tileSize: options.tileSize,
16
+ minLevel: 0,
17
+ maxLevel: 26,
18
+ });
19
+ this.tileProvider = options.tileProvider;
20
+ this._olImageRenderer = createOLImageRenderer({
21
+ tilingScheme: this.tileProvider.tilingScheme,
22
+ tileWidth: this.tileWidth,
23
+ tileHeight: this.tileHeight,
24
+ tileCacheSize: options.tileCacheSize,
25
+ emptyCanvas: this.emptyCanvas,
26
+ });
27
+ this._olImageRenderer.map.addLayer(options.styledMapboxLayerGroup);
28
+ }
29
+ requestImage(x, y, level) {
30
+ return this._olImageRenderer.requestImage(x, y, level);
31
+ }
32
+ destroy() {
33
+ this._olImageRenderer.destroy();
34
+ }
35
+ }
36
+ export default MapboxStyleImageryProvider;
37
+ //# sourceMappingURL=mapboxStyleImageryProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapboxStyleImageryProvider.js","sourceRoot":"","sources":["../../../../../src/layer/cesium/imageryProvider/mapboxStyleImageryProvider.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,qBAAqB,GAEtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,0BAA0B,MAAM,iCAAiC,CAAC;AAWzE;;GAEG;AACH,MAAM,0BAA2B,SAAQ,0BAA0B;IACjE,MAAM,KAAK,SAAS;QAClB,OAAO,4BAA4B,CAAC;IACtC,CAAC;IAED,YAAY,CAAe;IAEnB,gBAAgB,CAAkB;IAE1C,YAAY,OAA0C;QACpD,KAAK,CAAC;YACJ,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,YAAY;YAC/C,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,EAAE;SACb,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QAEzC,IAAI,CAAC,gBAAgB,GAAG,qBAAqB,CAAC;YAC5C,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY;YAC5C,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACrE,CAAC;IAED,YAAY,CACV,CAAS,EACT,CAAS,EACT,KAAa;QAEb,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;IAED,OAAO;QACL,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;IAClC,CAAC;CACF;AAED,eAAe,0BAA0B,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { TilingScheme } from '@vcmap-cesium/engine';
2
+ import OLMap from 'ol/Map.js';
3
+ import { type Extent } from 'ol/extent.js';
4
+ export type OLImageRenderer = {
5
+ readonly isRendering: boolean;
6
+ readonly map: OLMap;
7
+ requestImage(x: number, y: number, level: number): Promise<HTMLImageElement | HTMLCanvasElement> | undefined;
8
+ destroy(): void;
9
+ };
10
+ export type OLImageRendererOptions = {
11
+ tilingScheme: TilingScheme;
12
+ tileWidth: number;
13
+ tileHeight: number;
14
+ emptyCanvas: HTMLCanvasElement;
15
+ tileCacheSize?: number;
16
+ fetchFeatures?: (x: number, y: number, level: number, extent: Extent) => Promise<void>;
17
+ };
18
+ export declare function createOLImageRenderer(options: OLImageRendererOptions): OLImageRenderer;
@@ -0,0 +1,144 @@
1
+ import OLMap from 'ol/Map.js';
2
+ import LRUCache from 'ol/structs/LRUCache.js';
3
+ import { buffer, getCenter } from 'ol/extent.js';
4
+ import { getLogger } from '@vcsuite/logger';
5
+ import { parseInteger } from '@vcsuite/parsers';
6
+ import { rectangleToMercatorExtent } from '../../../util/math.js';
7
+ function getTileCacheKey(x, y, level) {
8
+ return `${x}-${y}-${level}`;
9
+ }
10
+ function getGutterSize(level) {
11
+ if (level < 12) {
12
+ return 32;
13
+ }
14
+ if (level < 15) {
15
+ return 48;
16
+ }
17
+ return 64;
18
+ }
19
+ export function createOLImageRenderer(options) {
20
+ const maxCacheSize = parseInteger(options.tileCacheSize, 100);
21
+ const { tilingScheme, tileWidth, tileHeight, emptyCanvas, fetchFeatures } = options;
22
+ const renderMap = new OLMap({
23
+ target: document.createElement('div'),
24
+ });
25
+ const tileCacheByLevel = new Map();
26
+ let isRendering = false;
27
+ function getLevelCache(level) {
28
+ const existing = tileCacheByLevel.get(level);
29
+ if (existing) {
30
+ return existing;
31
+ }
32
+ const cache = new LRUCache(maxCacheSize);
33
+ tileCacheByLevel.set(level, cache);
34
+ return cache;
35
+ }
36
+ function renderTile(level, extent, gutterSize) {
37
+ const TIMEOUT_MS = 2500;
38
+ return new Promise((resolve) => {
39
+ let isFinished = false;
40
+ const finish = (canvas) => {
41
+ if (isFinished) {
42
+ return;
43
+ }
44
+ isFinished = true;
45
+ resolve(canvas);
46
+ };
47
+ try {
48
+ if (!renderMap) {
49
+ finish(emptyCanvas);
50
+ return;
51
+ }
52
+ const renderWidth = tileWidth + 2 * gutterSize;
53
+ const renderHeight = tileHeight + 2 * gutterSize;
54
+ const view = renderMap.getView();
55
+ view.setCenter(getCenter(extent));
56
+ view.setZoom(level);
57
+ renderMap.setSize([renderWidth, renderHeight]);
58
+ const handleRenderComplete = () => {
59
+ renderMap?.un('rendercomplete', handleRenderComplete);
60
+ const renderedCanvas = renderMap
61
+ ?.getViewport()
62
+ .querySelector('canvas');
63
+ if (!renderedCanvas) {
64
+ finish(emptyCanvas);
65
+ return;
66
+ }
67
+ // Crop the canvas to extract the center portion (original tile size)
68
+ const tileCanvas = document.createElement('canvas');
69
+ tileCanvas.width = tileWidth;
70
+ tileCanvas.height = tileHeight;
71
+ const ctx = tileCanvas.getContext('2d');
72
+ if (ctx) {
73
+ const scaleX = renderedCanvas.width / renderWidth;
74
+ const scaleY = renderedCanvas.height / renderHeight;
75
+ ctx.drawImage(renderedCanvas, gutterSize * scaleX, gutterSize * scaleY, tileWidth * scaleX, tileHeight * scaleY, 0, 0, tileWidth, tileHeight);
76
+ }
77
+ finish(tileCanvas);
78
+ };
79
+ const timeoutId = window.setTimeout(() => {
80
+ renderMap?.un('rendercomplete', handleRenderComplete);
81
+ getLogger('MapboxVectorTileImageryProvider').warning('Tile render timed out; returning empty tile.');
82
+ finish(emptyCanvas);
83
+ }, TIMEOUT_MS);
84
+ const wrappedHandleRenderComplete = () => {
85
+ window.clearTimeout(timeoutId);
86
+ handleRenderComplete();
87
+ };
88
+ renderMap.once('rendercomplete', wrappedHandleRenderComplete);
89
+ renderMap.render();
90
+ }
91
+ catch (e) {
92
+ getLogger('MapboxVectorTileImageryProvider').error(`Error rendering tile: ${e.message}`);
93
+ finish(emptyCanvas);
94
+ }
95
+ });
96
+ }
97
+ async function doRequestImage(x, y, level, cacheKey) {
98
+ const rectangle = tilingScheme.tileXYToRectangle(x, y, level);
99
+ const extent = rectangleToMercatorExtent(rectangle);
100
+ // Add gutters to prevent labels from being cut off
101
+ const gutterSize = getGutterSize(level);
102
+ const gutter = ((extent[2] - extent[0]) / tileWidth) * gutterSize;
103
+ const expandedExtent = buffer(extent, gutter);
104
+ isRendering = true;
105
+ if (fetchFeatures) {
106
+ await fetchFeatures(x, y, level, expandedExtent);
107
+ }
108
+ const renderedTile = await renderTile(level, expandedExtent, gutterSize);
109
+ isRendering = false;
110
+ const levelCache = getLevelCache(level);
111
+ levelCache.set(cacheKey, renderedTile);
112
+ levelCache.expireCache();
113
+ return renderedTile;
114
+ }
115
+ return {
116
+ get map() {
117
+ return renderMap;
118
+ },
119
+ get isRendering() {
120
+ return isRendering;
121
+ },
122
+ requestImage(x, y, level) {
123
+ const cacheKey = getTileCacheKey(x, y, level);
124
+ const levelCache = getLevelCache(level);
125
+ if (levelCache.containsKey(cacheKey)) {
126
+ return Promise.resolve(levelCache.get(cacheKey));
127
+ }
128
+ if (isRendering) {
129
+ return undefined;
130
+ }
131
+ return doRequestImage(x, y, level, cacheKey);
132
+ },
133
+ destroy() {
134
+ for (const cache of tileCacheByLevel.values()) {
135
+ cache.clear();
136
+ }
137
+ tileCacheByLevel.clear();
138
+ isRendering = false;
139
+ renderMap.setTarget(undefined);
140
+ renderMap.dispose();
141
+ },
142
+ };
143
+ }
144
+ //# sourceMappingURL=olImageRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"olImageRenderer.js","sourceRoot":"","sources":["../../../../../src/layer/cesium/imageryProvider/olImageRenderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { type VectorTileImageryProviderOptions } from './vectorTileImageryProvider.js';
2
+ import AbstractVcsImageryProvider from './abstractVcsImageryProvider.js';
3
+ import type TileProvider from '../../tileProvider/tileProvider.js';
4
+ export default class PanoramaDatasetImageryProvider extends AbstractVcsImageryProvider {
5
+ private _source;
6
+ private _olImageRenderer;
7
+ tileProvider: TileProvider;
8
+ constructor(options: VectorTileImageryProviderOptions);
9
+ requestImage(x: number, y: number, level: number): Promise<HTMLImageElement | HTMLCanvasElement> | undefined;
10
+ private _fetchFeatures;
11
+ destroy(): void;
12
+ }
@@ -0,0 +1,45 @@
1
+ import VectorSource from 'ol/source/Vector.js';
2
+ import VectorLayer from 'ol/layer/Vector.js';
3
+ import { createOLImageRenderer, } from './olImageRenderer.js';
4
+ import Extent from '../../../util/extent.js';
5
+ import { mercatorProjection } from '../../../util/projection.js';
6
+ import AbstractVcsImageryProvider from './abstractVcsImageryProvider.js';
7
+ export default class PanoramaDatasetImageryProvider extends AbstractVcsImageryProvider {
8
+ _source = new VectorSource({ useSpatialIndex: false });
9
+ _olImageRenderer;
10
+ tileProvider;
11
+ constructor(options) {
12
+ super({
13
+ tilingScheme: options.tileProvider.tilingScheme,
14
+ tileSize: options.tileSize,
15
+ minLevel: 0,
16
+ maxLevel: 26,
17
+ });
18
+ this.tileProvider = options.tileProvider;
19
+ this._olImageRenderer = createOLImageRenderer({
20
+ tilingScheme: this.tileProvider.tilingScheme,
21
+ tileWidth: this.tileWidth,
22
+ tileHeight: this.tileHeight,
23
+ emptyCanvas: this.emptyCanvas,
24
+ fetchFeatures: this._fetchFeatures.bind(this),
25
+ });
26
+ this._olImageRenderer.map.addLayer(new VectorLayer({ source: this._source, declutter: true }));
27
+ }
28
+ requestImage(x, y, level) {
29
+ return this._olImageRenderer.requestImage(x, y, level);
30
+ }
31
+ async _fetchFeatures(_x, _y, level, extent) {
32
+ const vcsExtent = new Extent({
33
+ coordinates: extent,
34
+ projection: mercatorProjection.toJSON(),
35
+ });
36
+ const features = await this.tileProvider.getFeaturesForExtent(vcsExtent, level);
37
+ this._source.clear(true);
38
+ this._source.addFeatures(features);
39
+ }
40
+ destroy() {
41
+ this._source.dispose();
42
+ this._olImageRenderer.destroy();
43
+ }
44
+ }
45
+ //# sourceMappingURL=panoramaDatasetImageryProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panoramaDatasetImageryProvider.js","sourceRoot":"","sources":["../../../../../src/layer/cesium/imageryProvider/panoramaDatasetImageryProvider.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAC/C,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EACL,qBAAqB,GAEtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,MAAM,MAAM,yBAAyB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,0BAA0B,MAAM,iCAAiC,CAAC;AAGzE,MAAM,CAAC,OAAO,OAAO,8BAA+B,SAAQ,0BAA0B;IAC5E,OAAO,GAAG,IAAI,YAAY,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;IAEvD,gBAAgB,CAAkB;IAE1C,YAAY,CAAe;IAE3B,YAAY,OAAyC;QACnD,KAAK,CAAC;YACJ,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,YAAY;YAC/C,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,EAAE;SACb,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QAEzC,IAAI,CAAC,gBAAgB,GAAG,qBAAqB,CAAC;YAC5C,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY;YAC5C,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;SAC9C,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAChC,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAC3D,CAAC;IACJ,CAAC;IAED,YAAY,CACV,CAAS,EACT,CAAS,EACT,KAAa;QAEb,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,EAAU,EACV,EAAU,EACV,KAAa,EACb,MAAgB;QAEhB,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC;YAC3B,WAAW,EAAE,MAAM;YACnB,UAAU,EAAE,kBAAkB,CAAC,MAAM,EAAE;SACxC,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAC3D,SAAS,EACT,KAAK,CACN,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,OAAO;QACL,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;IAClC,CAAC;CACF"}