@deck.gl/geo-layers 8.7.8 → 8.8.0-alpha.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/dist.dev.js +62999 -30700
- package/dist/es5/geo-cell-layer/GeoCellLayer.js +3 -3
- package/dist/es5/geo-cell-layer/GeoCellLayer.js.map +1 -1
- package/dist/es5/index.js +8 -0
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/mvt-layer/mvt-layer.js +19 -19
- package/dist/es5/mvt-layer/mvt-layer.js.map +1 -1
- package/dist/es5/quadkey-layer/quadkey-layer.js +4 -2
- package/dist/es5/quadkey-layer/quadkey-layer.js.map +1 -1
- package/dist/es5/quadkey-layer/quadkey-utils.js.map +1 -1
- package/dist/es5/tile-3d-layer/tile-3d-layer.js +13 -10
- package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +1 -1
- package/dist/es5/tile-layer/tile-2d-header.js +36 -17
- package/dist/es5/tile-layer/tile-2d-header.js.map +1 -1
- package/dist/es5/tile-layer/tile-2d-traversal.js +13 -3
- package/dist/es5/tile-layer/tile-2d-traversal.js.map +1 -1
- package/dist/es5/tile-layer/tile-layer.js +38 -32
- package/dist/es5/tile-layer/tile-layer.js.map +1 -1
- package/dist/es5/tile-layer/tileset-2d.js +122 -96
- package/dist/es5/tile-layer/tileset-2d.js.map +1 -1
- package/dist/es5/tile-layer/types.js +2 -0
- package/dist/es5/tile-layer/types.js.map +1 -0
- package/dist/es5/tile-layer/utils.js +27 -9
- package/dist/es5/tile-layer/utils.js.map +1 -1
- package/dist/esm/geo-cell-layer/GeoCellLayer.js +6 -3
- package/dist/esm/geo-cell-layer/GeoCellLayer.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/mvt-layer/mvt-layer.js +17 -17
- package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
- package/dist/esm/quadkey-layer/quadkey-layer.js +5 -2
- package/dist/esm/quadkey-layer/quadkey-layer.js.map +1 -1
- package/dist/esm/quadkey-layer/quadkey-utils.js.map +1 -1
- package/dist/esm/tile-3d-layer/tile-3d-layer.js +8 -7
- package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +1 -1
- package/dist/esm/tile-layer/tile-2d-header.js +54 -18
- package/dist/esm/tile-layer/tile-2d-header.js.map +1 -1
- package/dist/esm/tile-layer/tile-2d-traversal.js +17 -3
- package/dist/esm/tile-layer/tile-2d-traversal.js.map +1 -1
- package/dist/esm/tile-layer/tile-layer.js +23 -17
- package/dist/esm/tile-layer/tile-layer.js.map +1 -1
- package/dist/esm/tile-layer/tileset-2d.js +88 -54
- package/dist/esm/tile-layer/tileset-2d.js.map +1 -1
- package/dist/esm/tile-layer/types.js +2 -0
- package/dist/esm/tile-layer/types.js.map +1 -0
- package/dist/esm/tile-layer/utils.js +26 -11
- package/dist/esm/tile-layer/utils.js.map +1 -1
- package/dist.min.js +2 -2
- package/package.json +11 -11
- package/src/geo-cell-layer/{GeoCellLayer.js → GeoCellLayer.ts} +14 -10
- package/src/index.ts +6 -0
- package/src/mvt-layer/mvt-layer.js +11 -10
- package/src/quadkey-layer/quadkey-layer.ts +39 -0
- package/src/quadkey-layer/{quadkey-utils.js → quadkey-utils.ts} +2 -2
- package/src/tile-3d-layer/tile-3d-layer.js +6 -5
- package/src/tile-layer/{tile-2d-header.js → tile-2d-header.ts} +50 -16
- package/src/tile-layer/{tile-2d-traversal.js → tile-2d-traversal.ts} +49 -12
- package/src/tile-layer/{tile-layer.js → tile-layer.ts} +153 -31
- package/src/tile-layer/{tileset-2d.js → tileset-2d.ts} +143 -66
- package/src/tile-layer/types.ts +17 -0
- package/src/tile-layer/{utils.js → utils.ts} +67 -25
- package/src/quadkey-layer/quadkey-layer.js +0 -22
|
@@ -1,10 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
assert,
|
|
3
|
+
CompositeLayer,
|
|
4
|
+
CompositeLayerProps,
|
|
5
|
+
Layer,
|
|
6
|
+
LayerProps,
|
|
7
|
+
UpdateParameters,
|
|
8
|
+
_flatten as flatten
|
|
9
|
+
} from '@deck.gl/core';
|
|
2
10
|
import {GeoJsonLayer} from '@deck.gl/layers';
|
|
11
|
+
import {LayersList} from 'modules/core/src/lib/layer-manager';
|
|
12
|
+
import Tile2DHeader from './tile-2d-header';
|
|
3
13
|
|
|
4
|
-
import Tileset2D, {STRATEGY_DEFAULT} from './tileset-2d';
|
|
14
|
+
import Tileset2D, {RefinementStrategy, STRATEGY_DEFAULT, Tileset2DProps} from './tileset-2d';
|
|
15
|
+
import {TileLoadProps, ZRange} from './types';
|
|
5
16
|
import {urlType, getURLFromTemplate} from './utils';
|
|
6
17
|
|
|
7
18
|
const defaultProps = {
|
|
19
|
+
TilesetClass: Tileset2D,
|
|
8
20
|
data: [],
|
|
9
21
|
dataComparator: urlType.equals,
|
|
10
22
|
renderSubLayers: {type: 'function', value: props => new GeoJsonLayer(props), compare: false},
|
|
@@ -27,7 +39,107 @@ const defaultProps = {
|
|
|
27
39
|
zoomOffset: 0
|
|
28
40
|
};
|
|
29
41
|
|
|
30
|
-
|
|
42
|
+
/** All props supported by the TileLayer */
|
|
43
|
+
export type TileLayerProps<DataT> = _TileLayerProps<DataT> & CompositeLayerProps<DataT>;
|
|
44
|
+
|
|
45
|
+
/** Props added by the TileLayer */
|
|
46
|
+
type _TileLayerProps<DataT> = {
|
|
47
|
+
/**
|
|
48
|
+
* Optionally implement a custom indexing scheme.
|
|
49
|
+
*/
|
|
50
|
+
TilesetClass: typeof Tileset2D;
|
|
51
|
+
/**
|
|
52
|
+
* Renders one or an array of Layer instances.
|
|
53
|
+
*/
|
|
54
|
+
renderSubLayers?: (
|
|
55
|
+
props: TileLayerProps<DataT> & {
|
|
56
|
+
id: string;
|
|
57
|
+
data: any;
|
|
58
|
+
_offset: number;
|
|
59
|
+
tile: Tile2DHeader;
|
|
60
|
+
}
|
|
61
|
+
) => LayersList;
|
|
62
|
+
/**
|
|
63
|
+
* If supplied, `getTileData` is called to retrieve the data of each tile.
|
|
64
|
+
*/
|
|
65
|
+
getTileData?: (props: TileLoadProps) => Promise<DataT> | DataT;
|
|
66
|
+
|
|
67
|
+
/** Called when all tiles in the current viewport are loaded. */
|
|
68
|
+
onViewportLoad?: (tiles: Tile2DHeader[]) => void;
|
|
69
|
+
|
|
70
|
+
/** Called when a tile successfully loads. */
|
|
71
|
+
onTileLoad?: (tile: Tile2DHeader) => void;
|
|
72
|
+
|
|
73
|
+
/** Called when a tile is cleared from cache. */
|
|
74
|
+
onTileUnload?: (tile: Tile2DHeader) => void;
|
|
75
|
+
|
|
76
|
+
/** Called when a tile failed to load. */
|
|
77
|
+
onTileError?: (err: any) => void;
|
|
78
|
+
|
|
79
|
+
/** The bounding box of the layer's data. */
|
|
80
|
+
extent?: number[] | null;
|
|
81
|
+
|
|
82
|
+
/** The pixel dimension of the tiles, usually a power of 2. */
|
|
83
|
+
tileSize?: number;
|
|
84
|
+
|
|
85
|
+
/** The max zoom level of the layer's data.
|
|
86
|
+
* @default null
|
|
87
|
+
*/
|
|
88
|
+
maxZoom?: number | null;
|
|
89
|
+
|
|
90
|
+
/** The min zoom level of the layer's data.
|
|
91
|
+
* @default 0
|
|
92
|
+
*/
|
|
93
|
+
minZoom?: number | null;
|
|
94
|
+
|
|
95
|
+
/** The maximum number of tiles that can be cached. */
|
|
96
|
+
maxCacheSize?: number | null;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* The maximum memory used for caching tiles.
|
|
100
|
+
*
|
|
101
|
+
* @default null
|
|
102
|
+
*/
|
|
103
|
+
maxCacheByteSize?: number | null;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* How the tile layer refines the visibility of tiles.
|
|
107
|
+
*
|
|
108
|
+
* @default 'best-available'
|
|
109
|
+
*/
|
|
110
|
+
refinementStrategy?: RefinementStrategy;
|
|
111
|
+
|
|
112
|
+
/** Range of minimum and maximum heights in the tile. */
|
|
113
|
+
zRange?: ZRange | null;
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* The maximum number of concurrent getTileData calls.
|
|
117
|
+
*
|
|
118
|
+
* @default 6
|
|
119
|
+
*/
|
|
120
|
+
maxRequests?: number;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* This offset changes the zoom level at which the tiles are fetched.
|
|
124
|
+
*
|
|
125
|
+
* Needs to be an integer.
|
|
126
|
+
*
|
|
127
|
+
* @default 0
|
|
128
|
+
*/
|
|
129
|
+
zoomOffset?: number;
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* The TileLayer is a composite layer that makes it possible to visualize very large datasets.
|
|
134
|
+
*
|
|
135
|
+
* Instead of fetching the entire dataset, it only loads and renders what's visible in the current viewport.
|
|
136
|
+
*/
|
|
137
|
+
export default class TileLayer<DataT = any, ExtraPropsT = {}> extends CompositeLayer<
|
|
138
|
+
ExtraPropsT & Required<_TileLayerProps<DataT>>
|
|
139
|
+
> {
|
|
140
|
+
static defaultProps = defaultProps as any;
|
|
141
|
+
static layerName = 'TileLayer';
|
|
142
|
+
|
|
31
143
|
initializeState() {
|
|
32
144
|
this.state = {
|
|
33
145
|
tileset: null,
|
|
@@ -36,21 +148,22 @@ export default class TileLayer extends CompositeLayer {
|
|
|
36
148
|
}
|
|
37
149
|
|
|
38
150
|
finalizeState() {
|
|
39
|
-
this.state
|
|
151
|
+
this.state?.tileset?.finalize();
|
|
40
152
|
}
|
|
41
153
|
|
|
42
|
-
get isLoaded() {
|
|
43
|
-
|
|
44
|
-
return tileset.selectedTiles.every(
|
|
154
|
+
get isLoaded(): boolean {
|
|
155
|
+
return this.state?.tileset?.selectedTiles.every(
|
|
45
156
|
tile => tile.isLoaded && tile.layers && tile.layers.every(layer => layer.isLoaded)
|
|
46
157
|
);
|
|
47
158
|
}
|
|
48
159
|
|
|
49
|
-
shouldUpdateState({changeFlags}) {
|
|
160
|
+
shouldUpdateState({changeFlags}): boolean {
|
|
50
161
|
return changeFlags.somethingChanged;
|
|
51
162
|
}
|
|
52
163
|
|
|
53
|
-
updateState({
|
|
164
|
+
updateState({changeFlags}: UpdateParameters<TileLayer>) {
|
|
165
|
+
assert(this.state);
|
|
166
|
+
|
|
54
167
|
let {tileset} = this.state;
|
|
55
168
|
const propsChanged = changeFlags.propsOrDataChanged || changeFlags.updateTriggersChanged;
|
|
56
169
|
const dataChanged =
|
|
@@ -59,10 +172,10 @@ export default class TileLayer extends CompositeLayer {
|
|
|
59
172
|
(changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getTileData));
|
|
60
173
|
|
|
61
174
|
if (!tileset) {
|
|
62
|
-
tileset = new
|
|
175
|
+
tileset = new this.props.TilesetClass(this._getTilesetOptions());
|
|
63
176
|
this.setState({tileset});
|
|
64
177
|
} else if (propsChanged) {
|
|
65
|
-
tileset.setOptions(this._getTilesetOptions(
|
|
178
|
+
tileset.setOptions(this._getTilesetOptions());
|
|
66
179
|
|
|
67
180
|
if (dataChanged) {
|
|
68
181
|
// reload all tiles
|
|
@@ -79,7 +192,7 @@ export default class TileLayer extends CompositeLayer {
|
|
|
79
192
|
this._updateTileset();
|
|
80
193
|
}
|
|
81
194
|
|
|
82
|
-
_getTilesetOptions(
|
|
195
|
+
_getTilesetOptions(): Tileset2DProps {
|
|
83
196
|
const {
|
|
84
197
|
tileSize,
|
|
85
198
|
maxCacheSize,
|
|
@@ -90,7 +203,7 @@ export default class TileLayer extends CompositeLayer {
|
|
|
90
203
|
minZoom,
|
|
91
204
|
maxRequests,
|
|
92
205
|
zoomOffset
|
|
93
|
-
} = props;
|
|
206
|
+
} = this.props;
|
|
94
207
|
|
|
95
208
|
return {
|
|
96
209
|
maxCacheSize,
|
|
@@ -110,7 +223,8 @@ export default class TileLayer extends CompositeLayer {
|
|
|
110
223
|
};
|
|
111
224
|
}
|
|
112
225
|
|
|
113
|
-
_updateTileset() {
|
|
226
|
+
_updateTileset(): void {
|
|
227
|
+
assert(this.state && this.context);
|
|
114
228
|
const {tileset} = this.state;
|
|
115
229
|
const {zRange, modelMatrix} = this.props;
|
|
116
230
|
const frameNumber = tileset.update(this.context.viewport, {zRange, modelMatrix});
|
|
@@ -131,7 +245,9 @@ export default class TileLayer extends CompositeLayer {
|
|
|
131
245
|
this.state.isLoaded = isLoaded;
|
|
132
246
|
}
|
|
133
247
|
|
|
134
|
-
_onViewportLoad() {
|
|
248
|
+
_onViewportLoad(): void {
|
|
249
|
+
assert(this.state);
|
|
250
|
+
|
|
135
251
|
const {tileset} = this.state;
|
|
136
252
|
const {onViewportLoad} = this.props;
|
|
137
253
|
|
|
@@ -140,46 +256,54 @@ export default class TileLayer extends CompositeLayer {
|
|
|
140
256
|
}
|
|
141
257
|
}
|
|
142
258
|
|
|
143
|
-
_onTileLoad(tile) {
|
|
259
|
+
_onTileLoad(tile: Tile2DHeader): void {
|
|
144
260
|
this.props.onTileLoad(tile);
|
|
145
261
|
tile.layers = null;
|
|
146
262
|
|
|
147
263
|
this.setNeedsUpdate();
|
|
148
264
|
}
|
|
149
265
|
|
|
150
|
-
_onTileError(error, tile) {
|
|
266
|
+
_onTileError(error: any, tile: Tile2DHeader) {
|
|
151
267
|
this.props.onTileError(error);
|
|
152
268
|
tile.layers = null;
|
|
153
269
|
|
|
154
270
|
this.setNeedsUpdate();
|
|
155
271
|
}
|
|
156
272
|
|
|
157
|
-
_onTileUnload(tile) {
|
|
273
|
+
_onTileUnload(tile: Tile2DHeader) {
|
|
158
274
|
this.props.onTileUnload(tile);
|
|
159
275
|
}
|
|
160
276
|
|
|
161
277
|
// Methods for subclass to override
|
|
162
278
|
|
|
163
|
-
getTileData(tile) {
|
|
279
|
+
getTileData(tile: TileLoadProps) {
|
|
164
280
|
const {data, getTileData, fetch} = this.props;
|
|
165
281
|
const {signal} = tile;
|
|
166
282
|
|
|
167
|
-
tile.url =
|
|
283
|
+
tile.url =
|
|
284
|
+
typeof data === 'string' || Array.isArray(data) ? getURLFromTemplate(data, tile) : null;
|
|
168
285
|
|
|
169
286
|
if (getTileData) {
|
|
170
287
|
return getTileData(tile);
|
|
171
288
|
}
|
|
172
|
-
if (tile.url) {
|
|
289
|
+
if (fetch && tile.url) {
|
|
173
290
|
return fetch(tile.url, {propName: 'data', layer: this, signal});
|
|
174
291
|
}
|
|
175
292
|
return null;
|
|
176
293
|
}
|
|
177
294
|
|
|
178
|
-
renderSubLayers(
|
|
295
|
+
renderSubLayers(
|
|
296
|
+
props: _TileLayerProps<DataT> & {
|
|
297
|
+
id: string;
|
|
298
|
+
data: any;
|
|
299
|
+
_offset: number;
|
|
300
|
+
tile: Tile2DHeader;
|
|
301
|
+
}
|
|
302
|
+
): LayersList {
|
|
179
303
|
return this.props.renderSubLayers(props);
|
|
180
304
|
}
|
|
181
305
|
|
|
182
|
-
getSubLayerPropsByTile(tile) {
|
|
306
|
+
getSubLayerPropsByTile(tile: Tile2DHeader): LayerProps | null {
|
|
183
307
|
return null;
|
|
184
308
|
}
|
|
185
309
|
|
|
@@ -194,8 +318,9 @@ export default class TileLayer extends CompositeLayer {
|
|
|
194
318
|
}
|
|
195
319
|
}
|
|
196
320
|
|
|
197
|
-
renderLayers() {
|
|
198
|
-
|
|
321
|
+
renderLayers(): Layer[] {
|
|
322
|
+
assert(this.state);
|
|
323
|
+
return this.state.tileset.tiles.map((tile: Tile2DHeader) => {
|
|
199
324
|
const subLayerProps = this.getSubLayerPropsByTile(tile);
|
|
200
325
|
// cache the rendered layer in the tile
|
|
201
326
|
if (!tile.isLoaded && !tile.content) {
|
|
@@ -203,12 +328,12 @@ export default class TileLayer extends CompositeLayer {
|
|
|
203
328
|
} else if (!tile.layers) {
|
|
204
329
|
const layers = this.renderSubLayers({
|
|
205
330
|
...this.props,
|
|
206
|
-
id: `${this.id}-${tile.
|
|
331
|
+
id: `${this.id}-${tile.id}`,
|
|
207
332
|
data: tile.content,
|
|
208
333
|
_offset: 0,
|
|
209
334
|
tile
|
|
210
335
|
});
|
|
211
|
-
tile.layers = flatten(layers, Boolean).map(layer =>
|
|
336
|
+
tile.layers = (flatten(layers, Boolean) as Layer[]).map(layer =>
|
|
212
337
|
layer.clone({
|
|
213
338
|
tile,
|
|
214
339
|
...subLayerProps
|
|
@@ -218,7 +343,7 @@ export default class TileLayer extends CompositeLayer {
|
|
|
218
343
|
subLayerProps &&
|
|
219
344
|
tile.layers[0] &&
|
|
220
345
|
Object.keys(subLayerProps).some(
|
|
221
|
-
propName => tile.layers[0].props[propName] !== subLayerProps[propName]
|
|
346
|
+
propName => tile.layers![0].props[propName] !== subLayerProps[propName]
|
|
222
347
|
)
|
|
223
348
|
) {
|
|
224
349
|
tile.layers = tile.layers.map(layer => layer.clone(subLayerProps));
|
|
@@ -231,6 +356,3 @@ export default class TileLayer extends CompositeLayer {
|
|
|
231
356
|
return layer.props.tile.isVisible;
|
|
232
357
|
}
|
|
233
358
|
}
|
|
234
|
-
|
|
235
|
-
TileLayer.layerName = 'TileLayer';
|
|
236
|
-
TileLayer.defaultProps = defaultProps;
|