@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.
Files changed (70) hide show
  1. package/dist/dist.dev.js +6939 -3749
  2. package/dist/es5/great-circle-layer/great-circle-layer.js +1 -1
  3. package/dist/es5/h3-layers/h3-cluster-layer.js +3 -3
  4. package/dist/es5/h3-layers/h3-cluster-layer.js.map +1 -1
  5. package/dist/es5/h3-layers/h3-hexagon-layer.js +10 -9
  6. package/dist/es5/h3-layers/h3-hexagon-layer.js.map +1 -1
  7. package/dist/es5/index.js.map +1 -1
  8. package/dist/es5/mesh-layer/mesh-layer-vertex.glsl.js +1 -1
  9. package/dist/es5/mesh-layer/mesh-layer.js +5 -10
  10. package/dist/es5/mesh-layer/mesh-layer.js.map +1 -1
  11. package/dist/es5/mvt-layer/coordinate-transform.js +4 -4
  12. package/dist/es5/mvt-layer/coordinate-transform.js.map +1 -1
  13. package/dist/es5/mvt-layer/find-index-binary.js +1 -1
  14. package/dist/es5/mvt-layer/find-index-binary.js.map +1 -1
  15. package/dist/es5/mvt-layer/mvt-layer.js +35 -12
  16. package/dist/es5/mvt-layer/mvt-layer.js.map +1 -1
  17. package/dist/es5/s2-layer/s2-layer.js +2 -2
  18. package/dist/es5/s2-layer/s2-layer.js.map +1 -1
  19. package/dist/es5/s2-layer/s2-utils.js.map +1 -1
  20. package/dist/es5/terrain-layer/terrain-layer.js +7 -11
  21. package/dist/es5/terrain-layer/terrain-layer.js.map +1 -1
  22. package/dist/es5/tile-3d-layer/tile-3d-layer.js +11 -9
  23. package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +1 -1
  24. package/dist/es5/tile-layer/tile-2d-header.js +35 -35
  25. package/dist/es5/tile-layer/tile-2d-header.js.map +1 -1
  26. package/dist/es5/tile-layer/tile-2d-traversal.js +13 -13
  27. package/dist/es5/tile-layer/tile-2d-traversal.js.map +1 -1
  28. package/dist/es5/tile-layer/tile-layer.js +31 -34
  29. package/dist/es5/tile-layer/tile-layer.js.map +1 -1
  30. package/dist/es5/tile-layer/tileset-2d.js +215 -141
  31. package/dist/es5/tile-layer/tileset-2d.js.map +1 -1
  32. package/dist/es5/tile-layer/utils.js.map +1 -1
  33. package/dist/es5/trips-layer/trips-layer.js +2 -2
  34. package/dist/es5/trips-layer/trips-layer.js.map +1 -1
  35. package/dist/esm/h3-layers/h3-hexagon-layer.js +2 -1
  36. package/dist/esm/h3-layers/h3-hexagon-layer.js.map +1 -1
  37. package/dist/esm/index.js.map +1 -1
  38. package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js +1 -1
  39. package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js.map +1 -1
  40. package/dist/esm/mesh-layer/mesh-layer.js +2 -8
  41. package/dist/esm/mesh-layer/mesh-layer.js.map +1 -1
  42. package/dist/esm/mvt-layer/coordinate-transform.js +1 -1
  43. package/dist/esm/mvt-layer/coordinate-transform.js.map +1 -1
  44. package/dist/esm/mvt-layer/mvt-layer.js +27 -1
  45. package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
  46. package/dist/esm/s2-layer/s2-utils.js.map +1 -1
  47. package/dist/esm/terrain-layer/terrain-layer.js +8 -10
  48. package/dist/esm/terrain-layer/terrain-layer.js.map +1 -1
  49. package/dist/esm/tile-3d-layer/tile-3d-layer.js +2 -1
  50. package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +1 -1
  51. package/dist/esm/tile-layer/tile-2d-header.js.map +1 -1
  52. package/dist/esm/tile-layer/tile-2d-traversal.js.map +1 -1
  53. package/dist/esm/tile-layer/tile-layer.js +8 -16
  54. package/dist/esm/tile-layer/tile-layer.js.map +1 -1
  55. package/dist/esm/tile-layer/tileset-2d.js +85 -79
  56. package/dist/esm/tile-layer/tileset-2d.js.map +1 -1
  57. package/dist.min.js +2 -2
  58. package/package.json +12 -12
  59. package/src/h3-layers/h3-hexagon-layer.js +2 -1
  60. package/src/{index.js → index.ts} +0 -0
  61. package/src/mesh-layer/mesh-layer-vertex.glsl.js +24 -23
  62. package/src/mesh-layer/mesh-layer.js +5 -4
  63. package/src/mvt-layer/coordinate-transform.js +1 -1
  64. package/src/mvt-layer/mvt-layer.js +17 -1
  65. package/src/s2-layer/s2-utils.js +7 -1
  66. package/src/terrain-layer/terrain-layer.js +10 -9
  67. package/src/tile-3d-layer/tile-3d-layer.js +12 -9
  68. package/src/tile-layer/tile-2d-traversal.js +17 -3
  69. package/src/tile-layer/tile-layer.js +11 -12
  70. package/src/tile-layer/tileset-2d.js +103 -90
@@ -13,25 +13,26 @@ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/cl
13
13
 
14
14
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
15
 
16
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
+
16
18
  var _tile2dHeader = _interopRequireDefault(require("./tile-2d-header"));
17
19
 
18
20
  var _utils = require("./utils");
19
21
 
20
22
  var _loaderUtils = require("@loaders.gl/loader-utils");
21
23
 
22
- var _math = require("math.gl");
24
+ var _core = require("@math.gl/core");
25
+
26
+ var _STRATEGIES;
23
27
 
24
- function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
28
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
25
29
 
26
30
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
27
31
 
28
32
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
29
33
 
30
- var TILE_STATE_UNKNOWN = 0;
31
- var TILE_STATE_VISIBLE = 1;
32
- var TILE_STATE_PLACEHOLDER = 3;
33
- var TILE_STATE_HIDDEN = 4;
34
- var TILE_STATE_SELECTED = 5;
34
+ var TILE_STATE_VISITED = 1;
35
+ var TILE_STATE_VISIBLE = 2;
35
36
  var STRATEGY_NEVER = 'never';
36
37
  exports.STRATEGY_NEVER = STRATEGY_NEVER;
37
38
  var STRATEGY_REPLACE = 'no-overlap';
@@ -39,6 +40,7 @@ exports.STRATEGY_REPLACE = STRATEGY_REPLACE;
39
40
  var STRATEGY_DEFAULT = 'best-available';
