@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.
Files changed (62) hide show
  1. package/dist/dist.dev.js +62999 -30700
  2. package/dist/es5/geo-cell-layer/GeoCellLayer.js +3 -3
  3. package/dist/es5/geo-cell-layer/GeoCellLayer.js.map +1 -1
  4. package/dist/es5/index.js +8 -0
  5. package/dist/es5/index.js.map +1 -1
  6. package/dist/es5/mvt-layer/mvt-layer.js +19 -19
  7. package/dist/es5/mvt-layer/mvt-layer.js.map +1 -1
  8. package/dist/es5/quadkey-layer/quadkey-layer.js +4 -2
  9. package/dist/es5/quadkey-layer/quadkey-layer.js.map +1 -1
  10. package/dist/es5/quadkey-layer/quadkey-utils.js.map +1 -1
  11. package/dist/es5/tile-3d-layer/tile-3d-layer.js +13 -10
  12. package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +1 -1
  13. package/dist/es5/tile-layer/tile-2d-header.js +36 -17
  14. package/dist/es5/tile-layer/tile-2d-header.js.map +1 -1
  15. package/dist/es5/tile-layer/tile-2d-traversal.js +13 -3
  16. package/dist/es5/tile-layer/tile-2d-traversal.js.map +1 -1
  17. package/dist/es5/tile-layer/tile-layer.js +38 -32
  18. package/dist/es5/tile-layer/tile-layer.js.map +1 -1
  19. package/dist/es5/tile-layer/tileset-2d.js +122 -96
  20. package/dist/es5/tile-layer/tileset-2d.js.map +1 -1
  21. package/dist/es5/tile-layer/types.js +2 -0
  22. package/dist/es5/tile-layer/types.js.map +1 -0
  23. package/dist/es5/tile-layer/utils.js +27 -9
  24. package/dist/es5/tile-layer/utils.js.map +1 -1
  25. package/dist/esm/geo-cell-layer/GeoCellLayer.js +6 -3
  26. package/dist/esm/geo-cell-layer/GeoCellLayer.js.map +1 -1
  27. package/dist/esm/index.js +1 -0
  28. package/dist/esm/index.js.map +1 -1
  29. package/dist/esm/mvt-layer/mvt-layer.js +17 -17
  30. package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
  31. package/dist/esm/quadkey-layer/quadkey-layer.js +5 -2
  32. package/dist/esm/quadkey-layer/quadkey-layer.js.map +1 -1
  33. package/dist/esm/quadkey-layer/quadkey-utils.js.map +1 -1
  34. package/dist/esm/tile-3d-layer/tile-3d-layer.js +8 -7
  35. package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +1 -1
  36. package/dist/esm/tile-layer/tile-2d-header.js +54 -18
  37. package/dist/esm/tile-layer/tile-2d-header.js.map +1 -1
  38. package/dist/esm/tile-layer/tile-2d-traversal.js +17 -3
  39. package/dist/esm/tile-layer/tile-2d-traversal.js.map +1 -1
  40. package/dist/esm/tile-layer/tile-layer.js +23 -17
  41. package/dist/esm/tile-layer/tile-layer.js.map +1 -1
  42. package/dist/esm/tile-layer/tileset-2d.js +88 -54
  43. package/dist/esm/tile-layer/tileset-2d.js.map +1 -1
  44. package/dist/esm/tile-layer/types.js +2 -0
  45. package/dist/esm/tile-layer/types.js.map +1 -0
  46. package/dist/esm/tile-layer/utils.js +26 -11
  47. package/dist/esm/tile-layer/utils.js.map +1 -1
  48. package/dist.min.js +2 -2
  49. package/package.json +11 -11
  50. package/src/geo-cell-layer/{GeoCellLayer.js → GeoCellLayer.ts} +14 -10
  51. package/src/index.ts +6 -0
  52. package/src/mvt-layer/mvt-layer.js +11 -10
  53. package/src/quadkey-layer/quadkey-layer.ts +39 -0
  54. package/src/quadkey-layer/{quadkey-utils.js → quadkey-utils.ts} +2 -2
  55. package/src/tile-3d-layer/tile-3d-layer.js +6 -5
  56. package/src/tile-layer/{tile-2d-header.js → tile-2d-header.ts} +50 -16
  57. package/src/tile-layer/{tile-2d-traversal.js → tile-2d-traversal.ts} +49 -12
  58. package/src/tile-layer/{tile-layer.js → tile-layer.ts} +153 -31
  59. package/src/tile-layer/{tileset-2d.js → tileset-2d.ts} +143 -66
  60. package/src/tile-layer/types.ts +17 -0
  61. package/src/tile-layer/{utils.js → utils.ts} +67 -25
  62. package/src/quadkey-layer/quadkey-layer.js +0 -22
