@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.
- package/dist/index.d.ts +5 -2
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/src/interaction/panoramaFeatureHighlight.d.ts +1 -0
- package/dist/src/interaction/panoramaFeatureHighlight.js +18 -11
- package/dist/src/interaction/panoramaFeatureHighlight.js.map +1 -1
- package/dist/src/interaction/panoramaImageSelection.js +46 -2
- package/dist/src/interaction/panoramaImageSelection.js.map +1 -1
- package/dist/src/layer/cesium/cogCesiumImpl.js +1 -1
- package/dist/src/layer/cesium/cogCesiumImpl.js.map +1 -1
- package/dist/src/layer/cesium/imageryProvider/abstractVcsImageryProvider.d.ts +47 -0
- package/dist/src/layer/cesium/imageryProvider/abstractVcsImageryProvider.js +71 -0
- package/dist/src/layer/cesium/imageryProvider/abstractVcsImageryProvider.js.map +1 -0
- package/dist/src/layer/cesium/imageryProvider/cogImageryProvider.d.ts +17 -0
- package/dist/src/layer/cesium/{cogImageryProvider.js → imageryProvider/cogImageryProvider.js} +17 -67
- package/dist/src/layer/cesium/imageryProvider/cogImageryProvider.js.map +1 -0
- package/dist/src/layer/cesium/{mapboxStyleImageryProvider.d.ts → imageryProvider/mapboxStyleImageryProvider.d.ts} +5 -9
- package/dist/src/layer/cesium/imageryProvider/mapboxStyleImageryProvider.js +37 -0
- package/dist/src/layer/cesium/imageryProvider/mapboxStyleImageryProvider.js.map +1 -0
- package/dist/src/layer/cesium/imageryProvider/olImageRenderer.d.ts +18 -0
- package/dist/src/layer/cesium/imageryProvider/olImageRenderer.js +144 -0
- package/dist/src/layer/cesium/imageryProvider/olImageRenderer.js.map +1 -0
- package/dist/src/layer/cesium/imageryProvider/panoramaDatasetImageryProvider.d.ts +12 -0
- package/dist/src/layer/cesium/imageryProvider/panoramaDatasetImageryProvider.js +45 -0
- package/dist/src/layer/cesium/imageryProvider/panoramaDatasetImageryProvider.js.map +1 -0
- package/dist/src/layer/cesium/{vectorTileImageryProvider.d.ts → imageryProvider/vectorTileImageryProvider.d.ts} +5 -24
- package/dist/src/layer/cesium/{vectorTileImageryProvider.js → imageryProvider/vectorTileImageryProvider.js} +16 -65
- package/dist/src/layer/cesium/imageryProvider/vectorTileImageryProvider.js.map +1 -0
- package/dist/src/layer/cesium/mapboxStyleCesiumImpl.d.ts +1 -1
- package/dist/src/layer/cesium/mapboxStyleCesiumImpl.js +1 -1
- package/dist/src/layer/cesium/mapboxStyleCesiumImpl.js.map +1 -1
- package/dist/src/layer/cesium/panoramaDatasetCesiumImpl.d.ts +5 -0
- package/dist/src/layer/cesium/panoramaDatasetCesiumImpl.js +12 -0
- package/dist/src/layer/cesium/panoramaDatasetCesiumImpl.js.map +1 -0
- package/dist/src/layer/cesium/vectorRasterTileCesiumImpl.d.ts +4 -2
- package/dist/src/layer/cesium/vectorRasterTileCesiumImpl.js +10 -3
- package/dist/src/layer/cesium/vectorRasterTileCesiumImpl.js.map +1 -1
- package/dist/src/layer/panoramaDatasetLayer.js +11 -1
- package/dist/src/layer/panoramaDatasetLayer.js.map +1 -1
- package/dist/src/layer/vectorTileLayer.d.ts +1 -0
- package/dist/src/layer/vectorTileLayer.js +3 -0
- package/dist/src/layer/vectorTileLayer.js.map +1 -1
- package/index.ts +11 -2
- package/package.json +1 -1
- package/src/interaction/panoramaFeatureHighlight.ts +23 -16
- package/src/interaction/panoramaImageSelection.ts +58 -5
- package/src/layer/cesium/cogCesiumImpl.ts +1 -1
- package/src/layer/cesium/imageryProvider/abstractVcsImageryProvider.ts +126 -0
- package/src/layer/cesium/{cogImageryProvider.ts → imageryProvider/cogImageryProvider.ts} +23 -81
- package/src/layer/cesium/imageryProvider/mapboxStyleImageryProvider.ts +63 -0
- package/src/layer/cesium/imageryProvider/olImageRenderer.ts +219 -0
- package/src/layer/cesium/imageryProvider/panoramaDatasetImageryProvider.ts +73 -0
- package/src/layer/cesium/{vectorTileImageryProvider.ts → imageryProvider/vectorTileImageryProvider.ts} +19 -92
- package/src/layer/cesium/mapboxStyleCesiumImpl.ts +1 -1
- package/src/layer/cesium/panoramaDatasetCesiumImpl.ts +13 -0
- package/src/layer/cesium/vectorRasterTileCesiumImpl.ts +14 -4
- package/src/layer/panoramaDatasetLayer.ts +12 -1
- package/src/layer/vectorTileLayer.ts +4 -0
- package/dist/src/layer/cesium/cogImageryProvider.d.ts +0 -31
- package/dist/src/layer/cesium/cogImageryProvider.js.map +0 -1
- package/dist/src/layer/cesium/mapboxStyleImageryProvider.js +0 -147
- package/dist/src/layer/cesium/mapboxStyleImageryProvider.js.map +0 -1
- package/dist/src/layer/cesium/vectorTileImageryProvider.js.map +0 -1
- package/src/layer/cesium/mapboxStyleImageryProvider.ts +0 -214
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type LayerGroup from 'ol/layer/Group.js';
|
|
2
|
+
import type { VectorTileImageryProviderOptions } from './vectorTileImageryProvider.js';
|
|
3
|
+
import {
|
|
4
|
+
createOLImageRenderer,
|
|
5
|
+
type OLImageRenderer,
|
|
6
|
+
} from './olImageRenderer.js';
|
|
7
|
+
import AbstractVcsImageryProvider from './abstractVcsImageryProvider.js';
|
|
8
|
+
import type TileProvider from '../../tileProvider/tileProvider.js';
|
|
9
|
+
|
|
10
|
+
export type MapboxStyleImageryProviderOptions =
|
|
11
|
+
VectorTileImageryProviderOptions & {
|
|
12
|
+
styledMapboxLayerGroup: LayerGroup;
|
|
13
|
+
minimumTerrainLevel?: number;
|
|
14
|
+
maximumTerrainLevel?: number;
|
|
15
|
+
tileCacheSize?: number;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Implementation of Cesium ImageryProvider Interface for Mapbox Style Tiles
|
|
20
|
+
*/
|
|
21
|
+
class MapboxStyleImageryProvider extends AbstractVcsImageryProvider {
|
|
22
|
+
static get className(): string {
|
|
23
|
+
return 'MapboxStyleImageryProvider';
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
tileProvider: TileProvider;
|
|
27
|
+
|
|
28
|
+
private _olImageRenderer: OLImageRenderer;
|
|
29
|
+
|
|
30
|
+
constructor(options: MapboxStyleImageryProviderOptions) {
|
|
31
|
+
super({
|
|
32
|
+
tilingScheme: options.tileProvider.tilingScheme,
|
|
33
|
+
tileSize: options.tileSize,
|
|
34
|
+
minLevel: 0,
|
|
35
|
+
maxLevel: 26,
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
this.tileProvider = options.tileProvider;
|
|
39
|
+
|
|
40
|
+
this._olImageRenderer = createOLImageRenderer({
|
|
41
|
+
tilingScheme: this.tileProvider.tilingScheme,
|
|
42
|
+
tileWidth: this.tileWidth,
|
|
43
|
+
tileHeight: this.tileHeight,
|
|
44
|
+
tileCacheSize: options.tileCacheSize,
|
|
45
|
+
emptyCanvas: this.emptyCanvas,
|
|
46
|
+
});
|
|
47
|
+
this._olImageRenderer.map.addLayer(options.styledMapboxLayerGroup);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
requestImage(
|
|
51
|
+
x: number,
|
|
52
|
+
y: number,
|
|
53
|
+
level: number,
|
|
54
|
+
): Promise<HTMLImageElement | HTMLCanvasElement> | undefined {
|
|
55
|
+
return this._olImageRenderer.requestImage(x, y, level);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
destroy(): void {
|
|
59
|
+
this._olImageRenderer.destroy();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export default MapboxStyleImageryProvider;
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import type { TilingScheme } from '@vcmap-cesium/engine';
|
|
2
|
+
import OLMap from 'ol/Map.js';
|
|
3
|
+
import LRUCache from 'ol/structs/LRUCache.js';
|
|
4
|
+
import { buffer, type Extent, getCenter } from 'ol/extent.js';
|
|
5
|
+
import { getLogger } from '@vcsuite/logger';
|
|
6
|
+
import { parseInteger } from '@vcsuite/parsers';
|
|
7
|
+
import { rectangleToMercatorExtent } from '../../../util/math.js';
|
|
8
|
+
|
|
9
|
+
export type OLImageRenderer = {
|
|
10
|
+
readonly isRendering: boolean;
|
|
11
|
+
readonly map: OLMap;
|
|
12
|
+
requestImage(
|
|
13
|
+
x: number,
|
|
14
|
+
y: number,
|
|
15
|
+
level: number,
|
|
16
|
+
): Promise<HTMLImageElement | HTMLCanvasElement> | undefined;
|
|
17
|
+
destroy(): void;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export type OLImageRendererOptions = {
|
|
21
|
+
tilingScheme: TilingScheme;
|
|
22
|
+
tileWidth: number;
|
|
23
|
+
tileHeight: number;
|
|
24
|
+
emptyCanvas: HTMLCanvasElement;
|
|
25
|
+
tileCacheSize?: number;
|
|
26
|
+
fetchFeatures?: (
|
|
27
|
+
x: number,
|
|
28
|
+
y: number,
|
|
29
|
+
level: number,
|
|
30
|
+
extent: Extent,
|
|
31
|
+
) => Promise<void>;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
function getTileCacheKey(x: number, y: number, level: number): string {
|
|
35
|
+
return `${x}-${y}-${level}`;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function getGutterSize(level: number): number {
|
|
39
|
+
if (level < 12) {
|
|
40
|
+
return 32;
|
|
41
|
+
}
|
|
42
|
+
if (level < 15) {
|
|
43
|
+
return 48;
|
|
44
|
+
}
|
|
45
|
+
return 64;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function createOLImageRenderer(
|
|
49
|
+
options: OLImageRendererOptions,
|
|
50
|
+
): OLImageRenderer {
|
|
51
|
+
const maxCacheSize = parseInteger(options.tileCacheSize, 100);
|
|
52
|
+
const { tilingScheme, tileWidth, tileHeight, emptyCanvas, fetchFeatures } =
|
|
53
|
+
options;
|
|
54
|
+
const renderMap = new OLMap({
|
|
55
|
+
target: document.createElement('div'),
|
|
56
|
+
});
|
|
57
|
+
const tileCacheByLevel = new Map<number, LRUCache<HTMLCanvasElement>>();
|
|
58
|
+
|
|
59
|
+
let isRendering = false;
|
|
60
|
+
|
|
61
|
+
function getLevelCache(level: number): LRUCache<HTMLCanvasElement> {
|
|
62
|
+
const existing = tileCacheByLevel.get(level);
|
|
63
|
+
if (existing) {
|
|
64
|
+
return existing;
|
|
65
|
+
}
|
|
66
|
+
const cache = new LRUCache<HTMLCanvasElement>(maxCacheSize);
|
|
67
|
+
tileCacheByLevel.set(level, cache);
|
|
68
|
+
return cache;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function renderTile(
|
|
72
|
+
level: number,
|
|
73
|
+
extent: Extent,
|
|
74
|
+
gutterSize: number,
|
|
75
|
+
): Promise<HTMLCanvasElement> {
|
|
76
|
+
const TIMEOUT_MS = 2500;
|
|
77
|
+
return new Promise((resolve) => {
|
|
78
|
+
let isFinished = false;
|
|
79
|
+
const finish = (canvas: HTMLCanvasElement): void => {
|
|
80
|
+
if (isFinished) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
isFinished = true;
|
|
84
|
+
resolve(canvas);
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
try {
|
|
88
|
+
if (!renderMap) {
|
|
89
|
+
finish(emptyCanvas);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const renderWidth = tileWidth + 2 * gutterSize;
|
|
94
|
+
const renderHeight = tileHeight + 2 * gutterSize;
|
|
95
|
+
|
|
96
|
+
const view = renderMap.getView();
|
|
97
|
+
view.setCenter(getCenter(extent));
|
|
98
|
+
view.setZoom(level);
|
|
99
|
+
renderMap.setSize([renderWidth, renderHeight]);
|
|
100
|
+
|
|
101
|
+
const handleRenderComplete = (): void => {
|
|
102
|
+
renderMap?.un('rendercomplete', handleRenderComplete);
|
|
103
|
+
|
|
104
|
+
const renderedCanvas = renderMap
|
|
105
|
+
?.getViewport()
|
|
106
|
+
.querySelector('canvas');
|
|
107
|
+
|
|
108
|
+
if (!renderedCanvas) {
|
|
109
|
+
finish(emptyCanvas);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Crop the canvas to extract the center portion (original tile size)
|
|
114
|
+
const tileCanvas = document.createElement('canvas');
|
|
115
|
+
tileCanvas.width = tileWidth;
|
|
116
|
+
tileCanvas.height = tileHeight;
|
|
117
|
+
const ctx = tileCanvas.getContext('2d');
|
|
118
|
+
if (ctx) {
|
|
119
|
+
const scaleX = renderedCanvas.width / renderWidth;
|
|
120
|
+
const scaleY = renderedCanvas.height / renderHeight;
|
|
121
|
+
ctx.drawImage(
|
|
122
|
+
renderedCanvas,
|
|
123
|
+
gutterSize * scaleX,
|
|
124
|
+
gutterSize * scaleY,
|
|
125
|
+
tileWidth * scaleX,
|
|
126
|
+
tileHeight * scaleY,
|
|
127
|
+
0,
|
|
128
|
+
0,
|
|
129
|
+
tileWidth,
|
|
130
|
+
tileHeight,
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
finish(tileCanvas);
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
const timeoutId = window.setTimeout(() => {
|
|
138
|
+
renderMap?.un('rendercomplete', handleRenderComplete);
|
|
139
|
+
getLogger('MapboxVectorTileImageryProvider').warning(
|
|
140
|
+
'Tile render timed out; returning empty tile.',
|
|
141
|
+
);
|
|
142
|
+
finish(emptyCanvas);
|
|
143
|
+
}, TIMEOUT_MS);
|
|
144
|
+
|
|
145
|
+
const wrappedHandleRenderComplete = (): void => {
|
|
146
|
+
window.clearTimeout(timeoutId);
|
|
147
|
+
handleRenderComplete();
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
renderMap.once('rendercomplete', wrappedHandleRenderComplete);
|
|
151
|
+
renderMap.render();
|
|
152
|
+
} catch (e: unknown) {
|
|
153
|
+
getLogger('MapboxVectorTileImageryProvider').error(
|
|
154
|
+
`Error rendering tile: ${(e as Error).message}`,
|
|
155
|
+
);
|
|
156
|
+
finish(emptyCanvas);
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
async function doRequestImage(
|
|
162
|
+
x: number,
|
|
163
|
+
y: number,
|
|
164
|
+
level: number,
|
|
165
|
+
cacheKey: string,
|
|
166
|
+
): Promise<HTMLImageElement | HTMLCanvasElement> {
|
|
167
|
+
const rectangle = tilingScheme.tileXYToRectangle(x, y, level);
|
|
168
|
+
const extent = rectangleToMercatorExtent(rectangle);
|
|
169
|
+
|
|
170
|
+
// Add gutters to prevent labels from being cut off
|
|
171
|
+
const gutterSize = getGutterSize(level);
|
|
172
|
+
const gutter = ((extent[2] - extent[0]) / tileWidth) * gutterSize;
|
|
173
|
+
const expandedExtent = buffer(extent, gutter);
|
|
174
|
+
|
|
175
|
+
isRendering = true;
|
|
176
|
+
if (fetchFeatures) {
|
|
177
|
+
await fetchFeatures(x, y, level, expandedExtent);
|
|
178
|
+
}
|
|
179
|
+
const renderedTile = await renderTile(level, expandedExtent, gutterSize);
|
|
180
|
+
isRendering = false;
|
|
181
|
+
const levelCache = getLevelCache(level);
|
|
182
|
+
levelCache.set(cacheKey, renderedTile);
|
|
183
|
+
levelCache.expireCache();
|
|
184
|
+
return renderedTile;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
return {
|
|
188
|
+
get map(): OLMap {
|
|
189
|
+
return renderMap;
|
|
190
|
+
},
|
|
191
|
+
get isRendering(): boolean {
|
|
192
|
+
return isRendering;
|
|
193
|
+
},
|
|
194
|
+
requestImage(
|
|
195
|
+
x: number,
|
|
196
|
+
y: number,
|
|
197
|
+
level: number,
|
|
198
|
+
): Promise<HTMLImageElement | HTMLCanvasElement> | undefined {
|
|
199
|
+
const cacheKey = getTileCacheKey(x, y, level);
|
|
200
|
+
const levelCache = getLevelCache(level);
|
|
201
|
+
if (levelCache.containsKey(cacheKey)) {
|
|
202
|
+
return Promise.resolve(levelCache.get(cacheKey));
|
|
203
|
+
}
|
|
204
|
+
if (isRendering) {
|
|
205
|
+
return undefined;
|
|
206
|
+
}
|
|
207
|
+
return doRequestImage(x, y, level, cacheKey);
|
|
208
|
+
},
|
|
209
|
+
destroy(): void {
|
|
210
|
+
for (const cache of tileCacheByLevel.values()) {
|
|
211
|
+
cache.clear();
|
|
212
|
+
}
|
|
213
|
+
tileCacheByLevel.clear();
|
|
214
|
+
isRendering = false;
|
|
215
|
+
renderMap.setTarget(undefined);
|
|
216
|
+
renderMap.dispose();
|
|
217
|
+
},
|
|
218
|
+
};
|
|
219
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { type Extent as OLExtent } from 'ol/extent.js';
|
|
2
|
+
import VectorSource from 'ol/source/Vector.js';
|
|
3
|
+
import VectorLayer from 'ol/layer/Vector.js';
|
|
4
|
+
import { type VectorTileImageryProviderOptions } from './vectorTileImageryProvider.js';
|
|
5
|
+
import {
|
|
6
|
+
createOLImageRenderer,
|
|
7
|
+
type OLImageRenderer,
|
|
8
|
+
} from './olImageRenderer.js';
|
|
9
|
+
import Extent from '../../../util/extent.js';
|
|
10
|
+
import { mercatorProjection } from '../../../util/projection.js';
|
|
11
|
+
import AbstractVcsImageryProvider from './abstractVcsImageryProvider.js';
|
|
12
|
+
import type TileProvider from '../../tileProvider/tileProvider.js';
|
|
13
|
+
|
|
14
|
+
export default class PanoramaDatasetImageryProvider extends AbstractVcsImageryProvider {
|
|
15
|
+
private _source = new VectorSource({ useSpatialIndex: false });
|
|
16
|
+
|
|
17
|
+
private _olImageRenderer: OLImageRenderer;
|
|
18
|
+
|
|
19
|
+
tileProvider: TileProvider;
|
|
20
|
+
|
|
21
|
+
constructor(options: VectorTileImageryProviderOptions) {
|
|
22
|
+
super({
|
|
23
|
+
tilingScheme: options.tileProvider.tilingScheme,
|
|
24
|
+
tileSize: options.tileSize,
|
|
25
|
+
minLevel: 0,
|
|
26
|
+
maxLevel: 26,
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
this.tileProvider = options.tileProvider;
|
|
30
|
+
|
|
31
|
+
this._olImageRenderer = createOLImageRenderer({
|
|
32
|
+
tilingScheme: this.tileProvider.tilingScheme,
|
|
33
|
+
tileWidth: this.tileWidth,
|
|
34
|
+
tileHeight: this.tileHeight,
|
|
35
|
+
emptyCanvas: this.emptyCanvas,
|
|
36
|
+
fetchFeatures: this._fetchFeatures.bind(this),
|
|
37
|
+
});
|
|
38
|
+
this._olImageRenderer.map.addLayer(
|
|
39
|
+
new VectorLayer({ source: this._source, declutter: true }),
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
requestImage(
|
|
44
|
+
x: number,
|
|
45
|
+
y: number,
|
|
46
|
+
level: number,
|
|
47
|
+
): Promise<HTMLImageElement | HTMLCanvasElement> | undefined {
|
|
48
|
+
return this._olImageRenderer.requestImage(x, y, level);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
private async _fetchFeatures(
|
|
52
|
+
_x: number,
|
|
53
|
+
_y: number,
|
|
54
|
+
level: number,
|
|
55
|
+
extent: OLExtent,
|
|
56
|
+
): Promise<void> {
|
|
57
|
+
const vcsExtent = new Extent({
|
|
58
|
+
coordinates: extent,
|
|
59
|
+
projection: mercatorProjection.toJSON(),
|
|
60
|
+
});
|
|
61
|
+
const features = await this.tileProvider.getFeaturesForExtent(
|
|
62
|
+
vcsExtent,
|
|
63
|
+
level,
|
|
64
|
+
);
|
|
65
|
+
this._source.clear(true);
|
|
66
|
+
this._source.addFeatures(features);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
destroy(): void {
|
|
70
|
+
this._source.dispose();
|
|
71
|
+
this._olImageRenderer.destroy();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
type Cartographic,
|
|
3
|
-
Event as CesiumEvent,
|
|
4
|
-
type Rectangle,
|
|
5
|
-
type TilingScheme,
|
|
6
|
-
} from '@vcmap-cesium/engine';
|
|
1
|
+
import { type Cartographic } from '@vcmap-cesium/engine';
|
|
7
2
|
import { getLogger } from '@vcsuite/logger';
|
|
8
3
|
import {
|
|
9
4
|
compose,
|
|
@@ -16,9 +11,10 @@ import type { Size } from 'ol/size.js';
|
|
|
16
11
|
import type { Feature } from 'ol/index.js';
|
|
17
12
|
// eslint-disable-next-line import/no-named-default
|
|
18
13
|
import type { default as Style, StyleFunction } from 'ol/style/Style.js';
|
|
19
|
-
import type TileProvider from '
|
|
20
|
-
import CanvasTileRenderer from '
|
|
21
|
-
import { rectangleToMercatorExtent } from '
|
|
14
|
+
import type TileProvider from '../../tileProvider/tileProvider.js';
|
|
15
|
+
import CanvasTileRenderer from '../../../ol/render/canvas/canvasTileRenderer.js';
|
|
16
|
+
import { rectangleToMercatorExtent } from '../../../util/math.js';
|
|
17
|
+
import AbstractVcsImageryProvider from './abstractVcsImageryProvider.js';
|
|
22
18
|
|
|
23
19
|
export function toContext(
|
|
24
20
|
extent: Extent,
|
|
@@ -80,7 +76,7 @@ export function getCanvasFromFeatures(
|
|
|
80
76
|
}
|
|
81
77
|
const canvas = document.createElement('canvas');
|
|
82
78
|
canvas.width = tileSize[0];
|
|
83
|
-
canvas.height = tileSize[
|
|
79
|
+
canvas.height = tileSize[1];
|
|
84
80
|
const vectorContext = toContext(
|
|
85
81
|
extent,
|
|
86
82
|
getCenter(extent),
|
|
@@ -108,94 +104,21 @@ export type VectorTileImageryProviderOptions = {
|
|
|
108
104
|
/**
|
|
109
105
|
* implementation of Cesium ImageryProvider Interface
|
|
110
106
|
*/
|
|
111
|
-
class VectorTileImageryProvider {
|
|
107
|
+
class VectorTileImageryProvider extends AbstractVcsImageryProvider {
|
|
112
108
|
tileProvider: TileProvider;
|
|
113
109
|
|
|
114
|
-
private _tilingScheme: TilingScheme;
|
|
115
|
-
|
|
116
|
-
private _tileSize: Size;
|
|
117
|
-
|
|
118
|
-
private _errorEvent = new CesiumEvent();
|
|
119
|
-
|
|
120
|
-
headers?: Record<string, string>;
|
|
121
|
-
|
|
122
|
-
emptyCanvas: HTMLCanvasElement;
|
|
123
|
-
|
|
124
|
-
minLevel = 0;
|
|
125
|
-
|
|
126
|
-
maxLevel = 26;
|
|
127
|
-
|
|
128
110
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
129
111
|
_reload: undefined | (() => void) = undefined;
|
|
130
112
|
|
|
131
113
|
constructor(options: VectorTileImageryProviderOptions) {
|
|
114
|
+
super({
|
|
115
|
+
tilingScheme: options.tileProvider.tilingScheme,
|
|
116
|
+
tileSize: options.tileSize,
|
|
117
|
+
headers: options.headers,
|
|
118
|
+
minLevel: 0,
|
|
119
|
+
maxLevel: 26,
|
|
120
|
+
});
|
|
132
121
|
this.tileProvider = options.tileProvider;
|
|
133
|
-
this._tilingScheme = this.tileProvider.tilingScheme;
|
|
134
|
-
this._tileSize = options.tileSize;
|
|
135
|
-
this._errorEvent = new CesiumEvent();
|
|
136
|
-
|
|
137
|
-
this.emptyCanvas = document.createElement('canvas');
|
|
138
|
-
this.emptyCanvas.width = this.tileWidth;
|
|
139
|
-
this.emptyCanvas.height = this.tileHeight;
|
|
140
|
-
this.headers = options.headers;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// eslint-disable-next-line class-methods-use-this,@typescript-eslint/naming-convention
|
|
144
|
-
get _ready(): boolean {
|
|
145
|
-
return true;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
// eslint-disable-next-line class-methods-use-this
|
|
149
|
-
get ready(): boolean {
|
|
150
|
-
return true;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
get rectangle(): Rectangle {
|
|
154
|
-
return this._tilingScheme.rectangle;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
get tileWidth(): number {
|
|
158
|
-
return this._tileSize[0];
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
get tileHeight(): number {
|
|
162
|
-
return this._tileSize[1];
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
get maximumLevel(): number {
|
|
166
|
-
return this.maxLevel;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
get minimumLevel(): number {
|
|
170
|
-
return this.minLevel;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
get tilingScheme(): TilingScheme {
|
|
174
|
-
return this._tilingScheme;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
// eslint-disable-next-line class-methods-use-this
|
|
178
|
-
get tileDiscardPolicy(): undefined {
|
|
179
|
-
return undefined;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
get errorEvent(): CesiumEvent {
|
|
183
|
-
return this._errorEvent;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
// eslint-disable-next-line class-methods-use-this
|
|
187
|
-
get credit(): undefined {
|
|
188
|
-
return undefined;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
// eslint-disable-next-line class-methods-use-this
|
|
192
|
-
get proxy(): undefined {
|
|
193
|
-
return undefined;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
// eslint-disable-next-line class-methods-use-this
|
|
197
|
-
get hasAlphaChannel(): boolean {
|
|
198
|
-
return true;
|
|
199
122
|
}
|
|
200
123
|
|
|
201
124
|
/**
|
|
@@ -231,7 +154,11 @@ class VectorTileImageryProvider {
|
|
|
231
154
|
level,
|
|
232
155
|
);
|
|
233
156
|
const extent = rectangleToMercatorExtent(rectangle);
|
|
234
|
-
|
|
157
|
+
|
|
158
|
+
return getCanvasFromFeatures(features, extent, undefined, [
|
|
159
|
+
this.tileWidth,
|
|
160
|
+
this.tileHeight,
|
|
161
|
+
]);
|
|
235
162
|
}
|
|
236
163
|
}
|
|
237
164
|
|
|
@@ -11,7 +11,7 @@ import type { LayerImplementationOptions } from '../layer.js';
|
|
|
11
11
|
import TileProvider from '../tileProvider/tileProvider.js';
|
|
12
12
|
import MapboxStyleImageryProvider, {
|
|
13
13
|
type MapboxStyleImageryProviderOptions,
|
|
14
|
-
} from './mapboxStyleImageryProvider.js';
|
|
14
|
+
} from './imageryProvider/mapboxStyleImageryProvider.js';
|
|
15
15
|
import RasterLayerCesiumImpl from './rasterLayerCesiumImpl.js';
|
|
16
16
|
|
|
17
17
|
export type MapboxStyleLayerImplementationOptions =
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import VectorRasterTileCesiumImpl from './vectorRasterTileCesiumImpl.js';
|
|
2
|
+
import PanoramaDatasetImageryProvider from './imageryProvider/panoramaDatasetImageryProvider.js';
|
|
3
|
+
import type AbstractVcsImageryProvider from './imageryProvider/abstractVcsImageryProvider.js';
|
|
4
|
+
|
|
5
|
+
export default class PanoramaDatasetCesiumImpl extends VectorRasterTileCesiumImpl {
|
|
6
|
+
protected _getImageryProvider(): AbstractVcsImageryProvider {
|
|
7
|
+
return new PanoramaDatasetImageryProvider({
|
|
8
|
+
tileProvider: this.tileProvider,
|
|
9
|
+
tileSize: this.tileSize,
|
|
10
|
+
headers: this.headers,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from '@vcmap-cesium/engine';
|
|
5
5
|
import type { Size } from 'ol/size.js';
|
|
6
6
|
|
|
7
|
-
import VectorTileImageryProvider from './vectorTileImageryProvider.js';
|
|
7
|
+
import VectorTileImageryProvider from './imageryProvider/vectorTileImageryProvider.js';
|
|
8
8
|
import RasterLayerCesiumImpl from './rasterLayerCesiumImpl.js';
|
|
9
9
|
import { wgs84Projection } from '../../util/projection.js';
|
|
10
10
|
import type { VectorTileImplementationOptions } from '../vectorTileLayer.js';
|
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
} from '../rasterLayer.js';
|
|
16
16
|
import type TileProvider from '../tileProvider/tileProvider.js';
|
|
17
17
|
import type StyleItem from '../../style/styleItem.js';
|
|
18
|
+
import type AbstractVcsImageryProvider from './imageryProvider/abstractVcsImageryProvider.js';
|
|
18
19
|
|
|
19
20
|
/**
|
|
20
21
|
* represents a rasterized tiled vector layer implementation for cesium.
|
|
@@ -30,7 +31,7 @@ class VectorRasterTileCesiumImpl extends RasterLayerCesiumImpl {
|
|
|
30
31
|
|
|
31
32
|
private _reloadTimeout: number | undefined = undefined;
|
|
32
33
|
|
|
33
|
-
imageryProvider: undefined |
|
|
34
|
+
imageryProvider: undefined | AbstractVcsImageryProvider = undefined;
|
|
34
35
|
|
|
35
36
|
constructor(map: CesiumMap, options: VectorTileImplementationOptions) {
|
|
36
37
|
const minRenderingLevel = options.minLevel;
|
|
@@ -49,12 +50,16 @@ class VectorRasterTileCesiumImpl extends RasterLayerCesiumImpl {
|
|
|
49
50
|
this.tileSize = options.tileSize;
|
|
50
51
|
}
|
|
51
52
|
|
|
52
|
-
|
|
53
|
-
|
|
53
|
+
protected _getImageryProvider(): AbstractVcsImageryProvider {
|
|
54
|
+
return new VectorTileImageryProvider({
|
|
54
55
|
tileProvider: this.tileProvider,
|
|
55
56
|
tileSize: this.tileSize,
|
|
56
57
|
headers: this.headers,
|
|
57
58
|
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
getCesiumLayer(): Promise<CesiumImageryLayer> {
|
|
62
|
+
this.imageryProvider = this._getImageryProvider();
|
|
58
63
|
|
|
59
64
|
const layerOptions = this.getCesiumLayerOptions();
|
|
60
65
|
if (this.extent && this.extent.isValid()) {
|
|
@@ -106,6 +111,11 @@ class VectorRasterTileCesiumImpl extends RasterLayerCesiumImpl {
|
|
|
106
111
|
updateStyle(_style: StyleItem, _silent?: boolean): void {
|
|
107
112
|
this._reloadTiles();
|
|
108
113
|
}
|
|
114
|
+
|
|
115
|
+
destroy(): void {
|
|
116
|
+
this.imageryProvider?.destroy();
|
|
117
|
+
super.destroy();
|
|
118
|
+
}
|
|
109
119
|
}
|
|
110
120
|
|
|
111
121
|
export default VectorRasterTileCesiumImpl;
|
|
@@ -25,6 +25,9 @@ import {
|
|
|
25
25
|
import Extent from '../util/extent.js';
|
|
26
26
|
import { cartesian2DDistanceSquared } from '../util/math.js';
|
|
27
27
|
import { getStyleOrDefaultStyle } from '../style/styleFactory.js';
|
|
28
|
+
import CesiumMap from '../map/cesiumMap.js';
|
|
29
|
+
import VectorTileCesiumImpl from './cesium/vectorTileCesiumImpl.js';
|
|
30
|
+
import PanoramaDatasetCesiumImpl from './cesium/panoramaDatasetCesiumImpl.js';
|
|
28
31
|
|
|
29
32
|
export type PanoramaDatasetOptions = Omit<
|
|
30
33
|
VectorTileOptions,
|
|
@@ -54,7 +57,7 @@ export default class PanoramaDatasetLayer extends VectorTileLayer<PanoramaDatase
|
|
|
54
57
|
baseLevel: 15,
|
|
55
58
|
cameraOffset: 0,
|
|
56
59
|
minLevel: 15,
|
|
57
|
-
maxLevel:
|
|
60
|
+
maxLevel: undefined,
|
|
58
61
|
zIndex: maxZIndexMin50,
|
|
59
62
|
ignoreMapLayerTypes: true,
|
|
60
63
|
panoramaVectorProperties: {
|
|
@@ -190,6 +193,14 @@ export default class PanoramaDatasetLayer extends VectorTileLayer<PanoramaDatase
|
|
|
190
193
|
}),
|
|
191
194
|
];
|
|
192
195
|
}
|
|
196
|
+
|
|
197
|
+
if (map instanceof CesiumMap) {
|
|
198
|
+
return [
|
|
199
|
+
this.renderer === 'image'
|
|
200
|
+
? new PanoramaDatasetCesiumImpl(map, this.getImplementationOptions())
|
|
201
|
+
: new VectorTileCesiumImpl(map, this.getImplementationOptions()),
|
|
202
|
+
];
|
|
203
|
+
}
|
|
193
204
|
return super.createImplementationsForMap(map);
|
|
194
205
|
}
|
|
195
206
|
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import type GeoTIFFSource from 'ol/source/GeoTIFF.js';
|
|
2
|
-
import { Event as CesiumEvent, type ImageryTypes, Rectangle, type TilingScheme } from '@vcmap-cesium/engine';
|
|
3
|
-
export declare function createEmptyCanvas(width: number, height: number): HTMLCanvasElement;
|
|
4
|
-
export default class COGImageryProvider {
|
|
5
|
-
private _source;
|
|
6
|
-
private _emptyCanvas;
|
|
7
|
-
_reload: undefined | (() => void);
|
|
8
|
-
private _projection;
|
|
9
|
-
private _tilingScheme;
|
|
10
|
-
private _tileGrid;
|
|
11
|
-
private _boundTileLoader;
|
|
12
|
-
readonly tileWidth: number;
|
|
13
|
-
readonly tileHeight: number;
|
|
14
|
-
constructor(_source: GeoTIFFSource);
|
|
15
|
-
get _ready(): boolean;
|
|
16
|
-
get ready(): boolean;
|
|
17
|
-
get rectangle(): Rectangle;
|
|
18
|
-
get tilingScheme(): TilingScheme;
|
|
19
|
-
readonly errorEvent: CesiumEvent;
|
|
20
|
-
get credit(): undefined;
|
|
21
|
-
get proxy(): undefined;
|
|
22
|
-
get maximumLevel(): number;
|
|
23
|
-
get minimumLevel(): number;
|
|
24
|
-
get tileDiscardPolicy(): undefined;
|
|
25
|
-
get hasAlphaChannel(): boolean;
|
|
26
|
-
private _getTileSizeForLevel;
|
|
27
|
-
private _loadOLTile;
|
|
28
|
-
private _loadAlignedTile;
|
|
29
|
-
private _loadUnalignedTile;
|
|
30
|
-
requestImage(x: number, y: number, level: number): Promise<ImageryTypes>;
|
|
31
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cogImageryProvider.js","sourceRoot":"","sources":["../../../../src/layer/cesium/cogImageryProvider.ts"],"names":[],"mappings":"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"}
|