40
41
  exports.STRATEGY_DEFAULT = STRATEGY_DEFAULT;
41
42
  var DEFAULT_CACHE_SCALE = 5;
43
+ var STRATEGIES = (_STRATEGIES = {}, (0, _defineProperty2.default)(_STRATEGIES, STRATEGY_DEFAULT, updateTileStateDefault), (0, _defineProperty2.default)(_STRATEGIES, STRATEGY_REPLACE, updateTileStateReplace), (0, _defineProperty2.default)(_STRATEGIES, STRATEGY_NEVER, function () {}), _STRATEGIES);
42
44
 
43
45
  var Tileset2D = function () {
44
46
  function Tileset2D(opts) {
@@ -72,6 +74,23 @@ var Tileset2D = function () {
72
74
  }
73
75
 
74
76
  (0, _createClass2.default)(Tileset2D, [{
77
+ key: "tiles",
78
+ get: function get() {
79
+ return this._tiles;
80
+ }
81
+ }, {
82
+ key: "selectedTiles",
83
+ get: function get() {
84
+ return this._selectedTiles;
85
+ }
86
+ }, {
87
+ key: "isLoaded",
88
+ get: function get() {
89
+ return this._selectedTiles.every(function (tile) {
90
+ return tile.isLoaded;
91
+ });
92
+ }
93
+ }, {
75
94
  key: "setOptions",
76
95
  value: function setOptions(opts) {
77
96
  Object.assign(this.opts, opts);
@@ -142,7 +161,7 @@ var Tileset2D = function () {
142
161
  zRange = _ref.zRange,
143
162
  modelMatrix = _ref.modelMatrix;
144
163
 
145
- var modelMatrixAsMatrix4 = new _math.Matrix4(modelMatrix);
164
+ var modelMatrixAsMatrix4 = new _core.Matrix4(modelMatrix);
146
165
  var isModelMatrixNew = !modelMatrixAsMatrix4.equals(this._modelMatrix);
147
166
 
148
167
  if (!viewport.equals(this._viewport) || isModelMatrixNew) {
@@ -171,6 +190,8 @@ var Tileset2D = function () {
171
190
 
172
191
  var changed = this.updateTileStates();
173
192
 
193
+ this._pruneRequests();
194
+
174
195
  if (this._dirty) {
175
196
  this._resizeCache();
176
197
  }
@@ -228,35 +249,19 @@ var Tileset2D = function () {
228
249
  }, {
229
250
  key: "updateTileStates",
230
251
  value: function updateTileStates() {
231
- this._updateTileStates(this.selectedTiles);
232
-
233
- var maxRequests = this.opts.maxRequests;
234
- var abortCandidates = [];
235
- var ongoingRequestCount = 0;
236
- var changed = false;
252
+ var refinementStrategy = this.opts.refinementStrategy || STRATEGY_DEFAULT;
253
+ var visibilities = new Array(this._cache.size);
254
+ var i = 0;
237
255
 
238
256
  var _iterator3 = _createForOfIteratorHelper(this._cache.values()),
239
257
  _step3;
240
258
 
241
259
  try {
242
260
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
243
- var _tile = _step3.value;
244
- var isVisible = Boolean(_tile.state & TILE_STATE_VISIBLE);
245
-
246
- if (_tile.isVisible !== isVisible) {
247
- changed = true;
248
- _tile.isVisible = isVisible;
249
- }
250
-
251
- _tile.isSelected = _tile.state === TILE_STATE_SELECTED;
252
-
253
- if (_tile.isLoading) {
254
- ongoingRequestCount++;
255
-
256
- if (!_tile.isSelected) {
257
- abortCandidates.push(_tile);
258
- }
259
- }
261
+ var tile = _step3.value;
262
+ visibilities[i++] = tile.isVisible;
263
+ tile.isSelected = false;
264
+ tile.isVisible = false;
260
265
  }
261
266
  } catch (err) {
262
267
  _iterator3.e(err);
@@ -264,29 +269,14 @@ var Tileset2D = function () {
264
269
  _iterator3.f();
265
270
  }
266
271
 
267
- if (maxRequests > 0) {
268
- while (ongoingRequestCount > maxRequests && abortCandidates.length > 0) {
269
- var tile = abortCandidates.shift();
270
- tile.abort();
271
- ongoingRequestCount--;
272
- }
273
- }
274
-
275
- return changed;
276
- }
277
- }, {
278
- key: "_rebuildTree",
279
- value: function _rebuildTree() {
280
- var _cache = this._cache;
281
-
282
- var _iterator4 = _createForOfIteratorHelper(_cache.values()),
272
+ var _iterator4 = _createForOfIteratorHelper(this._selectedTiles),
283
273
  _step4;
284
274
 
285
275
  try {
286
276
  for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
287
- var tile = _step4.value;
288
- tile.parent = null;
289
- tile.children.length = 0;
277
+ var _tile = _step4.value;
278
+ _tile.isSelected = true;
279
+ _tile.isVisible = true;
290
280
  }
291
281
  } catch (err) {
292
282
  _iterator4.e(err);
@@ -294,19 +284,18 @@ var Tileset2D = function () {
294
284
  _iterator4.f();
295
285
  }
296
286
 
297
- var _iterator5 = _createForOfIteratorHelper(_cache.values()),
287
+ (typeof refinementStrategy === 'function' ? refinementStrategy : STRATEGIES[refinementStrategy])(Array.from(this._cache.values()));
288
+ i = 0;
289
+
290
+ var _iterator5 = _createForOfIteratorHelper(this._cache.values()),
298
291
  _step5;
299
292
 
300
293
  try {
301
294
  for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
302
295
  var _tile2 = _step5.value;
303
296
 
304
- var parent = this._getNearestAncestor(_tile2.x, _tile2.y, _tile2.z);
305
-
306
- _tile2.parent = parent;
307
-
308
- if (parent) {
309
- parent.children.push(_tile2);
297
+ if (visibilities[i++] !== _tile2.isVisible) {
298
+ return true;
310
299
  }
311
300
  }
312
301
  } catch (err) {
@@ -314,20 +303,30 @@ var Tileset2D = function () {
314
303
  } finally {
315
304
  _iterator5.f();
316
305
  }
306
+
307
+ return false;
317
308
  }
318
309
  }, {
319
- key: "_updateTileStates",
320
- value: function _updateTileStates(selectedTiles) {
321
- var _cache = this._cache;
322
- var refinementStrategy = this.opts.refinementStrategy || STRATEGY_DEFAULT;
310
+ key: "_pruneRequests",
311
+ value: function _pruneRequests() {
312
+ var maxRequests = this.opts.maxRequests;
313
+ var abortCandidates = [];
314
+ var ongoingRequestCount = 0;
323
315
 
324
- var _iterator6 = _createForOfIteratorHelper(_cache.values()),
316
+ var _iterator6 = _createForOfIteratorHelper(this._cache.values()),
325
317
  _step6;
326
318
 
327
319
  try {
328
320
  for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
329
- var tile = _step6.value;
330
- tile.state = TILE_STATE_UNKNOWN;
321
+ var _tile3 = _step6.value;
322
+
323
+ if (_tile3.isLoading) {
324
+ ongoingRequestCount++;
325
+
326
+ if (!_tile3.isSelected && !_tile3.isVisible) {
327
+ abortCandidates.push(_tile3);
328
+ }
329
+ }
331
330
  }
332
331
  } catch (err) {
333
332
  _iterator6.e(err);
@@ -335,13 +334,25 @@ var Tileset2D = function () {
335
334
  _iterator6.f();
336
335
  }
337
336
 
338
- var _iterator7 = _createForOfIteratorHelper(selectedTiles),
337
+ while (maxRequests > 0 && ongoingRequestCount > maxRequests && abortCandidates.length > 0) {
338
+ var tile = abortCandidates.shift();
339
+ tile.abort();
340
+ ongoingRequestCount--;
341
+ }
342
+ }
343
+ }, {
344
+ key: "_rebuildTree",
345
+ value: function _rebuildTree() {
346
+ var _cache = this._cache;
347
+
348
+ var _iterator7 = _createForOfIteratorHelper(_cache.values()),
339
349
  _step7;
340
350
 
341
351
  try {
342
352
  for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
343
- var _tile3 = _step7.value;
344
- _tile3.state = TILE_STATE_SELECTED;
353
+ var tile = _step7.value;
354
+ tile.parent = null;
355
+ tile.children.length = 0;
345
356
  }
346
357
  } catch (err) {
347
358
  _iterator7.e(err);
@@ -349,39 +360,25 @@ var Tileset2D = function () {
349
360
  _iterator7.f();
350
361
  }
351
362
 
352
- if (refinementStrategy === STRATEGY_NEVER) {
353
- return;
354
- }
355
-
356
- var _iterator8 = _createForOfIteratorHelper(selectedTiles),
363
+ var _iterator8 = _createForOfIteratorHelper(_cache.values()),
357
364
  _step8;
358
365
 
359
366
  try {
360
367
  for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
361
368
  var _tile4 = _step8.value;
362
- getPlaceholderInAncestors(_tile4, refinementStrategy);
363
- }
364
- } catch (err) {
365
- _iterator8.e(err);
366
- } finally {
367
- _iterator8.f();
368
- }
369
369
 
370
- var _iterator9 = _createForOfIteratorHelper(selectedTiles),
371
- _step9;
370
+ var parent = this._getNearestAncestor(_tile4.x, _tile4.y, _tile4.z);
372
371
 
373
- try {
374
- for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
375
- var _tile5 = _step9.value;
372
+ _tile4.parent = parent;
376
373
 
377
- if (needsPlaceholder(_tile5)) {
378
- getPlaceholderInChildren(_tile5);
374
+ if (parent) {
375
+ parent.children.push(_tile4);
379
376
  }
380
377
  }
381
378
  } catch (err) {
382
- _iterator9.e(err);
379
+ _iterator8.e(err);
383
380
  } finally {
384
- _iterator9.f();
381
+ _iterator8.f();
385
382
  }
386
383
  }
387
384
  }, {
@@ -394,14 +391,14 @@ var Tileset2D = function () {
394
391
  var overflown = _cache.size > maxCacheSize || this._cacheByteSize > maxCacheByteSize;
395
392
 
396
393
  if (overflown) {
397
- var _iterator10 = _createForOfIteratorHelper(_cache),
398
- _step10;
394
+ var _iterator9 = _createForOfIteratorHelper(_cache),
395
+ _step9;
399
396
 
400
397
  try {
401
- for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
402
- var _step10$value = (0, _slicedToArray2.default)(_step10.value, 2),
403
- tileId = _step10$value[0],
404
- tile = _step10$value[1];
398
+ for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
399
+ var _step9$value = (0, _slicedToArray2.default)(_step9.value, 2),
400
+ tileId = _step9$value[0],
401
+ tile = _step9$value[1];
405
402
 
406
403
  if (!tile.isVisible) {
407
404
  this._cacheByteSize -= opts.maxCacheByteSize ? tile.byteLength : 0;
@@ -416,9 +413,9 @@ var Tileset2D = function () {
416
413
  }
417
414
  }
418
415
  } catch (err) {
419
- _iterator10.e(err);
416
+ _iterator9.e(err);
420
417
  } finally {
421
- _iterator10.f();
418
+ _iterator9.f();
422
419
  }
423
420
 
424
421
  this._rebuildTree();
@@ -496,82 +493,159 @@ var Tileset2D = function () {
496
493
 
497
494
  return null;
498
495
  }
499
- }, {
500
- key: "tiles",
501
- get: function get() {
502
- return this._tiles;
503
- }
504
- }, {
505
- key: "selectedTiles",
506
- get: function get() {
507
- return this._selectedTiles;
508
- }
509
- }, {
510
- key: "isLoaded",
511
- get: function get() {
512
- return this._selectedTiles.every(function (tile) {
513
- return tile.isLoaded;
514
- });
515
- }
516
496
  }]);
517
497
  return Tileset2D;
518
498
  }();
519
499
 
520
500
  exports.default = Tileset2D;
521
501
 
522
- function needsPlaceholder(tile) {
523
- var t = tile;
502
+ function updateTileStateDefault(allTiles) {
503
+ var _iterator10 = _createForOfIteratorHelper(allTiles),
504
+ _step10;
524
505
 
525
- while (t) {
526
- if (t.state & TILE_STATE_VISIBLE === 0) {
527
- return true;
506
+ try {
507
+ for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
508
+ var tile = _step10.value;
509
+ tile.state = 0;
528
510
  }
511
+ } catch (err) {
512
+ _iterator10.e(err);
513
+ } finally {
514
+ _iterator10.f();
515
+ }
529
516
 
530
- if (t.isLoaded) {
531
- return false;
532
- }
517
+ var _iterator11 = _createForOfIteratorHelper(allTiles),
518
+ _step11;
519
+
520
+ try {
521
+ for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
522
+ var _tile5 = _step11.value;
533
523
 
534
- t = t.parent;
524
+ if (_tile5.isSelected && !getPlaceholderInAncestors(_tile5)) {
525
+ getPlaceholderInChildren(_tile5);
526
+ }
527
+ }
528
+ } catch (err) {
529
+ _iterator11.e(err);
530
+ } finally {
531
+ _iterator11.f();
535
532
  }
536
533
 
537
- return true;
534
+ var _iterator12 = _createForOfIteratorHelper(allTiles),
535
+ _step12;
536
+
537
+ try {
538
+ for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
539
+ var _tile6 = _step12.value;
540
+ _tile6.isVisible = Boolean(_tile6.state & TILE_STATE_VISIBLE);
541
+ }
542
+ } catch (err) {
543
+ _iterator12.e(err);
544
+ } finally {
545
+ _iterator12.f();
546
+ }
538
547
  }
539
548
 
540
- function getPlaceholderInAncestors(tile, refinementStrategy) {
541
- var parent;
542
- var state = TILE_STATE_PLACEHOLDER;
549
+ function updateTileStateReplace(allTiles) {
550
+ var _iterator13 = _createForOfIteratorHelper(allTiles),
551
+ _step13;
552
+
553
+ try {
554
+ for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
555
+ var tile = _step13.value;
556
+ tile.state = 0;
557
+ }
558
+ } catch (err) {
559
+ _iterator13.e(err);
560
+ } finally {
561
+ _iterator13.f();
562
+ }
563
+
564
+ var _iterator14 = _createForOfIteratorHelper(allTiles),
565
+ _step14;
543
566
 
544
- while (parent = tile.parent) {
545
- if (tile.isLoaded) {
546
- state = TILE_STATE_HIDDEN;
567
+ try {
568
+ for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
569
+ var _tile7 = _step14.value;
547
570
 
548
- if (refinementStrategy === STRATEGY_DEFAULT) {
549
- return;
571
+ if (_tile7.isSelected) {
572
+ getPlaceholderInAncestors(_tile7);
550
573
  }
551
574
  }
575
+ } catch (err) {
576
+ _iterator14.e(err);
577
+ } finally {
578
+ _iterator14.f();
579
+ }
580
+
581
+ var sortedTiles = Array.from(allTiles).sort(function (t1, t2) {
582
+ return t1.z - t2.z;
583
+ });
552
584
 
553
- parent.state = Math.max(parent.state, state);
554
- tile = parent;
585
+ var _iterator15 = _createForOfIteratorHelper(sortedTiles),
586
+ _step15;
587
+
588
+ try {
589
+ for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
590
+ var _tile8 = _step15.value;
591
+ _tile8.isVisible = Boolean(_tile8.state & TILE_STATE_VISIBLE);
592
+
593
+ if (_tile8.isVisible || _tile8.state & TILE_STATE_VISITED) {
594
+ var _iterator16 = _createForOfIteratorHelper(_tile8.children),
595
+ _step16;
596
+
597
+ try {
598
+ for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
599
+ var child = _step16.value;
600
+ child.state = TILE_STATE_VISITED;
601
+ }
602
+ } catch (err) {
603
+ _iterator16.e(err);
604
+ } finally {
605
+ _iterator16.f();
606
+ }
607
+ } else if (_tile8.isSelected) {
608
+ getPlaceholderInChildren(_tile8);
609
+ }
610
+ }
611
+ } catch (err) {
612
+ _iterator15.e(err);
613
+ } finally {
614
+ _iterator15.f();
555
615
  }
556
616
  }
557
617
 
618
+ function getPlaceholderInAncestors(tile) {
619
+ while (tile) {
620
+ if (tile.isLoaded || tile.content) {
621
+ tile.state |= TILE_STATE_VISIBLE;
622
+ return true;
623
+ }
624
+
625
+ tile = tile.parent;
626
+ }
627
+
628
+ return false;
629
+ }
630
+
558
631
  function getPlaceholderInChildren(tile) {
559
- var _iterator11 = _createForOfIteratorHelper(tile.children),
560
- _step11;
632
+ var _iterator17 = _createForOfIteratorHelper(tile.children),
633
+ _step17;
561
634
 
562
635
  try {
563
- for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
564
- var child = _step11.value;
565
- child.state = Math.max(child.state, TILE_STATE_PLACEHOLDER);
636
+ for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
637
+ var child = _step17.value;
566
638
 
567
- if (!child.isLoaded) {
639
+ if (child.isLoaded || child.content) {
640
+ child.state |= TILE_STATE_VISIBLE;
641
+ } else {
568
642
  getPlaceholderInChildren(child);
569
643
  }
570
644
  }
571
645
  } catch (err) {
572
- _iterator11.e(err);
646
+ _iterator17.e(err);
573
647
  } finally {
574
- _iterator11.f();
648
+ _iterator17.f();
575
649
  }
576
650
  }
577
651
  //# sourceMappingURL=tileset-2d.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tile-layer/tileset-2d.js"],"names":["TILE_STATE_UNKNOWN","TILE_STATE_VISIBLE","TILE_STATE_PLACEHOLDER","TILE_STATE_HIDDEN","TILE_STATE_SELECTED","STRATEGY_NEVER","STRATEGY_REPLACE","STRATEGY_DEFAULT","DEFAULT_CACHE_SCALE","Tileset2D","opts","onTileLoad","tile","maxCacheByteSize","_cacheByteSize","byteLength","_resizeCache","_requestScheduler","RequestScheduler","maxRequests","throttleRequests","_cache","Map","_tiles","_dirty","_viewport","_selectedTiles","_frameNumber","setOptions","Object","assign","Number","isFinite","maxZoom","_maxZoom","Math","floor","minZoom","_minZoom","ceil","values","isLoading","abort","clear","keys","tileId","get","includes","delete","setNeedsReload","viewport","zRange","modelMatrix","modelMatrixAsMatrix4","Matrix4","isModelMatrixNew","equals","_modelMatrix","_modelMatrixInverse","clone","invert","tileIndices","getTileIndices","modelMatrixInverse","map","index","_getTile","_rebuildTree","changed","updateTileStates","tileSize","extent","zoomOffset","x","y","z","bbox","tileIndex","_updateTileStates","selectedTiles","abortCandidates","ongoingRequestCount","isVisible","Boolean","state","isSelected","push","length","shift","parent","children","_getNearestAncestor","refinementStrategy","getPlaceholderInAncestors","needsPlaceholder","getPlaceholderInChildren","maxCacheSize","Infinity","overflown","size","onTileUnload","Array","from","sort","t1","t2","create","needsReload","Tile2DHeader","getTileMetadata","set","loadData","getData","getTileData","requestScheduler","onLoad","onError","onTileError","getParentIndex","every","isLoaded","t","max","child"],"mappings":"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","sourcesContent":["import Tile2DHeader from './tile-2d-header';\nimport {getTileIndices, tileToBoundingBox} from './utils';\nimport {RequestScheduler} from '@loaders.gl/loader-utils';\nimport {Matrix4} from 'math.gl';\n\nconst TILE_STATE_UNKNOWN = 0;\nconst TILE_STATE_VISIBLE = 1;\n/*\n show cached parent tile if children are loading\n +-----------+ +-----+ +-----+-----+\n | | | | | | |\n | | | | | | |\n | | --> +-----+-----+ -> +-----+-----+\n | | | | | | |\n | | | | | | |\n +-----------+ +-----+ +-----+-----+\n\n show cached children tiles when parent is loading\n +-------+---- +------------\n | | |\n | | |\n | | |\n +-------+---- --> |\n | | |\n */\nconst TILE_STATE_PLACEHOLDER = 3;\nconst TILE_STATE_HIDDEN = 4;\n// tiles that should be displayed in the current viewport\nconst TILE_STATE_SELECTED = 5;\n\nexport const STRATEGY_NEVER = 'never';\nexport const STRATEGY_REPLACE = 'no-overlap';\nexport const STRATEGY_DEFAULT = 'best-available';\n\nconst DEFAULT_CACHE_SCALE = 5;\n\n/**\n * Manages loading and purging of tiles data. This class caches recently visited tiles\n * and only create new tiles if they are present.\n */\n\nexport default class Tileset2D {\n /**\n * Takes in a function that returns tile data, a cache size, and a max and a min zoom level.\n * Cache size defaults to 5 * number of tiles in the current viewport\n */\n constructor(opts) {\n this.opts = opts;\n\n this.onTileLoad = tile => {\n this.opts.onTileLoad(tile);\n if (this.opts.maxCacheByteSize) {\n this._cacheByteSize += tile.byteLength;\n this._resizeCache();\n }\n };\n\n this._requestScheduler = new RequestScheduler({\n maxRequests: opts.maxRequests,\n throttleRequests: opts.maxRequests > 0\n });\n\n // Maps tile id in string {z}-{x}-{y} to a Tile object\n this._cache = new Map();\n this._tiles = [];\n this._dirty = false;\n this._cacheByteSize = 0;\n\n // Cache the last processed viewport\n this._viewport = null;\n this._selectedTiles = null;\n this._frameNumber = 0;\n\n this.setOptions(opts);\n }\n\n /* Public API */\n get tiles() {\n return this._tiles;\n }\n\n get selectedTiles() {\n return this._selectedTiles;\n }\n\n get isLoaded() {\n return this._selectedTiles.every(tile => tile.isLoaded);\n }\n\n setOptions(opts) {\n Object.assign(this.opts, opts);\n if (Number.isFinite(opts.maxZoom)) {\n this._maxZoom = Math.floor(opts.maxZoom);\n }\n if (Number.isFinite(opts.minZoom)) {\n this._minZoom = Math.ceil(opts.minZoom);\n }\n }\n\n // Clean up any outstanding tile requests.\n finalize() {\n for (const tile of this._cache.values()) {\n if (tile.isLoading) {\n tile.abort();\n }\n }\n this._cache.clear();\n this._tiles = [];\n this._selectedTiles = null;\n }\n\n reloadAll() {\n for (const tileId of this._cache.keys()) {\n const tile = this._cache.get(tileId);\n if (!this._selectedTiles.includes(tile)) {\n this._cache.delete(tileId);\n } else {\n tile.setNeedsReload();\n }\n }\n }\n\n /**\n * Update the cache with the given viewport and model matrix and triggers callback onUpdate.\n * @param {*} viewport\n * @param {*} onUpdate\n * @param {*} modelMatrix\n */\n update(viewport, {zRange, modelMatrix} = {}) {\n const modelMatrixAsMatrix4 = new Matrix4(modelMatrix);\n const isModelMatrixNew = !modelMatrixAsMatrix4.equals(this._modelMatrix);\n if (!viewport.equals(this._viewport) || isModelMatrixNew) {\n if (isModelMatrixNew) {\n this._modelMatrixInverse = modelMatrix && modelMatrixAsMatrix4.clone().invert();\n this._modelMatrix = modelMatrix && modelMatrixAsMatrix4;\n }\n this._viewport = viewport;\n const tileIndices = this.getTileIndices({\n viewport,\n maxZoom: this._maxZoom,\n minZoom: this._minZoom,\n zRange,\n modelMatrix: this._modelMatrix,\n modelMatrixInverse: this._modelMatrixInverse\n });\n this._selectedTiles = tileIndices.map(index => this._getTile(index, true));\n\n if (this._dirty) {\n // Some new tiles are added\n this._rebuildTree();\n }\n }\n\n // Update tile states\n const changed = this.updateTileStates();\n\n if (this._dirty) {\n // cache size is either the user defined maxSize or 5 * number of current tiles in the viewport.\n this._resizeCache();\n }\n\n if (changed) {\n this._frameNumber++;\n }\n\n return this._frameNumber;\n }\n\n /* Public interface for subclassing */\n\n // Returns array of {x, y, z}\n getTileIndices({viewport, maxZoom, minZoom, zRange, modelMatrix, modelMatrixInverse}) {\n const {tileSize, extent, zoomOffset} = this.opts;\n return getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n tileSize,\n extent,\n modelMatrix,\n modelMatrixInverse,\n zoomOffset\n });\n }\n\n // Add custom metadata to tiles\n getTileMetadata({x, y, z}) {\n const {tileSize} = this.opts;\n return {bbox: tileToBoundingBox(this._viewport, x, y, z, tileSize)};\n }\n\n // Returns {x, y, z} of the parent tile\n getParentIndex(tileIndex) {\n // Perf: mutate the input object to avoid GC\n tileIndex.x = Math.floor(tileIndex.x / 2);\n tileIndex.y = Math.floor(tileIndex.y / 2);\n tileIndex.z -= 1;\n return tileIndex;\n }\n\n // Returns true if any tile's visibility changed\n updateTileStates() {\n this._updateTileStates(this.selectedTiles);\n\n const {maxRequests} = this.opts;\n\n const abortCandidates = [];\n let ongoingRequestCount = 0;\n let changed = false;\n for (const tile of this._cache.values()) {\n const isVisible = Boolean(tile.state & TILE_STATE_VISIBLE);\n if (tile.isVisible !== isVisible) {\n changed = true;\n tile.isVisible = isVisible;\n }\n\n // isSelected used in request scheduler\n tile.isSelected = tile.state === TILE_STATE_SELECTED;\n\n // Keep track of all the ongoing requests\n if (tile.isLoading) {\n ongoingRequestCount++;\n if (!tile.isSelected) {\n abortCandidates.push(tile);\n }\n }\n }\n\n if (maxRequests > 0) {\n while (ongoingRequestCount > maxRequests && abortCandidates.length > 0) {\n // There are too many ongoing requests, so abort some that are unselected\n const tile = abortCandidates.shift();\n tile.abort();\n ongoingRequestCount--;\n }\n }\n\n return changed;\n }\n\n /* Private methods */\n\n // This needs to be called every time some tiles have been added/removed from cache\n _rebuildTree() {\n const {_cache} = this;\n\n // Reset states\n for (const tile of _cache.values()) {\n tile.parent = null;\n tile.children.length = 0;\n }\n\n // Rebuild tree\n for (const tile of _cache.values()) {\n const parent = this._getNearestAncestor(tile.x, tile.y, tile.z);\n tile.parent = parent;\n if (parent) {\n parent.children.push(tile);\n }\n }\n }\n\n // A selected tile is always visible.\n // Never show two overlapping tiles.\n // If a selected tile is loading, try showing a cached ancester with the closest z\n // If a selected tile is loading, and no ancester is shown - try showing cached\n // descendants with the closest z\n _updateTileStates(selectedTiles) {\n const {_cache} = this;\n const refinementStrategy = this.opts.refinementStrategy || STRATEGY_DEFAULT;\n\n // Reset states\n for (const tile of _cache.values()) {\n tile.state = TILE_STATE_UNKNOWN;\n }\n\n // For all the selected && pending tiles:\n // - pick the closest ancestor as placeholder\n // - if no ancestor is visible, pick the closest children as placeholder\n for (const tile of selectedTiles) {\n tile.state = TILE_STATE_SELECTED;\n }\n\n if (refinementStrategy === STRATEGY_NEVER) {\n return;\n }\n for (const tile of selectedTiles) {\n getPlaceholderInAncestors(tile, refinementStrategy);\n }\n for (const tile of selectedTiles) {\n if (needsPlaceholder(tile)) {\n getPlaceholderInChildren(tile);\n }\n }\n }\n\n /**\n * Clear tiles that are not visible when the cache is full\n */\n /* eslint-disable complexity */\n _resizeCache() {\n const {_cache, opts} = this;\n\n const maxCacheSize =\n opts.maxCacheSize ||\n (opts.maxCacheByteSize ? Infinity : DEFAULT_CACHE_SCALE * this.selectedTiles.length);\n const maxCacheByteSize = opts.maxCacheByteSize || Infinity;\n\n const overflown = _cache.size > maxCacheSize || this._cacheByteSize > maxCacheByteSize;\n\n if (overflown) {\n for (const [tileId, tile] of _cache) {\n if (!tile.isVisible) {\n // delete tile\n this._cacheByteSize -= opts.maxCacheByteSize ? tile.byteLength : 0;\n _cache.delete(tileId);\n this.opts.onTileUnload(tile);\n }\n if (_cache.size <= maxCacheSize && this._cacheByteSize <= maxCacheByteSize) {\n break;\n }\n }\n this._rebuildTree();\n this._dirty = true;\n }\n if (this._dirty) {\n this._tiles = Array.from(this._cache.values())\n // sort by zoom level so that smaller tiles are displayed on top\n .sort((t1, t2) => t1.z - t2.z);\n\n this._dirty = false;\n }\n }\n /* eslint-enable complexity */\n\n _getTile({x, y, z}, create) {\n const tileId = `${x},${y},${z}`;\n let tile = this._cache.get(tileId);\n let needsReload = false;\n\n if (!tile && create) {\n tile = new Tile2DHeader({x, y, z});\n Object.assign(tile, this.getTileMetadata(tile));\n needsReload = true;\n this._cache.set(tileId, tile);\n this._dirty = true;\n } else if (tile && tile.needsReload) {\n needsReload = true;\n }\n if (needsReload) {\n tile.loadData({\n getData: this.opts.getTileData,\n requestScheduler: this._requestScheduler,\n onLoad: this.onTileLoad,\n onError: this.opts.onTileError\n });\n }\n\n return tile;\n }\n\n _getNearestAncestor(x, y, z) {\n const {_minZoom = 0} = this;\n let index = {x, y, z};\n\n while (index.z > _minZoom) {\n index = this.getParentIndex(index);\n const parent = this._getTile(index);\n if (parent) {\n return parent;\n }\n }\n return null;\n }\n}\n\n// A selected tile needs placeholder from its children if\n// - it is not loaded\n// - none of its ancestors is visible and loaded\nfunction needsPlaceholder(tile) {\n let t = tile;\n while (t) {\n if (t.state & (TILE_STATE_VISIBLE === 0)) {\n return true;\n }\n if (t.isLoaded) {\n return false;\n }\n t = t.parent;\n }\n return true;\n}\n\nfunction getPlaceholderInAncestors(tile, refinementStrategy) {\n let parent;\n let state = TILE_STATE_PLACEHOLDER;\n while ((parent = tile.parent)) {\n if (tile.isLoaded) {\n // If a tile is loaded, mark all its ancestors as hidden\n state = TILE_STATE_HIDDEN;\n if (refinementStrategy === STRATEGY_DEFAULT) {\n return;\n }\n }\n parent.state = Math.max(parent.state, state);\n tile = parent;\n }\n}\n\n// Recursively set children as placeholder\nfunction getPlaceholderInChildren(tile) {\n for (const child of tile.children) {\n child.state = Math.max(child.state, TILE_STATE_PLACEHOLDER);\n if (!child.isLoaded) {\n getPlaceholderInChildren(child);\n }\n }\n}\n"],"file":"tileset-2d.js"}
1
+ {"version":3,"sources":["../../../src/tile-layer/tileset-2d.js"],"names":["TILE_STATE_VISITED","TILE_STATE_VISIBLE","STRATEGY_NEVER","STRATEGY_REPLACE","STRATEGY_DEFAULT","DEFAULT_CACHE_SCALE","STRATEGIES","updateTileStateDefault","updateTileStateReplace","Tileset2D","opts","onTileLoad","tile","maxCacheByteSize","_cacheByteSize","byteLength","_resizeCache","_requestScheduler","RequestScheduler","maxRequests","throttleRequests","_cache","Map","_tiles","_dirty","_viewport","_selectedTiles","_frameNumber","setOptions","every","isLoaded","Object","assign","Number","isFinite","maxZoom","_maxZoom","Math","floor","minZoom","_minZoom","ceil","values","isLoading","abort","clear","keys","tileId","get","includes","delete","setNeedsReload","viewport","zRange","modelMatrix","modelMatrixAsMatrix4","Matrix4","isModelMatrixNew","equals","_modelMatrix","_modelMatrixInverse","clone","invert","tileIndices","getTileIndices","modelMatrixInverse","map","index","_getTile","_rebuildTree","changed","updateTileStates","_pruneRequests","tileSize","extent","zoomOffset","x","y","z","bbox","tileIndex","refinementStrategy","visibilities","Array","size","i","isVisible","isSelected","from","abortCandidates","ongoingRequestCount","push","length","shift","parent","children","_getNearestAncestor","maxCacheSize","Infinity","selectedTiles","overflown","onTileUnload","sort","t1","t2","create","needsReload","Tile2DHeader","getTileMetadata","set","loadData","getData","getTileData","requestScheduler","onLoad","onError","onTileError","getParentIndex","allTiles","state","getPlaceholderInAncestors","getPlaceholderInChildren","Boolean","sortedTiles","child","content"],"mappings":"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","sourcesContent":["import Tile2DHeader from './tile-2d-header';\nimport {getTileIndices, tileToBoundingBox} from './utils';\nimport {RequestScheduler} from '@loaders.gl/loader-utils';\nimport {Matrix4} from '@math.gl/core';\n\n// bit masks\nconst TILE_STATE_VISITED = 1;\nconst TILE_STATE_VISIBLE = 2;\n/*\n show cached parent tile if children are loading\n +-----------+ +-----+ +-----+-----+\n | | | | | | |\n | | | | | | |\n | | --> +-----+-----+ -> +-----+-----+\n | | | | | | |\n | | | | | | |\n +-----------+ +-----+ +-----+-----+\n\n show cached children tiles when parent is loading\n +-------+---- +------------\n | | |\n | | |\n | | |\n +-------+---- --> |\n | | |\n */\n\nexport const STRATEGY_NEVER = 'never';\nexport const STRATEGY_REPLACE = 'no-overlap';\nexport const STRATEGY_DEFAULT = 'best-available';\n\nconst DEFAULT_CACHE_SCALE = 5;\n\nconst STRATEGIES = {\n [STRATEGY_DEFAULT]: updateTileStateDefault,\n [STRATEGY_REPLACE]: updateTileStateReplace,\n [STRATEGY_NEVER]: () => {}\n};\n\n/**\n * Manages loading and purging of tiles data. This class caches recently visited tiles\n * and only create new tiles if they are present.\n */\n\nexport default class Tileset2D {\n /**\n * Takes in a function that returns tile data, a cache size, and a max and a min zoom level.\n * Cache size defaults to 5 * number of tiles in the current viewport\n */\n constructor(opts) {\n this.opts = opts;\n\n this.onTileLoad = tile => {\n this.opts.onTileLoad(tile);\n if (this.opts.maxCacheByteSize) {\n this._cacheByteSize += tile.byteLength;\n this._resizeCache();\n }\n };\n\n this._requestScheduler = new RequestScheduler({\n maxRequests: opts.maxRequests,\n throttleRequests: opts.maxRequests > 0\n });\n\n // Maps tile id in string {z}-{x}-{y} to a Tile object\n this._cache = new Map();\n this._tiles = [];\n this._dirty = false;\n this._cacheByteSize = 0;\n\n // Cache the last processed viewport\n this._viewport = null;\n this._selectedTiles = null;\n this._frameNumber = 0;\n\n this.setOptions(opts);\n }\n\n /* Public API */\n get tiles() {\n return this._tiles;\n }\n\n get selectedTiles() {\n return this._selectedTiles;\n }\n\n get isLoaded() {\n return this._selectedTiles.every(tile => tile.isLoaded);\n }\n\n setOptions(opts) {\n Object.assign(this.opts, opts);\n if (Number.isFinite(opts.maxZoom)) {\n this._maxZoom = Math.floor(opts.maxZoom);\n }\n if (Number.isFinite(opts.minZoom)) {\n this._minZoom = Math.ceil(opts.minZoom);\n }\n }\n\n // Clean up any outstanding tile requests.\n finalize() {\n for (const tile of this._cache.values()) {\n if (tile.isLoading) {\n tile.abort();\n }\n }\n this._cache.clear();\n this._tiles = [];\n this._selectedTiles = null;\n }\n\n reloadAll() {\n for (const tileId of this._cache.keys()) {\n const tile = this._cache.get(tileId);\n if (!this._selectedTiles.includes(tile)) {\n this._cache.delete(tileId);\n } else {\n tile.setNeedsReload();\n }\n }\n }\n\n /**\n * Update the cache with the given viewport and model matrix and triggers callback onUpdate.\n * @param {*} viewport\n * @param {*} onUpdate\n * @param {*} modelMatrix\n */\n update(viewport, {zRange, modelMatrix} = {}) {\n const modelMatrixAsMatrix4 = new Matrix4(modelMatrix);\n const isModelMatrixNew = !modelMatrixAsMatrix4.equals(this._modelMatrix);\n if (!viewport.equals(this._viewport) || isModelMatrixNew) {\n if (isModelMatrixNew) {\n this._modelMatrixInverse = modelMatrix && modelMatrixAsMatrix4.clone().invert();\n this._modelMatrix = modelMatrix && modelMatrixAsMatrix4;\n }\n this._viewport = viewport;\n const tileIndices = this.getTileIndices({\n viewport,\n maxZoom: this._maxZoom,\n minZoom: this._minZoom,\n zRange,\n modelMatrix: this._modelMatrix,\n modelMatrixInverse: this._modelMatrixInverse\n });\n this._selectedTiles = tileIndices.map(index => this._getTile(index, true));\n\n if (this._dirty) {\n // Some new tiles are added\n this._rebuildTree();\n }\n }\n\n // Update tile states\n const changed = this.updateTileStates();\n this._pruneRequests();\n\n if (this._dirty) {\n // cache size is either the user defined maxSize or 5 * number of current tiles in the viewport.\n this._resizeCache();\n }\n\n if (changed) {\n this._frameNumber++;\n }\n\n return this._frameNumber;\n }\n\n /* Public interface for subclassing */\n\n // Returns array of {x, y, z}\n getTileIndices({viewport, maxZoom, minZoom, zRange, modelMatrix, modelMatrixInverse}) {\n const {tileSize, extent, zoomOffset} = this.opts;\n return getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n tileSize,\n extent,\n modelMatrix,\n modelMatrixInverse,\n zoomOffset\n });\n }\n\n // Add custom metadata to tiles\n getTileMetadata({x, y, z}) {\n const {tileSize} = this.opts;\n return {bbox: tileToBoundingBox(this._viewport, x, y, z, tileSize)};\n }\n\n // Returns {x, y, z} of the parent tile\n getParentIndex(tileIndex) {\n // Perf: mutate the input object to avoid GC\n tileIndex.x = Math.floor(tileIndex.x / 2);\n tileIndex.y = Math.floor(tileIndex.y / 2);\n tileIndex.z -= 1;\n return tileIndex;\n }\n\n // Returns true if any tile's visibility changed\n updateTileStates() {\n const refinementStrategy = this.opts.refinementStrategy || STRATEGY_DEFAULT;\n\n const visibilities = new Array(this._cache.size);\n let i = 0;\n // Reset state\n for (const tile of this._cache.values()) {\n // save previous state\n visibilities[i++] = tile.isVisible;\n tile.isSelected = false;\n tile.isVisible = false;\n }\n for (const tile of this._selectedTiles) {\n tile.isSelected = true;\n tile.isVisible = true;\n }\n\n // Strategy-specific state logic\n (typeof refinementStrategy === 'function'\n ? refinementStrategy\n : STRATEGIES[refinementStrategy])(Array.from(this._cache.values()));\n\n i = 0;\n // Check if any visibility has changed\n for (const tile of this._cache.values()) {\n if (visibilities[i++] !== tile.isVisible) {\n return true;\n }\n }\n\n return false;\n }\n\n /* Private methods */\n\n _pruneRequests() {\n const {maxRequests} = this.opts;\n\n const abortCandidates = [];\n let ongoingRequestCount = 0;\n for (const tile of this._cache.values()) {\n // Keep track of all the ongoing requests\n if (tile.isLoading) {\n ongoingRequestCount++;\n if (!tile.isSelected && !tile.isVisible) {\n abortCandidates.push(tile);\n }\n }\n }\n\n while (maxRequests > 0 && ongoingRequestCount > maxRequests && abortCandidates.length > 0) {\n // There are too many ongoing requests, so abort some that are unselected\n const tile = abortCandidates.shift();\n tile.abort();\n ongoingRequestCount--;\n }\n }\n\n // This needs to be called every time some tiles have been added/removed from cache\n _rebuildTree() {\n const {_cache} = this;\n\n // Reset states\n for (const tile of _cache.values()) {\n tile.parent = null;\n tile.children.length = 0;\n }\n\n // Rebuild tree\n for (const tile of _cache.values()) {\n const parent = this._getNearestAncestor(tile.x, tile.y, tile.z);\n tile.parent = parent;\n if (parent) {\n parent.children.push(tile);\n }\n }\n }\n\n /**\n * Clear tiles that are not visible when the cache is full\n */\n /* eslint-disable complexity */\n _resizeCache() {\n const {_cache, opts} = this;\n\n const maxCacheSize =\n opts.maxCacheSize ||\n (opts.maxCacheByteSize ? Infinity : DEFAULT_CACHE_SCALE * this.selectedTiles.length);\n const maxCacheByteSize = opts.maxCacheByteSize || Infinity;\n\n const overflown = _cache.size > maxCacheSize || this._cacheByteSize > maxCacheByteSize;\n\n if (overflown) {\n for (const [tileId, tile] of _cache) {\n if (!tile.isVisible) {\n // delete tile\n this._cacheByteSize -= opts.maxCacheByteSize ? tile.byteLength : 0;\n _cache.delete(tileId);\n this.opts.onTileUnload(tile);\n }\n if (_cache.size <= maxCacheSize && this._cacheByteSize <= maxCacheByteSize) {\n break;\n }\n }\n this._rebuildTree();\n this._dirty = true;\n }\n if (this._dirty) {\n this._tiles = Array.from(this._cache.values())\n // sort by zoom level so that smaller tiles are displayed on top\n .sort((t1, t2) => t1.z - t2.z);\n\n this._dirty = false;\n }\n }\n /* eslint-enable complexity */\n\n _getTile({x, y, z}, create) {\n const tileId = `${x},${y},${z}`;\n let tile = this._cache.get(tileId);\n let needsReload = false;\n\n if (!tile && create) {\n tile = new Tile2DHeader({x, y, z});\n Object.assign(tile, this.getTileMetadata(tile));\n needsReload = true;\n this._cache.set(tileId, tile);\n this._dirty = true;\n } else if (tile && tile.needsReload) {\n needsReload = true;\n }\n if (needsReload) {\n tile.loadData({\n getData: this.opts.getTileData,\n requestScheduler: this._requestScheduler,\n onLoad: this.onTileLoad,\n onError: this.opts.onTileError\n });\n }\n\n return tile;\n }\n\n _getNearestAncestor(x, y, z) {\n const {_minZoom = 0} = this;\n let index = {x, y, z};\n\n while (index.z > _minZoom) {\n index = this.getParentIndex(index);\n const parent = this._getTile(index);\n if (parent) {\n return parent;\n }\n }\n return null;\n }\n}\n\n/* -- Refinement strategies --*/\n/* eslint-disable max-depth */\n\n// For all the selected && pending tiles:\n// - pick the closest ancestor as placeholder\n// - if no ancestor is visible, pick the closest children as placeholder\nfunction updateTileStateDefault(allTiles) {\n for (const tile of allTiles) {\n tile.state = 0;\n }\n for (const tile of allTiles) {\n if (tile.isSelected && !getPlaceholderInAncestors(tile)) {\n getPlaceholderInChildren(tile);\n }\n }\n for (const tile of allTiles) {\n tile.isVisible = Boolean(tile.state & TILE_STATE_VISIBLE);\n }\n}\n\n// Until a selected tile and all its selected siblings are loaded, use the closest ancestor as placeholder\nfunction updateTileStateReplace(allTiles) {\n for (const tile of allTiles) {\n tile.state = 0;\n }\n for (const tile of allTiles) {\n if (tile.isSelected) {\n getPlaceholderInAncestors(tile);\n }\n }\n // Always process parents first\n const sortedTiles = Array.from(allTiles).sort((t1, t2) => t1.z - t2.z);\n for (const tile of sortedTiles) {\n tile.isVisible = Boolean(tile.state & TILE_STATE_VISIBLE);\n\n if (tile.isVisible || tile.state & TILE_STATE_VISITED) {\n // If the tile is rendered, or if the tile has been explicitly hidden, hide all of its children\n for (const child of tile.children) {\n child.state = TILE_STATE_VISITED;\n }\n } else if (tile.isSelected) {\n getPlaceholderInChildren(tile);\n }\n }\n}\n\n// Walk up the tree until we find one ancestor that is loaded. Returns true if successful.\nfunction getPlaceholderInAncestors(tile) {\n while (tile) {\n if (tile.isLoaded || tile.content) {\n tile.state |= TILE_STATE_VISIBLE;\n return true;\n }\n tile = tile.parent;\n }\n return false;\n}\n\n// Recursively set children as placeholder\nfunction getPlaceholderInChildren(tile) {\n for (const child of tile.children) {\n if (child.isLoaded || child.content) {\n child.state |= TILE_STATE_VISIBLE;\n } else {\n getPlaceholderInChildren(child);\n }\n }\n}\n"],"file":"tileset-2d.js"}