@@ -23,6 +23,8 @@ var _loaderUtils = require("@loaders.gl/loader-utils");
23
23
 
24
24
  var _core = require("@math.gl/core");
25
25
 
26
+ var _core2 = require("@deck.gl/core");
27
+
26
28
  var _STRATEGIES;
27
29
 
28
30
  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; } } }; }
@@ -47,6 +49,20 @@ var Tileset2D = function () {
47
49
  var _this = this;
48
50
 
49
51
  (0, _classCallCheck2.default)(this, Tileset2D);
52
+ (0, _defineProperty2.default)(this, "opts", void 0);
53
+ (0, _defineProperty2.default)(this, "_requestScheduler", void 0);
54
+ (0, _defineProperty2.default)(this, "_cache", void 0);
55
+ (0, _defineProperty2.default)(this, "_dirty", void 0);
56
+ (0, _defineProperty2.default)(this, "_tiles", void 0);
57
+ (0, _defineProperty2.default)(this, "_cacheByteSize", void 0);
58
+ (0, _defineProperty2.default)(this, "_viewport", void 0);
59
+ (0, _defineProperty2.default)(this, "_selectedTiles", void 0);
60
+ (0, _defineProperty2.default)(this, "_frameNumber", void 0);
61
+ (0, _defineProperty2.default)(this, "_modelMatrix", void 0);
62
+ (0, _defineProperty2.default)(this, "_modelMatrixInverse", void 0);
63
+ (0, _defineProperty2.default)(this, "_maxZoom", void 0);
64
+ (0, _defineProperty2.default)(this, "_minZoom", void 0);
65
+ (0, _defineProperty2.default)(this, "onTileLoad", void 0);
50
66
  this.opts = opts;
51
67
 
52
68
  this.onTileLoad = function (tile) {
@@ -88,14 +104,14 @@ var Tileset2D = function () {
88
104
  }, {
89
105
  key: "isLoaded",
90
106
  get: function get() {
91
- return this._selectedTiles.every(function (tile) {
107
+ return this._selectedTiles !== null && this._selectedTiles.every(function (tile) {
92
108
  return tile.isLoaded;
93
109
  });
94
110
  }
95
111
  }, {
96
112
  key: "needsReload",
97
113
  get: function get() {
98
- return this._selectedTiles.some(function (tile) {
114
+ return this._selectedTiles !== null && this._selectedTiles.some(function (tile) {
99
115
  return tile.needsReload;
100
116
  });
101
117
  }
@@ -120,10 +136,10 @@ var Tileset2D = function () {
120
136
 
121
137
  try {
122
138
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
123
- var tile = _step.value;
139
+ var _tile = _step.value;
124
140
 
125
- if (tile.isLoading) {
126
- tile.abort();
141
+ if (_tile.isLoading) {
142
+ _tile.abort();
127
143
  }
128
144
  }
129
145
  } catch (err) {
@@ -145,14 +161,14 @@ var Tileset2D = function () {
145
161
 
146
162
  try {
147
163
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
148
- var tileId = _step2.value;
164
+ var id = _step2.value;
149
165
 
150
- var tile = this._cache.get(tileId);
166
+ var _tile2 = this._cache.get(id);
151
167
 
152
- if (!this._selectedTiles.includes(tile)) {
153
- this._cache.delete(tileId);
168
+ if (!this._selectedTiles || !this._selectedTiles.includes(_tile2)) {
169
+ this._cache.delete(id);
154
170
  } else {
155
- tile.setNeedsReload();
171
+ _tile2.setNeedsReload();
156
172
  }
157
173
  }
158
174
  } catch (err) {
@@ -173,7 +189,7 @@ var Tileset2D = function () {
173
189
  var modelMatrixAsMatrix4 = new _core.Matrix4(modelMatrix);
174
190
  var isModelMatrixNew = !modelMatrixAsMatrix4.equals(this._modelMatrix);
175
191
 
176
- if (!viewport.equals(this._viewport) || isModelMatrixNew) {
192
+ if (!this._viewport || !viewport.equals(this._viewport) || isModelMatrixNew) {
177
193
  if (isModelMatrixNew) {
178
194
  this._modelMatrixInverse = modelMatrixAsMatrix4.clone().invert();
179
195
  this._modelMatrix = modelMatrixAsMatrix4;
@@ -197,11 +213,7 @@ var Tileset2D = function () {
197
213
  }
198
214
  } else if (this.needsReload) {
199
215
  this._selectedTiles = this._selectedTiles.map(function (tile) {
200
- return _this2._getTile({
201
- x: tile.x,
202
- y: tile.y,
203
- z: tile.z
204
- });
216
+ return _this2._getTile(tile.index);
205
217
  });
206
218
  }
207
219
 
@@ -244,28 +256,41 @@ var Tileset2D = function () {
244
256
  zoomOffset: zoomOffset
245
257
  });
246
258
  }
259
+ }, {
260
+ key: "getTileId",
261
+ value: function getTileId(index) {
262
+ return "".concat(index.x, "-").concat(index.y, "-").concat(index.z);
263
+ }
264
+ }, {
265
+ key: "getTileZoom",
266
+ value: function getTileZoom(index) {
267
+ return index.z;
268
+ }
247
269
  }, {
248
270
  key: "getTileMetadata",
249
- value: function getTileMetadata(_ref3) {
250
- var x = _ref3.x,
251
- y = _ref3.y,
252
- z = _ref3.z;
271
+ value: function getTileMetadata(index) {
272
+ (0, _core2.assert)(this._viewport);
253
273
  var tileSize = this.opts.tileSize;
254
274
  return {
255
- bbox: (0, _utils.tileToBoundingBox)(this._viewport, x, y, z, tileSize)
275
+ bbox: (0, _utils.tileToBoundingBox)(this._viewport, index.x, index.y, index.z, tileSize)
256
276
  };
257
277
  }
258
278
  }, {
259
279
  key: "getParentIndex",
260
- value: function getParentIndex(tileIndex) {
261
- tileIndex.x = Math.floor(tileIndex.x / 2);
262
- tileIndex.y = Math.floor(tileIndex.y / 2);
263
- tileIndex.z -= 1;
264
- return tileIndex;
280
+ value: function getParentIndex(index) {
281
+ var x = Math.floor(index.x / 2);
282
+ var y = Math.floor(index.y / 2);
283
+ var z = index.z - 1;
284
+ return {
285
+ x: x,
286
+ y: y,
287
+ z: z
288
+ };
265
289
  }
266
290
  }, {
267
291
  key: "updateTileStates",
268
292
  value: function updateTileStates() {
293
+ (0, _core2.assert)(this._selectedTiles);
269
294
  var refinementStrategy = this.opts.refinementStrategy || STRATEGY_DEFAULT;
270
295
  var visibilities = new Array(this._cache.size);
271
296
  var i = 0;
@@ -275,10 +300,10 @@ var Tileset2D = function () {
275
300
 
276
301
  try {
277
302
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
278
- var tile = _step3.value;
279
- visibilities[i++] = tile.isVisible;
280
- tile.isSelected = false;
281
- tile.isVisible = false;
303
+ var _tile3 = _step3.value;
304
+ visibilities[i++] = _tile3.isVisible;
305
+ _tile3.isSelected = false;
306
+ _tile3.isVisible = false;
282
307
  }
283
308
  } catch (err) {
284
309
  _iterator3.e(err);
@@ -291,9 +316,9 @@ var Tileset2D = function () {
291
316
 
292
317
  try {
293
318
  for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
294
- var _tile = _step4.value;
295
- _tile.isSelected = true;
296
- _tile.isVisible = true;
319
+ var _tile4 = _step4.value;
320
+ _tile4.isSelected = true;
321
+ _tile4.isVisible = true;
297
322
  }
298
323
  } catch (err) {
299
324
  _iterator4.e(err);
@@ -309,9 +334,9 @@ var Tileset2D = function () {
309
334
 
310
335
  try {
311
336
  for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
312
- var _tile2 = _step5.value;
337
+ var _tile5 = _step5.value;
313
338
 
314
- if (visibilities[i++] !== _tile2.isVisible) {
339
+ if (visibilities[i++] !== _tile5.isVisible) {
315
340
  return true;
316
341
  }
317
342
  }
@@ -335,13 +360,13 @@ var Tileset2D = function () {
335
360
 
336
361
  try {
337
362
  for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
338
- var _tile3 = _step6.value;
363
+ var _tile7 = _step6.value;
339
364
 
340
- if (_tile3.isLoading) {
365
+ if (_tile7.isLoading) {
341
366
  ongoingRequestCount++;
342
367
 
343
- if (!_tile3.isSelected && !_tile3.isVisible) {
344
- abortCandidates.push(_tile3);
368
+ if (!_tile7.isSelected && !_tile7.isVisible) {
369
+ abortCandidates.push(_tile7);
345
370
  }
346
371
  }
347
372
  }
@@ -352,8 +377,10 @@ var Tileset2D = function () {
352
377
  }
353
378
 
354
379
  while (maxRequests > 0 && ongoingRequestCount > maxRequests && abortCandidates.length > 0) {
355
- var tile = abortCandidates.shift();
356
- tile.abort();
380
+ var _tile6 = abortCandidates.shift();
381
+
382
+ _tile6.abort();
383
+
357
384
  ongoingRequestCount--;
358
385
  }
359
386
  }
@@ -367,9 +394,12 @@ var Tileset2D = function () {
367
394
 
368
395
  try {
369
396
  for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
370
- var tile = _step7.value;
371
- tile.parent = null;
372
- tile.children.length = 0;
397
+ var _tile8 = _step7.value;
398
+ _tile8.parent = null;
399
+
400
+ if (_tile8.children) {
401
+ _tile8.children.length = 0;
402
+ }
373
403
  }
374
404
  } catch (err) {
375
405
  _iterator7.e(err);
@@ -382,14 +412,14 @@ var Tileset2D = function () {
382
412
 
383
413
  try {
384
414
  for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
385
- var _tile4 = _step8.value;
415
+ var _tile9 = _step8.value;
386
416
 
387
- var parent = this._getNearestAncestor(_tile4.x, _tile4.y, _tile4.z);
417
+ var parent = this._getNearestAncestor(_tile9);
388
418
 
389
- _tile4.parent = parent;
419
+ _tile9.parent = parent;
390
420
 
391
- if (parent) {
392
- parent.children.push(_tile4);
421
+ if (parent !== null && parent !== void 0 && parent.children) {
422
+ parent.children.push(_tile9);
393
423
  }
394
424
  }
395
425
  } catch (err) {
@@ -401,6 +431,7 @@ var Tileset2D = function () {
401
431
  }, {
402
432
  key: "_resizeCache",
403
433
  value: function _resizeCache() {
434
+ (0, _core2.assert)(this.selectedTiles);
404
435
  var _cache = this._cache,
405
436
  opts = this.opts;
406
437
  var maxCacheSize = opts.maxCacheSize || (opts.maxCacheByteSize ? Infinity : DEFAULT_CACHE_SCALE * this.selectedTiles.length);
@@ -414,15 +445,15 @@ var Tileset2D = function () {
414
445
  try {
415
446
  for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
416
447
  var _step9$value = (0, _slicedToArray2.default)(_step9.value, 2),
417
- tileId = _step9$value[0],
418
- tile = _step9$value[1];
448
+ id = _step9$value[0],
449
+ _tile10 = _step9$value[1];
419
450
 
420
- if (!tile.isVisible) {
421
- this._cacheByteSize -= opts.maxCacheByteSize ? tile.byteLength : 0;
451
+ if (!_tile10.isVisible) {
452
+ this._cacheByteSize -= opts.maxCacheByteSize ? _tile10.byteLength : 0;
422
453
 
423
- _cache.delete(tileId);
454
+ _cache.delete(id);
424
455
 
425
- this.opts.onTileUnload(tile);
456
+ this.opts.onTileUnload(_tile10);
426
457
  }
427
458
 
428
459
  if (_cache.size <= maxCacheSize && this._cacheByteSize <= maxCacheByteSize) {
@@ -442,40 +473,37 @@ var Tileset2D = function () {
442
473
 
443
474
  if (this._dirty) {
444
475
  this._tiles = Array.from(this._cache.values()).sort(function (t1, t2) {
445
- return t1.z - t2.z;
476
+ return t1.zoom - t2.zoom;
446
477
  });
447
478
  this._dirty = false;
448
479
  }
449
480
  }
450
481
  }, {
451
482
  key: "_getTile",
452
- value: function _getTile(_ref4, create) {
453
- var x = _ref4.x,
454
- y = _ref4.y,
455
- z = _ref4.z;
456
- var tileId = "".concat(x, ",").concat(y, ",").concat(z);
483
+ value: function _getTile(index, create) {
484
+ var id = this.getTileId(index);
457
485
 
458
- var tile = this._cache.get(tileId);
486
+ var tile = this._cache.get(id);
459
487
 
460
488
  var needsReload = false;
461
489
 
462
490
  if (!tile && create) {
463
- tile = new _tile2dHeader.default({
464
- x: x,
465
- y: y,
466
- z: z
491
+ tile = new _tile2dHeader.default(index);
492
+ Object.assign(tile, this.getTileMetadata(tile.index));
493
+ Object.assign(tile, {
494
+ id: id,
495
+ zoom: this.getTileZoom(tile.index)
467
496
  });
468
- Object.assign(tile, this.getTileMetadata(tile));
469
497
  needsReload = true;
470
498
 
471
- this._cache.set(tileId, tile);
499
+ this._cache.set(id, tile);
472
500
 
473
501
  this._dirty = true;
474
502
  } else if (tile && tile.needsReload) {
475
503
  needsReload = true;
476
504
  }
477
505
 
478
- if (needsReload) {
506
+ if (tile && needsReload) {
479
507
  tile.loadData({
480
508
  getData: this.opts.getTileData,
481
509
  requestScheduler: this._requestScheduler,
@@ -488,17 +516,13 @@ var Tileset2D = function () {
488
516
  }
489
517
  }, {
490
518
  key: "_getNearestAncestor",
491
- value: function _getNearestAncestor(x, y, z) {
519
+ value: function _getNearestAncestor(tile) {
492
520
  var _this$_minZoom = this._minZoom,
493
521
  _minZoom = _this$_minZoom === void 0 ? 0 : _this$_minZoom;
494
522
 
495
- var index = {
496
- x: x,
497
- y: y,
498
- z: z
499
- };
523
+ var index = tile.index;
500
524
 
501
- while (index.z > _minZoom) {
525
+ while (this.getTileZoom(index) > _minZoom) {
502
526
  index = this.getParentIndex(index);
503
527
 
504
528
  var parent = this._getTile(index);
@@ -522,8 +546,8 @@ function updateTileStateDefault(allTiles) {
522
546
 
523
547
  try {
524
548
  for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
525
- var tile = _step10.value;
526
- tile.state = 0;
549
+ var _tile11 = _step10.value;
550
+ _tile11.state = 0;
527
551
  }
528
552
  } catch (err) {
529
553
  _iterator10.e(err);
@@ -536,10 +560,10 @@ function updateTileStateDefault(allTiles) {
536
560
 
537
561
  try {
538
562
  for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
539
- var _tile5 = _step11.value;
563
+ var _tile12 = _step11.value;
540
564
 
541
- if (_tile5.isSelected && !getPlaceholderInAncestors(_tile5)) {
542
- getPlaceholderInChildren(_tile5);
565
+ if (_tile12.isSelected && !getPlaceholderInAncestors(_tile12)) {
566
+ getPlaceholderInChildren(_tile12);
543
567
  }
544
568
  }
545
569
  } catch (err) {
@@ -553,8 +577,8 @@ function updateTileStateDefault(allTiles) {
553
577
 
554
578
  try {
555
579
  for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
556
- var _tile6 = _step12.value;
557
- _tile6.isVisible = Boolean(_tile6.state & TILE_STATE_VISIBLE);
580
+ var _tile13 = _step12.value;
581
+ _tile13.isVisible = Boolean(_tile13.state & TILE_STATE_VISIBLE);
558
582
  }
559
583
  } catch (err) {
560
584
  _iterator12.e(err);
@@ -569,8 +593,8 @@ function updateTileStateReplace(allTiles) {
569
593
 
570
594
  try {
571
595
  for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
572
- var tile = _step13.value;
573
- tile.state = 0;
596
+ var _tile14 = _step13.value;
597
+ _tile14.state = 0;
574
598
  }
575
599
  } catch (err) {
576
600
  _iterator13.e(err);
@@ -583,10 +607,10 @@ function updateTileStateReplace(allTiles) {
583
607
 
584
608
  try {
585
609
  for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
586
- var _tile7 = _step14.value;
610
+ var _tile15 = _step14.value;
587
611
 
588
- if (_tile7.isSelected) {
589
- getPlaceholderInAncestors(_tile7);
612
+ if (_tile15.isSelected) {
613
+ getPlaceholderInAncestors(_tile15);
590
614
  }
591
615
  }
592
616
  } catch (err) {
@@ -596,7 +620,7 @@ function updateTileStateReplace(allTiles) {
596
620
  }
597
621
 
598
622
  var sortedTiles = Array.from(allTiles).sort(function (t1, t2) {
599
- return t1.z - t2.z;
623
+ return t1.zoom - t2.zoom;
600
624
  });
601
625
 
602
626
  var _iterator15 = _createForOfIteratorHelper(sortedTiles),
@@ -604,11 +628,11 @@ function updateTileStateReplace(allTiles) {
604
628
 
605
629
  try {
606
630
  for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
607
- var _tile8 = _step15.value;
608
- _tile8.isVisible = Boolean(_tile8.state & TILE_STATE_VISIBLE);
631
+ var _tile16 = _step15.value;
632
+ _tile16.isVisible = Boolean(_tile16.state & TILE_STATE_VISIBLE);
609
633
 
610
- if (_tile8.isVisible || _tile8.state & TILE_STATE_VISITED) {
611
- var _iterator16 = _createForOfIteratorHelper(_tile8.children),
634
+ if (_tile16.children && (_tile16.isVisible || _tile16.state & TILE_STATE_VISITED)) {
635
+ var _iterator16 = _createForOfIteratorHelper(_tile16.children),
612
636
  _step16;
613
637
 
614
638
  try {
@@ -621,8 +645,8 @@ function updateTileStateReplace(allTiles) {
621
645
  } finally {
622
646
  _iterator16.f();
623
647
  }
624
- } else if (_tile8.isSelected) {
625
- getPlaceholderInChildren(_tile8);
648
+ } else if (_tile16.isSelected) {
649
+ getPlaceholderInChildren(_tile16);
626
650
  }
627
651
  }
628
652
  } catch (err) {
@@ -632,7 +656,9 @@ function updateTileStateReplace(allTiles) {
632
656
  }
633
657
  }
634
658
 
635
- function getPlaceholderInAncestors(tile) {
659
+ function getPlaceholderInAncestors(startTile) {
660
+ var tile = startTile;
661
+
636
662
  while (tile) {
637
663
  if (tile.isLoaded || tile.content) {
638
664
  tile.state |= TILE_STATE_VISIBLE;
@@ -1 +1 @@
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","_modelMatrix","Matrix4","_modelMatrixInverse","setOptions","every","isLoaded","some","needsReload","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","isModelMatrixNew","equals","clone","invert","tileIndices","getTileIndices","modelMatrixInverse","map","index","_getTile","_rebuildTree","x","y","z","changed","updateTileStates","_pruneRequests","tileSize","extent","zoomOffset","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","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._modelMatrix = new Matrix4();\n this._modelMatrixInverse = new Matrix4();\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 get needsReload() {\n return this._selectedTiles.some(tile => tile.needsReload);\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 = modelMatrixAsMatrix4.clone().invert();\n this._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 // Check for needed reloads explicitly even if the view/matrix has not changed.\n } else if (this.needsReload) {\n this._selectedTiles = this._selectedTiles.map(tile =>\n this._getTile({x: tile.x, y: tile.y, z: tile.z})\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"}
1
+ {"version":3,"sources":["../../../src/tile-layer/tileset-2d.ts"],"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","_modelMatrix","Matrix4","_modelMatrixInverse","setOptions","every","isLoaded","some","needsReload","Object","assign","Number","isFinite","maxZoom","_maxZoom","Math","floor","minZoom","_minZoom","ceil","values","isLoading","abort","clear","keys","id","get","includes","delete","setNeedsReload","viewport","zRange","modelMatrix","modelMatrixAsMatrix4","isModelMatrixNew","equals","clone","invert","tileIndices","getTileIndices","modelMatrixInverse","map","index","_getTile","_rebuildTree","changed","updateTileStates","_pruneRequests","tileSize","extent","zoomOffset","x","y","z","bbox","refinementStrategy","visibilities","Array","size","i","isVisible","isSelected","from","abortCandidates","ongoingRequestCount","push","length","shift","parent","children","_getNearestAncestor","selectedTiles","maxCacheSize","Infinity","overflown","onTileUnload","sort","t1","t2","zoom","create","getTileId","Tile2DHeader","getTileMetadata","getTileZoom","set","loadData","getData","getTileData","requestScheduler","onLoad","onError","onTileError","getParentIndex","allTiles","state","getPlaceholderInAncestors","getPlaceholderInChildren","Boolean","sortedTiles","child","startTile","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';\nimport {assert, Viewport} from '@deck.gl/core';\nimport {Bounds, TileIndex, ZRange} from './types';\nimport {TileLayerProps} from './tile-layer';\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\nexport type RefinementStrategyFunction = (tiles: Tile2DHeader[]) => void;\nexport type RefinementStrategy =\n | typeof STRATEGY_NEVER\n | typeof STRATEGY_REPLACE\n | typeof STRATEGY_DEFAULT\n | RefinementStrategyFunction;\n\nconst DEFAULT_CACHE_SCALE = 5;\n\nconst STRATEGIES = {\n [STRATEGY_DEFAULT]: updateTileStateDefault,\n [STRATEGY_REPLACE]: updateTileStateReplace,\n [STRATEGY_NEVER]: () => {}\n};\n\nexport type Tileset2DProps = Pick<\n TileLayerProps,\n | 'getTileData'\n | 'tileSize'\n | 'maxCacheSize'\n | 'maxCacheByteSize'\n | 'refinementStrategy'\n | 'extent'\n | 'maxZoom'\n | 'minZoom'\n | 'maxRequests'\n | 'zoomOffset'\n> & {\n onTileLoad: (tile: Tile2DHeader) => void;\n onTileUnload: (tile: Tile2DHeader) => void;\n onTileError: (error: any, tile: Tile2DHeader) => void;\n};\n\n/**\n * Manages loading and purging of tile data. This class caches recently visited tiles\n * and only creates new tiles if they are present.\n */\nexport default class Tileset2D {\n private opts: Tileset2DProps;\n private _requestScheduler: RequestScheduler;\n private _cache: Map<string, Tile2DHeader>;\n private _dirty: boolean;\n private _tiles: Tile2DHeader[];\n\n private _cacheByteSize: number;\n private _viewport: Viewport | null;\n private _selectedTiles: Tile2DHeader[] | null;\n private _frameNumber: number;\n private _modelMatrix: Matrix4;\n private _modelMatrixInverse: Matrix4;\n\n private _maxZoom?: number;\n private _minZoom?: number;\n\n private onTileLoad: (tile: Tile2DHeader) => void;\n\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: Tileset2DProps) {\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._modelMatrix = new Matrix4();\n this._modelMatrixInverse = new Matrix4();\n\n this.setOptions(opts);\n }\n\n /* Public API */\n get tiles() {\n return this._tiles;\n }\n\n get selectedTiles(): Tile2DHeader[] | null {\n return this._selectedTiles;\n }\n\n get isLoaded(): boolean {\n return this._selectedTiles !== null && this._selectedTiles.every(tile => tile.isLoaded);\n }\n\n get needsReload(): boolean {\n return this._selectedTiles !== null && this._selectedTiles.some(tile => tile.needsReload);\n }\n\n setOptions(opts: Tileset2DProps): void {\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(): void {\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(): void {\n for (const id of this._cache.keys()) {\n const tile = this._cache.get(id) as Tile2DHeader;\n if (!this._selectedTiles || !this._selectedTiles.includes(tile)) {\n this._cache.delete(id);\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 */\n update(\n viewport: Viewport,\n {zRange, modelMatrix}: {zRange?: ZRange; modelMatrix?: Matrix4} = {}\n ): number {\n const modelMatrixAsMatrix4 = new Matrix4(modelMatrix);\n const isModelMatrixNew = !modelMatrixAsMatrix4.equals(this._modelMatrix);\n if (!this._viewport || !viewport.equals(this._viewport) || isModelMatrixNew) {\n if (isModelMatrixNew) {\n this._modelMatrixInverse = modelMatrixAsMatrix4.clone().invert();\n this._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 // Check for needed reloads explicitly even if the view/matrix has not changed.\n } else if (this.needsReload) {\n this._selectedTiles = this._selectedTiles!.map(tile => this._getTile(tile.index));\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 tile indices in the current viewport */\n getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n modelMatrix,\n modelMatrixInverse\n }: {\n viewport: Viewport;\n maxZoom?: number;\n minZoom?: number;\n zRange: ZRange | undefined;\n tileSize?: number;\n modelMatrix?: Matrix4;\n modelMatrixInverse?: Matrix4;\n zoomOffset?: number;\n }): TileIndex[] {\n const {tileSize, extent, zoomOffset} = this.opts;\n return getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n tileSize,\n extent: extent as Bounds | undefined,\n modelMatrix,\n modelMatrixInverse,\n zoomOffset\n });\n }\n\n /** Returns unique string key for a tile index */\n getTileId(index: TileIndex) {\n return `${index.x}-${index.y}-${index.z}`;\n }\n\n /** Returns a zoom level for a tile index */\n getTileZoom(index: TileIndex) {\n return index.z;\n }\n\n /** Returns additional metadata to add to tile, bbox by default */\n getTileMetadata(index: TileIndex) {\n assert(this._viewport);\n const {tileSize} = this.opts;\n return {bbox: tileToBoundingBox(this._viewport, index.x, index.y, index.z, tileSize)};\n }\n\n /** Returns index of the parent tile */\n getParentIndex(index: TileIndex) {\n const x = Math.floor(index.x / 2);\n const y = Math.floor(index.y / 2);\n const z = index.z - 1;\n return {x, y, z};\n }\n\n // Returns true if any tile's visibility changed\n updateTileStates() {\n assert(this._selectedTiles);\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(): void {\n const {maxRequests} = this.opts;\n\n const abortCandidates: Tile2DHeader[] = [];\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 if (tile.children) {\n tile.children.length = 0;\n }\n }\n\n // Rebuild tree\n for (const tile of _cache.values()) {\n const parent = this._getNearestAncestor(tile);\n tile.parent = parent;\n if (parent?.children) {\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 assert(this.selectedTiles);\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 [id, tile] of _cache) {\n if (!tile.isVisible) {\n // delete tile\n this._cacheByteSize -= opts.maxCacheByteSize ? tile.byteLength : 0;\n _cache.delete(id);\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 // sort by zoom level so that smaller tiles are displayed on top\n this._tiles = Array.from(this._cache.values()).sort((t1, t2) => t1.zoom - t2.zoom);\n\n this._dirty = false;\n }\n }\n /* eslint-enable complexity */\n\n _getTile(index: TileIndex, create: true): Tile2DHeader;\n _getTile(index: TileIndex, create?: false): Tile2DHeader | undefined;\n _getTile(index: TileIndex, create?: boolean): Tile2DHeader | undefined {\n const id = this.getTileId(index);\n let tile = this._cache.get(id);\n let needsReload = false;\n\n if (!tile && create) {\n tile = new Tile2DHeader(index);\n Object.assign(tile, this.getTileMetadata(tile.index));\n Object.assign(tile, {id, zoom: this.getTileZoom(tile.index)});\n needsReload = true;\n this._cache.set(id, tile);\n this._dirty = true;\n } else if (tile && tile.needsReload) {\n needsReload = true;\n }\n if (tile && needsReload) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\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(tile: Tile2DHeader): Tile2DHeader | null {\n const {_minZoom = 0} = this;\n\n let index = tile.index;\n while (this.getTileZoom(index) > _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: Tile2DHeader[]) {\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: Tile2DHeader[]) {\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.zoom - t2.zoom);\n for (const tile of sortedTiles) {\n tile.isVisible = Boolean(tile.state! & TILE_STATE_VISIBLE);\n\n if (tile.children && (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(startTile: Tile2DHeader) {\n let tile: Tile2DHeader | null = startTile;\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"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"types.js"}