@deck.gl/geo-layers 8.7.0-alpha.1 → 8.7.0-alpha.8
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 +6939 -3749
- package/dist/es5/great-circle-layer/great-circle-layer.js +1 -1
- package/dist/es5/h3-layers/h3-cluster-layer.js +3 -3
- package/dist/es5/h3-layers/h3-cluster-layer.js.map +1 -1
- package/dist/es5/h3-layers/h3-hexagon-layer.js +10 -9
- package/dist/es5/h3-layers/h3-hexagon-layer.js.map +1 -1
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/mesh-layer/mesh-layer-vertex.glsl.js +1 -1
- package/dist/es5/mesh-layer/mesh-layer.js +5 -10
- package/dist/es5/mesh-layer/mesh-layer.js.map +1 -1
- package/dist/es5/mvt-layer/coordinate-transform.js +4 -4
- package/dist/es5/mvt-layer/coordinate-transform.js.map +1 -1
- package/dist/es5/mvt-layer/find-index-binary.js +1 -1
- package/dist/es5/mvt-layer/find-index-binary.js.map +1 -1
- package/dist/es5/mvt-layer/mvt-layer.js +35 -12
- package/dist/es5/mvt-layer/mvt-layer.js.map +1 -1
- package/dist/es5/s2-layer/s2-layer.js +2 -2
- package/dist/es5/s2-layer/s2-layer.js.map +1 -1
- package/dist/es5/s2-layer/s2-utils.js.map +1 -1
- package/dist/es5/terrain-layer/terrain-layer.js +7 -11
- package/dist/es5/terrain-layer/terrain-layer.js.map +1 -1
- package/dist/es5/tile-3d-layer/tile-3d-layer.js +11 -9
- package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +1 -1
- package/dist/es5/tile-layer/tile-2d-header.js +35 -35
- package/dist/es5/tile-layer/tile-2d-header.js.map +1 -1
- package/dist/es5/tile-layer/tile-2d-traversal.js +13 -13
- package/dist/es5/tile-layer/tile-2d-traversal.js.map +1 -1
- package/dist/es5/tile-layer/tile-layer.js +31 -34
- package/dist/es5/tile-layer/tile-layer.js.map +1 -1
- package/dist/es5/tile-layer/tileset-2d.js +215 -141
- package/dist/es5/tile-layer/tileset-2d.js.map +1 -1
- package/dist/es5/tile-layer/utils.js.map +1 -1
- package/dist/es5/trips-layer/trips-layer.js +2 -2
- package/dist/es5/trips-layer/trips-layer.js.map +1 -1
- package/dist/esm/h3-layers/h3-hexagon-layer.js +2 -1
- package/dist/esm/h3-layers/h3-hexagon-layer.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js +1 -1
- package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js.map +1 -1
- package/dist/esm/mesh-layer/mesh-layer.js +2 -8
- package/dist/esm/mesh-layer/mesh-layer.js.map +1 -1
- package/dist/esm/mvt-layer/coordinate-transform.js +1 -1
- package/dist/esm/mvt-layer/coordinate-transform.js.map +1 -1
- package/dist/esm/mvt-layer/mvt-layer.js +27 -1
- package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
- package/dist/esm/s2-layer/s2-utils.js.map +1 -1
- package/dist/esm/terrain-layer/terrain-layer.js +8 -10
- package/dist/esm/terrain-layer/terrain-layer.js.map +1 -1
- package/dist/esm/tile-3d-layer/tile-3d-layer.js +2 -1
- package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +1 -1
- package/dist/esm/tile-layer/tile-2d-header.js.map +1 -1
- package/dist/esm/tile-layer/tile-2d-traversal.js.map +1 -1
- package/dist/esm/tile-layer/tile-layer.js +8 -16
- package/dist/esm/tile-layer/tile-layer.js.map +1 -1
- package/dist/esm/tile-layer/tileset-2d.js +85 -79
- package/dist/esm/tile-layer/tileset-2d.js.map +1 -1
- package/dist.min.js +2 -2
- package/package.json +12 -12
- package/src/h3-layers/h3-hexagon-layer.js +2 -1
- package/src/{index.js → index.ts} +0 -0
- package/src/mesh-layer/mesh-layer-vertex.glsl.js +24 -23
- package/src/mesh-layer/mesh-layer.js +5 -4
- package/src/mvt-layer/coordinate-transform.js +1 -1
- package/src/mvt-layer/mvt-layer.js +17 -1
- package/src/s2-layer/s2-utils.js +7 -1
- package/src/terrain-layer/terrain-layer.js +10 -9
- package/src/tile-3d-layer/tile-3d-layer.js +12 -9
- package/src/tile-layer/tile-2d-traversal.js +17 -3
- package/src/tile-layer/tile-layer.js +11 -12
- package/src/tile-layer/tileset-2d.js +103 -90
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import Tile2DHeader from './tile-2d-header';
|
|
2
2
|
import {getTileIndices, tileToBoundingBox} from './utils';
|
|
3
3
|
import {RequestScheduler} from '@loaders.gl/loader-utils';
|
|
4
|
-
import {Matrix4} from 'math.gl';
|
|
4
|
+
import {Matrix4} from '@math.gl/core';
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
const
|
|
6
|
+
// bit masks
|
|
7
|
+
const TILE_STATE_VISITED = 1;
|
|
8
|
+
const TILE_STATE_VISIBLE = 2;
|
|
8
9
|
/*
|
|
9
10
|
show cached parent tile if children are loading
|
|
10
11
|
+-----------+ +-----+ +-----+-----+
|
|
@@ -23,10 +24,6 @@ const TILE_STATE_VISIBLE = 1;
|
|
|
23
24
|
+-------+---- --> |
|
|
24
25
|
| | |
|
|
25
26
|
*/
|
|
26
|
-
const TILE_STATE_PLACEHOLDER = 3;
|
|
27
|
-
const TILE_STATE_HIDDEN = 4;
|
|
28
|
-
// tiles that should be displayed in the current viewport
|
|
29
|
-
const TILE_STATE_SELECTED = 5;
|
|
30
27
|
|
|
31
28
|
export const STRATEGY_NEVER = 'never';
|
|
32
29
|
export const STRATEGY_REPLACE = 'no-overlap';
|
|
@@ -34,6 +31,12 @@ export const STRATEGY_DEFAULT = 'best-available';
|
|
|
34
31
|
|
|
35
32
|
const DEFAULT_CACHE_SCALE = 5;
|
|
36
33
|
|
|
34
|
+
const STRATEGIES = {
|
|
35
|
+
[STRATEGY_DEFAULT]: updateTileStateDefault,
|
|
36
|
+
[STRATEGY_REPLACE]: updateTileStateReplace,
|
|
37
|
+
[STRATEGY_NEVER]: () => {}
|
|
38
|
+
};
|
|
39
|
+
|
|
37
40
|
/**
|
|
38
41
|
* Manages loading and purging of tiles data. This class caches recently visited tiles
|
|
39
42
|
* and only create new tiles if they are present.
|
|
@@ -153,6 +156,7 @@ export default class Tileset2D {
|
|
|
153
156
|
|
|
154
157
|
// Update tile states
|
|
155
158
|
const changed = this.updateTileStates();
|
|
159
|
+
this._pruneRequests();
|
|
156
160
|
|
|
157
161
|
if (this._dirty) {
|
|
158
162
|
// cache size is either the user defined maxSize or 5 * number of current tiles in the viewport.
|
|
@@ -201,46 +205,63 @@ export default class Tileset2D {
|
|
|
201
205
|
|
|
202
206
|
// Returns true if any tile's visibility changed
|
|
203
207
|
updateTileStates() {
|
|
204
|
-
this.
|
|
208
|
+
const refinementStrategy = this.opts.refinementStrategy || STRATEGY_DEFAULT;
|
|
205
209
|
|
|
206
|
-
const
|
|
210
|
+
const visibilities = new Array(this._cache.size);
|
|
211
|
+
let i = 0;
|
|
212
|
+
// Reset state
|
|
213
|
+
for (const tile of this._cache.values()) {
|
|
214
|
+
// save previous state
|
|
215
|
+
visibilities[i++] = tile.isVisible;
|
|
216
|
+
tile.isSelected = false;
|
|
217
|
+
tile.isVisible = false;
|
|
218
|
+
}
|
|
219
|
+
for (const tile of this._selectedTiles) {
|
|
220
|
+
tile.isSelected = true;
|
|
221
|
+
tile.isVisible = true;
|
|
222
|
+
}
|
|
207
223
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
224
|
+
// Strategy-specific state logic
|
|
225
|
+
(typeof refinementStrategy === 'function'
|
|
226
|
+
? refinementStrategy
|
|
227
|
+
: STRATEGIES[refinementStrategy])(Array.from(this._cache.values()));
|
|
228
|
+
|
|
229
|
+
i = 0;
|
|
230
|
+
// Check if any visibility has changed
|
|
211
231
|
for (const tile of this._cache.values()) {
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
changed = true;
|
|
215
|
-
tile.isVisible = isVisible;
|
|
232
|
+
if (visibilities[i++] !== tile.isVisible) {
|
|
233
|
+
return true;
|
|
216
234
|
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
return false;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/* Private methods */
|
|
217
241
|
|
|
218
|
-
|
|
219
|
-
|
|
242
|
+
_pruneRequests() {
|
|
243
|
+
const {maxRequests} = this.opts;
|
|
220
244
|
|
|
245
|
+
const abortCandidates = [];
|
|
246
|
+
let ongoingRequestCount = 0;
|
|
247
|
+
for (const tile of this._cache.values()) {
|
|
221
248
|
// Keep track of all the ongoing requests
|
|
222
249
|
if (tile.isLoading) {
|
|
223
250
|
ongoingRequestCount++;
|
|
224
|
-
if (!tile.isSelected) {
|
|
251
|
+
if (!tile.isSelected && !tile.isVisible) {
|
|
225
252
|
abortCandidates.push(tile);
|
|
226
253
|
}
|
|
227
254
|
}
|
|
228
255
|
}
|
|
229
256
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
ongoingRequestCount--;
|
|
236
|
-
}
|
|
257
|
+
while (maxRequests > 0 && ongoingRequestCount > maxRequests && abortCandidates.length > 0) {
|
|
258
|
+
// There are too many ongoing requests, so abort some that are unselected
|
|
259
|
+
const tile = abortCandidates.shift();
|
|
260
|
+
tile.abort();
|
|
261
|
+
ongoingRequestCount--;
|
|
237
262
|
}
|
|
238
|
-
|
|
239
|
-
return changed;
|
|
240
263
|
}
|
|
241
264
|
|
|
242
|
-
/* Private methods */
|
|
243
|
-
|
|
244
265
|
// This needs to be called every time some tiles have been added/removed from cache
|
|
245
266
|
_rebuildTree() {
|
|
246
267
|
const {_cache} = this;
|
|
@@ -261,40 +282,6 @@ export default class Tileset2D {
|
|
|
261
282
|
}
|
|
262
283
|
}
|
|
263
284
|
|
|
264
|
-
// A selected tile is always visible.
|
|
265
|
-
// Never show two overlapping tiles.
|
|
266
|
-
// If a selected tile is loading, try showing a cached ancester with the closest z
|
|
267
|
-
// If a selected tile is loading, and no ancester is shown - try showing cached
|
|
268
|
-
// descendants with the closest z
|
|
269
|
-
_updateTileStates(selectedTiles) {
|
|
270
|
-
const {_cache} = this;
|
|
271
|
-
const refinementStrategy = this.opts.refinementStrategy || STRATEGY_DEFAULT;
|
|
272
|
-
|
|
273
|
-
// Reset states
|
|
274
|
-
for (const tile of _cache.values()) {
|
|
275
|
-
tile.state = TILE_STATE_UNKNOWN;
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
// For all the selected && pending tiles:
|
|
279
|
-
// - pick the closest ancestor as placeholder
|
|
280
|
-
// - if no ancestor is visible, pick the closest children as placeholder
|
|
281
|
-
for (const tile of selectedTiles) {
|
|
282
|
-
tile.state = TILE_STATE_SELECTED;
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
if (refinementStrategy === STRATEGY_NEVER) {
|
|
286
|
-
return;
|
|
287
|
-
}
|
|
288
|
-
for (const tile of selectedTiles) {
|
|
289
|
-
getPlaceholderInAncestors(tile, refinementStrategy);
|
|
290
|
-
}
|
|
291
|
-
for (const tile of selectedTiles) {
|
|
292
|
-
if (needsPlaceholder(tile)) {
|
|
293
|
-
getPlaceholderInChildren(tile);
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
|
|
298
285
|
/**
|
|
299
286
|
* Clear tiles that are not visible when the cache is full
|
|
300
287
|
*/
|
|
@@ -375,44 +362,70 @@ export default class Tileset2D {
|
|
|
375
362
|
}
|
|
376
363
|
}
|
|
377
364
|
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
365
|
+
/* -- Refinement strategies --*/
|
|
366
|
+
/* eslint-disable max-depth */
|
|
367
|
+
|
|
368
|
+
// For all the selected && pending tiles:
|
|
369
|
+
// - pick the closest ancestor as placeholder
|
|
370
|
+
// - if no ancestor is visible, pick the closest children as placeholder
|
|
371
|
+
function updateTileStateDefault(allTiles) {
|
|
372
|
+
for (const tile of allTiles) {
|
|
373
|
+
tile.state = 0;
|
|
374
|
+
}
|
|
375
|
+
for (const tile of allTiles) {
|
|
376
|
+
if (tile.isSelected && !getPlaceholderInAncestors(tile)) {
|
|
377
|
+
getPlaceholderInChildren(tile);
|
|
389
378
|
}
|
|
390
|
-
t = t.parent;
|
|
391
379
|
}
|
|
392
|
-
|
|
380
|
+
for (const tile of allTiles) {
|
|
381
|
+
tile.isVisible = Boolean(tile.state & TILE_STATE_VISIBLE);
|
|
382
|
+
}
|
|
393
383
|
}
|
|
394
384
|
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
385
|
+
// Until a selected tile and all its selected siblings are loaded, use the closest ancestor as placeholder
|
|
386
|
+
function updateTileStateReplace(allTiles) {
|
|
387
|
+
for (const tile of allTiles) {
|
|
388
|
+
tile.state = 0;
|
|
389
|
+
}
|
|
390
|
+
for (const tile of allTiles) {
|
|
391
|
+
if (tile.isSelected) {
|
|
392
|
+
getPlaceholderInAncestors(tile);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
// Always process parents first
|
|
396
|
+
const sortedTiles = Array.from(allTiles).sort((t1, t2) => t1.z - t2.z);
|
|
397
|
+
for (const tile of sortedTiles) {
|
|
398
|
+
tile.isVisible = Boolean(tile.state & TILE_STATE_VISIBLE);
|
|
399
|
+
|
|
400
|
+
if (tile.isVisible || tile.state & TILE_STATE_VISITED) {
|
|
401
|
+
// If the tile is rendered, or if the tile has been explicitly hidden, hide all of its children
|
|
402
|
+
for (const child of tile.children) {
|
|
403
|
+
child.state = TILE_STATE_VISITED;
|
|
404
404
|
}
|
|
405
|
+
} else if (tile.isSelected) {
|
|
406
|
+
getPlaceholderInChildren(tile);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
// Walk up the tree until we find one ancestor that is loaded. Returns true if successful.
|
|
412
|
+
function getPlaceholderInAncestors(tile) {
|
|
413
|
+
while (tile) {
|
|
414
|
+
if (tile.isLoaded || tile.content) {
|
|
415
|
+
tile.state |= TILE_STATE_VISIBLE;
|
|
416
|
+
return true;
|
|
405
417
|
}
|
|
406
|
-
|
|
407
|
-
tile = parent;
|
|
418
|
+
tile = tile.parent;
|
|
408
419
|
}
|
|
420
|
+
return false;
|
|
409
421
|
}
|
|
410
422
|
|
|
411
423
|
// Recursively set children as placeholder
|
|
412
424
|
function getPlaceholderInChildren(tile) {
|
|
413
425
|
for (const child of tile.children) {
|
|
414
|
-
child.
|
|
415
|
-
|
|
426
|
+
if (child.isLoaded || child.content) {
|
|
427
|
+
child.state |= TILE_STATE_VISIBLE;
|
|
428
|
+
} else {
|
|
416
429
|
getPlaceholderInChildren(child);
|
|
417
430
|
}
|
|
418
431
|
}
|