@deck.gl/geo-layers 8.7.0-alpha.1 → 8.7.0-alpha.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.dev.js +6939 -3749
- package/dist/es5/great-circle-layer/great-circle-layer.js +1 -1
- package/dist/es5/h3-layers/h3-cluster-layer.js +3 -3
- package/dist/es5/h3-layers/h3-cluster-layer.js.map +1 -1
- package/dist/es5/h3-layers/h3-hexagon-layer.js +10 -9
- package/dist/es5/h3-layers/h3-hexagon-layer.js.map +1 -1
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/mesh-layer/mesh-layer-vertex.glsl.js +1 -1
- package/dist/es5/mesh-layer/mesh-layer.js +5 -10
- package/dist/es5/mesh-layer/mesh-layer.js.map +1 -1
- package/dist/es5/mvt-layer/coordinate-transform.js +4 -4
- package/dist/es5/mvt-layer/coordinate-transform.js.map +1 -1
- package/dist/es5/mvt-layer/find-index-binary.js +1 -1
- package/dist/es5/mvt-layer/find-index-binary.js.map +1 -1
- package/dist/es5/mvt-layer/mvt-layer.js +35 -12
- package/dist/es5/mvt-layer/mvt-layer.js.map +1 -1
- package/dist/es5/s2-layer/s2-layer.js +2 -2
- package/dist/es5/s2-layer/s2-layer.js.map +1 -1
- package/dist/es5/s2-layer/s2-utils.js.map +1 -1
- package/dist/es5/terrain-layer/terrain-layer.js +7 -11
- package/dist/es5/terrain-layer/terrain-layer.js.map +1 -1
- package/dist/es5/tile-3d-layer/tile-3d-layer.js +11 -9
- package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +1 -1
- package/dist/es5/tile-layer/tile-2d-header.js +35 -35
- package/dist/es5/tile-layer/tile-2d-header.js.map +1 -1
- package/dist/es5/tile-layer/tile-2d-traversal.js +13 -13
- package/dist/es5/tile-layer/tile-2d-traversal.js.map +1 -1
- package/dist/es5/tile-layer/tile-layer.js +31 -34
- package/dist/es5/tile-layer/tile-layer.js.map +1 -1
- package/dist/es5/tile-layer/tileset-2d.js +215 -141
- package/dist/es5/tile-layer/tileset-2d.js.map +1 -1
- package/dist/es5/tile-layer/utils.js.map +1 -1
- package/dist/es5/trips-layer/trips-layer.js +2 -2
- package/dist/es5/trips-layer/trips-layer.js.map +1 -1
- package/dist/esm/h3-layers/h3-hexagon-layer.js +2 -1
- package/dist/esm/h3-layers/h3-hexagon-layer.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js +1 -1
- package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js.map +1 -1
- package/dist/esm/mesh-layer/mesh-layer.js +2 -8
- package/dist/esm/mesh-layer/mesh-layer.js.map +1 -1
- package/dist/esm/mvt-layer/coordinate-transform.js +1 -1
- package/dist/esm/mvt-layer/coordinate-transform.js.map +1 -1
- package/dist/esm/mvt-layer/mvt-layer.js +27 -1
- package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
- package/dist/esm/s2-layer/s2-utils.js.map +1 -1
- package/dist/esm/terrain-layer/terrain-layer.js +8 -10
- package/dist/esm/terrain-layer/terrain-layer.js.map +1 -1
- package/dist/esm/tile-3d-layer/tile-3d-layer.js +2 -1
- package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +1 -1
- package/dist/esm/tile-layer/tile-2d-header.js.map +1 -1
- package/dist/esm/tile-layer/tile-2d-traversal.js.map +1 -1
- package/dist/esm/tile-layer/tile-layer.js +8 -16
- package/dist/esm/tile-layer/tile-layer.js.map +1 -1
- package/dist/esm/tile-layer/tileset-2d.js +85 -79
- package/dist/esm/tile-layer/tileset-2d.js.map +1 -1
- package/dist.min.js +2 -2
- package/package.json +12 -12
- package/src/h3-layers/h3-hexagon-layer.js +2 -1
- package/src/{index.js → index.ts} +0 -0
- package/src/mesh-layer/mesh-layer-vertex.glsl.js +24 -23
- package/src/mesh-layer/mesh-layer.js +5 -4
- package/src/mvt-layer/coordinate-transform.js +1 -1
- package/src/mvt-layer/mvt-layer.js +17 -1
- package/src/s2-layer/s2-utils.js +7 -1
- package/src/terrain-layer/terrain-layer.js +10 -9
- package/src/tile-3d-layer/tile-3d-layer.js +12 -9
- package/src/tile-layer/tile-2d-traversal.js +17 -3
- package/src/tile-layer/tile-layer.js +11 -12
- package/src/tile-layer/tileset-2d.js +103 -90
|
@@ -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
|
|
24
|
+
var _core = require("@math.gl/core");
|
|
25
|
+
|
|
26
|
+
var _STRATEGIES;
|
|
23
27
|
|
|
24
|
-
function _createForOfIteratorHelper(o, allowArrayLike) { var it
|
|
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
|
|
31
|
-
var TILE_STATE_VISIBLE =
|
|
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
|
|
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.
|
|
232
|
-
|
|
233
|
-
var
|
|
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
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
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
|
-
|
|
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
|
|
288
|
-
|
|
289
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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: "
|
|
320
|
-
value: function
|
|
321
|
-
var
|
|
322
|
-
var
|
|
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
|
|
330
|
-
|
|
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
|
-
|
|
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
|
|
344
|
-
|
|
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
|
-
|
|
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
|
-
|
|
371
|
-
_step9;
|
|
370
|
+
var parent = this._getNearestAncestor(_tile4.x, _tile4.y, _tile4.z);
|
|
372
371
|
|
|
373
|
-
|
|
374
|
-
for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
|
|
375
|
-
var _tile5 = _step9.value;
|
|
372
|
+
_tile4.parent = parent;
|
|
376
373
|
|
|
377
|
-
if (
|
|
378
|
-
|
|
374
|
+
if (parent) {
|
|
375
|
+
parent.children.push(_tile4);
|
|
379
376
|
}
|
|
380
377
|
}
|
|
381
378
|
} catch (err) {
|
|
382
|
-
|
|
379
|
+
_iterator8.e(err);
|
|
383
380
|
} finally {
|
|
384
|
-
|
|
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
|
|
398
|
-
|
|
394
|
+
var _iterator9 = _createForOfIteratorHelper(_cache),
|
|
395
|
+
_step9;
|
|
399
396
|
|
|
400
397
|
try {
|
|
401
|
-
for (
|
|
402
|
-
var
|
|
403
|
-
tileId =
|
|
404
|
-
tile =
|
|
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
|
-
|
|
416
|
+
_iterator9.e(err);
|
|
420
417
|
} finally {
|
|
421
|
-
|
|
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
|
|
523
|
-
var
|
|
502
|
+
function updateTileStateDefault(allTiles) {
|
|
503
|
+
var _iterator10 = _createForOfIteratorHelper(allTiles),
|
|
504
|
+
_step10;
|
|
524
505
|
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
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
|
-
|
|
531
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
541
|
-
var
|
|
542
|
-
|
|
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
|
-
|
|
545
|
-
|
|
546
|
-
|
|
567
|
+
try {
|
|
568
|
+
for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
|
|
569
|
+
var _tile7 = _step14.value;
|
|
547
570
|
|
|
548
|
-
if (
|
|
549
|
-
|
|
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
|
-
|
|
554
|
-
|
|
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
|
|
560
|
-
|
|
632
|
+
var _iterator17 = _createForOfIteratorHelper(tile.children),
|
|
633
|
+
_step17;
|
|
561
634
|
|
|
562
635
|
try {
|
|
563
|
-
for (
|
|
564
|
-
var child =
|
|
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 (
|
|
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
|
-
|
|
646
|
+
_iterator17.e(err);
|
|
573
647
|
} finally {
|
|
574
|
-
|
|
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":";;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;;;AAEA,IAAMA,kBAAkB,GAAG,CAA3B;AACA,IAAMC,kBAAkB,GAAG,CAA3B;AAmBA,IAAMC,sBAAsB,GAAG,CAA/B;AACA,IAAMC,iBAAiB,GAAG,CAA1B;AAEA,IAAMC,mBAAmB,GAAG,CAA5B;AAEO,IAAMC,cAAc,GAAG,OAAvB;;AACA,IAAMC,gBAAgB,GAAG,YAAzB;;AACA,IAAMC,gBAAgB,GAAG,gBAAzB;;AAEP,IAAMC,mBAAmB,GAAG,CAA5B;;IAOqBC,S;AAKnB,qBAAYC,IAAZ,EAAkB;AAAA;;AAAA;AAChB,SAAKA,IAAL,GAAYA,IAAZ;;AAEA,SAAKC,UAAL,GAAkB,UAAAC,IAAI,EAAI;AACxB,MAAA,KAAI,CAACF,IAAL,CAAUC,UAAV,CAAqBC,IAArB;;AACA,UAAI,KAAI,CAACF,IAAL,CAAUG,gBAAd,EAAgC;AAC9B,QAAA,KAAI,CAACC,cAAL,IAAuBF,IAAI,CAACG,UAA5B;;AACA,QAAA,KAAI,CAACC,YAAL;AACD;AACF,KAND;;AAQA,SAAKC,iBAAL,GAAyB,IAAIC,6BAAJ,CAAqB;AAC5CC,MAAAA,WAAW,EAAET,IAAI,CAACS,WAD0B;AAE5CC,MAAAA,gBAAgB,EAAEV,IAAI,CAACS,WAAL,GAAmB;AAFO,KAArB,CAAzB;AAMA,SAAKE,MAAL,GAAc,IAAIC,GAAJ,EAAd;AACA,SAAKC,MAAL,GAAc,EAAd;AACA,SAAKC,MAAL,GAAc,KAAd;AACA,SAAKV,cAAL,GAAsB,CAAtB;AAGA,SAAKW,SAAL,GAAiB,IAAjB;AACA,SAAKC,cAAL,GAAsB,IAAtB;AACA,SAAKC,YAAL,GAAoB,CAApB;AAEA,SAAKC,UAAL,CAAgBlB,IAAhB;AACD;;;;+BAeUA,I,EAAM;AACfmB,MAAAA,MAAM,CAACC,MAAP,CAAc,KAAKpB,IAAnB,EAAyBA,IAAzB;;AACA,UAAIqB,MAAM,CAACC,QAAP,CAAgBtB,IAAI,CAACuB,OAArB,CAAJ,EAAmC;AACjC,aAAKC,QAAL,GAAgBC,IAAI,CAACC,KAAL,CAAW1B,IAAI,CAACuB,OAAhB,CAAhB;AACD;;AACD,UAAIF,MAAM,CAACC,QAAP,CAAgBtB,IAAI,CAAC2B,OAArB,CAAJ,EAAmC;AACjC,aAAKC,QAAL,GAAgBH,IAAI,CAACI,IAAL,CAAU7B,IAAI,CAAC2B,OAAf,CAAhB;AACD;AACF;;;+BAGU;AAAA,iDACU,KAAKhB,MAAL,CAAYmB,MAAZ,EADV;AAAA;;AAAA;AACT,4DAAyC;AAAA,cAA9B5B,IAA8B;;AACvC,cAAIA,IAAI,CAAC6B,SAAT,EAAoB;AAClB7B,YAAAA,IAAI,CAAC8B,KAAL;AACD;AACF;AALQ;AAAA;AAAA;AAAA;AAAA;;AAMT,WAAKrB,MAAL,CAAYsB,KAAZ;;AACA,WAAKpB,MAAL,GAAc,EAAd;AACA,WAAKG,cAAL,GAAsB,IAAtB;AACD;;;gCAEW;AAAA,kDACW,KAAKL,MAAL,CAAYuB,IAAZ,EADX;AAAA;;AAAA;AACV,+DAAyC;AAAA,cAA9BC,MAA8B;;AACvC,cAAMjC,IAAI,GAAG,KAAKS,MAAL,CAAYyB,GAAZ,CAAgBD,MAAhB,CAAb;;AACA,cAAI,CAAC,KAAKnB,cAAL,CAAoBqB,QAApB,CAA6BnC,IAA7B,CAAL,EAAyC;AACvC,iBAAKS,MAAL,CAAY2B,MAAZ,CAAmBH,MAAnB;AACD,WAFD,MAEO;AACLjC,YAAAA,IAAI,CAACqC,cAAL;AACD;AACF;AARS;AAAA;AAAA;AAAA;AAAA;AASX;;;2BAQMC,Q,EAAsC;AAAA;;AAAA,qFAAJ,EAAI;AAAA,UAA3BC,MAA2B,QAA3BA,MAA2B;AAAA,UAAnBC,WAAmB,QAAnBA,WAAmB;;AAC3C,UAAMC,oBAAoB,GAAG,IAAIC,aAAJ,CAAYF,WAAZ,CAA7B;AACA,UAAMG,gBAAgB,GAAG,CAACF,oBAAoB,CAACG,MAArB,CAA4B,KAAKC,YAAjC,CAA1B;;AACA,UAAI,CAACP,QAAQ,CAACM,MAAT,CAAgB,KAAK/B,SAArB,CAAD,IAAoC8B,gBAAxC,EAA0D;AACxD,YAAIA,gBAAJ,EAAsB;AACpB,eAAKG,mBAAL,GAA2BN,WAAW,IAAIC,oBAAoB,CAACM,KAArB,GAA6BC,MAA7B,EAA1C;AACA,eAAKH,YAAL,GAAoBL,WAAW,IAAIC,oBAAnC;AACD;;AACD,aAAK5B,SAAL,GAAiByB,QAAjB;AACA,YAAMW,WAAW,GAAG,KAAKC,cAAL,CAAoB;AACtCZ,UAAAA,QAAQ,EAARA,QADsC;AAEtCjB,UAAAA,OAAO,EAAE,KAAKC,QAFwB;AAGtCG,UAAAA,OAAO,EAAE,KAAKC,QAHwB;AAItCa,UAAAA,MAAM,EAANA,MAJsC;AAKtCC,UAAAA,WAAW,EAAE,KAAKK,YALoB;AAMtCM,UAAAA,kBAAkB,EAAE,KAAKL;AANa,SAApB,CAApB;AAQA,aAAKhC,cAAL,GAAsBmC,WAAW,CAACG,GAAZ,CAAgB,UAAAC,KAAK;AAAA,iBAAI,MAAI,CAACC,QAAL,CAAcD,KAAd,EAAqB,IAArB,CAAJ;AAAA,SAArB,CAAtB;;AAEA,YAAI,KAAKzC,MAAT,EAAiB;AAEf,eAAK2C,YAAL;AACD;AACF;;AAGD,UAAMC,OAAO,GAAG,KAAKC,gBAAL,EAAhB;;AAEA,UAAI,KAAK7C,MAAT,EAAiB;AAEf,aAAKR,YAAL;AACD;;AAED,UAAIoD,OAAJ,EAAa;AACX,aAAKzC,YAAL;AACD;;AAED,aAAO,KAAKA,YAAZ;AACD;;;0CAKqF;AAAA,UAAtEuB,QAAsE,SAAtEA,QAAsE;AAAA,UAA5DjB,OAA4D,SAA5DA,OAA4D;AAAA,UAAnDI,OAAmD,SAAnDA,OAAmD;AAAA,UAA1Cc,MAA0C,SAA1CA,MAA0C;AAAA,UAAlCC,WAAkC,SAAlCA,WAAkC;AAAA,UAArBW,kBAAqB,SAArBA,kBAAqB;AAAA,uBAC7C,KAAKrD,IADwC;AAAA,UAC7E4D,QAD6E,cAC7EA,QAD6E;AAAA,UACnEC,MADmE,cACnEA,MADmE;AAAA,UAC3DC,UAD2D,cAC3DA,UAD2D;AAEpF,aAAO,2BAAe;AACpBtB,QAAAA,QAAQ,EAARA,QADoB;AAEpBjB,QAAAA,OAAO,EAAPA,OAFoB;AAGpBI,QAAAA,OAAO,EAAPA,OAHoB;AAIpBc,QAAAA,MAAM,EAANA,MAJoB;AAKpBmB,QAAAA,QAAQ,EAARA,QALoB;AAMpBC,QAAAA,MAAM,EAANA,MANoB;AAOpBnB,QAAAA,WAAW,EAAXA,WAPoB;AAQpBW,QAAAA,kBAAkB,EAAlBA,kBARoB;AASpBS,QAAAA,UAAU,EAAVA;AAToB,OAAf,CAAP;AAWD;;;2CAG0B;AAAA,UAAVC,CAAU,SAAVA,CAAU;AAAA,UAAPC,CAAO,SAAPA,CAAO;AAAA,UAAJC,CAAI,SAAJA,CAAI;AAAA,UAClBL,QADkB,GACN,KAAK5D,IADC,CAClB4D,QADkB;AAEzB,aAAO;AAACM,QAAAA,IAAI,EAAE,8BAAkB,KAAKnD,SAAvB,EAAkCgD,CAAlC,EAAqCC,CAArC,EAAwCC,CAAxC,EAA2CL,QAA3C;AAAP,OAAP;AACD;;;mCAGcO,S,EAAW;AAExBA,MAAAA,SAAS,CAACJ,CAAV,GAActC,IAAI,CAACC,KAAL,CAAWyC,SAAS,CAACJ,CAAV,GAAc,CAAzB,CAAd;AACAI,MAAAA,SAAS,CAACH,CAAV,GAAcvC,IAAI,CAACC,KAAL,CAAWyC,SAAS,CAACH,CAAV,GAAc,CAAzB,CAAd;AACAG,MAAAA,SAAS,CAACF,CAAV,IAAe,CAAf;AACA,aAAOE,SAAP;AACD;;;uCAGkB;AACjB,WAAKC,iBAAL,CAAuB,KAAKC,aAA5B;;AADiB,UAGV5D,WAHU,GAGK,KAAKT,IAHV,CAGVS,WAHU;AAKjB,UAAM6D,eAAe,GAAG,EAAxB;AACA,UAAIC,mBAAmB,GAAG,CAA1B;AACA,UAAIb,OAAO,GAAG,KAAd;;AAPiB,kDAQE,KAAK/C,MAAL,CAAYmB,MAAZ,EARF;AAAA;;AAAA;AAQjB,+DAAyC;AAAA,cAA9B5B,KAA8B;AACvC,cAAMsE,SAAS,GAAGC,OAAO,CAACvE,KAAI,CAACwE,KAAL,GAAanF,kBAAd,CAAzB;;AACA,cAAIW,KAAI,CAACsE,SAAL,KAAmBA,SAAvB,EAAkC;AAChCd,YAAAA,OAAO,GAAG,IAAV;AACAxD,YAAAA,KAAI,CAACsE,SAAL,GAAiBA,SAAjB;AACD;;AAGDtE,UAAAA,KAAI,CAACyE,UAAL,GAAkBzE,KAAI,CAACwE,KAAL,KAAehF,mBAAjC;;AAGA,cAAIQ,KAAI,CAAC6B,SAAT,EAAoB;AAClBwC,YAAAA,mBAAmB;;AACnB,gBAAI,CAACrE,KAAI,CAACyE,UAAV,EAAsB;AACpBL,cAAAA,eAAe,CAACM,IAAhB,CAAqB1E,KAArB;AACD;AACF;AACF;AAzBgB;AAAA;AAAA;AAAA;AAAA;;AA2BjB,UAAIO,WAAW,GAAG,CAAlB,EAAqB;AACnB,eAAO8D,mBAAmB,GAAG9D,WAAtB,IAAqC6D,eAAe,CAACO,MAAhB,GAAyB,CAArE,EAAwE;AAEtE,cAAM3E,IAAI,GAAGoE,eAAe,CAACQ,KAAhB,EAAb;AACA5E,UAAAA,IAAI,CAAC8B,KAAL;AACAuC,UAAAA,mBAAmB;AACpB;AACF;;AAED,aAAOb,OAAP;AACD;;;mCAKc;AAAA,UACN/C,MADM,GACI,IADJ,CACNA,MADM;;AAAA,kDAIMA,MAAM,CAACmB,MAAP,EAJN;AAAA;;AAAA;AAIb,+DAAoC;AAAA,cAAzB5B,IAAyB;AAClCA,UAAAA,IAAI,CAAC6E,MAAL,GAAc,IAAd;AACA7E,UAAAA,IAAI,CAAC8E,QAAL,CAAcH,MAAd,GAAuB,CAAvB;AACD;AAPY;AAAA;AAAA;AAAA;AAAA;;AAAA,kDAUMlE,MAAM,CAACmB,MAAP,EAVN;AAAA;;AAAA;AAUb,+DAAoC;AAAA,cAAzB5B,MAAyB;;AAClC,cAAM6E,MAAM,GAAG,KAAKE,mBAAL,CAAyB/E,MAAI,CAAC6D,CAA9B,EAAiC7D,MAAI,CAAC8D,CAAtC,EAAyC9D,MAAI,CAAC+D,CAA9C,CAAf;;AACA/D,UAAAA,MAAI,CAAC6E,MAAL,GAAcA,MAAd;;AACA,cAAIA,MAAJ,EAAY;AACVA,YAAAA,MAAM,CAACC,QAAP,CAAgBJ,IAAhB,CAAqB1E,MAArB;AACD;AACF;AAhBY;AAAA;AAAA;AAAA;AAAA;AAiBd;;;sCAOiBmE,a,EAAe;AAAA,UACxB1D,MADwB,GACd,IADc,CACxBA,MADwB;AAE/B,UAAMuE,kBAAkB,GAAG,KAAKlF,IAAL,CAAUkF,kBAAV,IAAgCrF,gBAA3D;;AAF+B,kDAKZc,MAAM,CAACmB,MAAP,EALY;AAAA;;AAAA;AAK/B,+DAAoC;AAAA,cAAzB5B,IAAyB;AAClCA,UAAAA,IAAI,CAACwE,KAAL,GAAapF,kBAAb;AACD;AAP8B;AAAA;AAAA;AAAA;AAAA;;AAAA,kDAYZ+E,aAZY;AAAA;;AAAA;AAY/B,+DAAkC;AAAA,cAAvBnE,MAAuB;AAChCA,UAAAA,MAAI,CAACwE,KAAL,GAAahF,mBAAb;AACD;AAd8B;AAAA;AAAA;AAAA;AAAA;;AAgB/B,UAAIwF,kBAAkB,KAAKvF,cAA3B,EAA2C;AACzC;AACD;;AAlB8B,kDAmBZ0E,aAnBY;AAAA;;AAAA;AAmB/B,+DAAkC;AAAA,cAAvBnE,MAAuB;AAChCiF,UAAAA,yBAAyB,CAACjF,MAAD,EAAOgF,kBAAP,CAAzB;AACD;AArB8B;AAAA;AAAA;AAAA;AAAA;;AAAA,kDAsBZb,aAtBY;AAAA;;AAAA;AAsB/B,+DAAkC;AAAA,cAAvBnE,MAAuB;;AAChC,cAAIkF,gBAAgB,CAAClF,MAAD,CAApB,EAA4B;AAC1BmF,YAAAA,wBAAwB,CAACnF,MAAD,CAAxB;AACD;AACF;AA1B8B;AAAA;AAAA;AAAA;AAAA;AA2BhC;;;mCAMc;AAAA,UACNS,MADM,GACU,IADV,CACNA,MADM;AAAA,UACEX,IADF,GACU,IADV,CACEA,IADF;AAGb,UAAMsF,YAAY,GAChBtF,IAAI,CAACsF,YAAL,KACCtF,IAAI,CAACG,gBAAL,GAAwBoF,QAAxB,GAAmCzF,mBAAmB,GAAG,KAAKuE,aAAL,CAAmBQ,MAD7E,CADF;AAGA,UAAM1E,gBAAgB,GAAGH,IAAI,CAACG,gBAAL,IAAyBoF,QAAlD;AAEA,UAAMC,SAAS,GAAG7E,MAAM,CAAC8E,IAAP,GAAcH,YAAd,IAA8B,KAAKlF,cAAL,GAAsBD,gBAAtE;;AAEA,UAAIqF,SAAJ,EAAe;AAAA,qDACgB7E,MADhB;AAAA;;AAAA;AACb,oEAAqC;AAAA;AAAA,gBAAzBwB,MAAyB;AAAA,gBAAjBjC,IAAiB;;AACnC,gBAAI,CAACA,IAAI,CAACsE,SAAV,EAAqB;AAEnB,mBAAKpE,cAAL,IAAuBJ,IAAI,CAACG,gBAAL,GAAwBD,IAAI,CAACG,UAA7B,GAA0C,CAAjE;;AACAM,cAAAA,MAAM,CAAC2B,MAAP,CAAcH,MAAd;;AACA,mBAAKnC,IAAL,CAAU0F,YAAV,CAAuBxF,IAAvB;AACD;;AACD,gBAAIS,MAAM,CAAC8E,IAAP,IAAeH,YAAf,IAA+B,KAAKlF,cAAL,IAAuBD,gBAA1D,EAA4E;AAC1E;AACD;AACF;AAXY;AAAA;AAAA;AAAA;AAAA;;AAYb,aAAKsD,YAAL;;AACA,aAAK3C,MAAL,GAAc,IAAd;AACD;;AACD,UAAI,KAAKA,MAAT,EAAiB;AACf,aAAKD,MAAL,GAAc8E,KAAK,CAACC,IAAN,CAAW,KAAKjF,MAAL,CAAYmB,MAAZ,EAAX,EAEX+D,IAFW,CAEN,UAACC,EAAD,EAAKC,EAAL;AAAA,iBAAYD,EAAE,CAAC7B,CAAH,GAAO8B,EAAE,CAAC9B,CAAtB;AAAA,SAFM,CAAd;AAIA,aAAKnD,MAAL,GAAc,KAAd;AACD;AACF;;;oCAGmBkF,M,EAAQ;AAAA,UAAlBjC,CAAkB,SAAlBA,CAAkB;AAAA,UAAfC,CAAe,SAAfA,CAAe;AAAA,UAAZC,CAAY,SAAZA,CAAY;AAC1B,UAAM9B,MAAM,aAAM4B,CAAN,cAAWC,CAAX,cAAgBC,CAAhB,CAAZ;;AACA,UAAI/D,IAAI,GAAG,KAAKS,MAAL,CAAYyB,GAAZ,CAAgBD,MAAhB,CAAX;;AACA,UAAI8D,WAAW,GAAG,KAAlB;;AAEA,UAAI,CAAC/F,IAAD,IAAS8F,MAAb,EAAqB;AACnB9F,QAAAA,IAAI,GAAG,IAAIgG,qBAAJ,CAAiB;AAACnC,UAAAA,CAAC,EAADA,CAAD;AAAIC,UAAAA,CAAC,EAADA,CAAJ;AAAOC,UAAAA,CAAC,EAADA;AAAP,SAAjB,CAAP;AACA9C,QAAAA,MAAM,CAACC,MAAP,CAAclB,IAAd,EAAoB,KAAKiG,eAAL,CAAqBjG,IAArB,CAApB;AACA+F,QAAAA,WAAW,GAAG,IAAd;;AACA,aAAKtF,MAAL,CAAYyF,GAAZ,CAAgBjE,MAAhB,EAAwBjC,IAAxB;;AACA,aAAKY,MAAL,GAAc,IAAd;AACD,OAND,MAMO,IAAIZ,IAAI,IAAIA,IAAI,CAAC+F,WAAjB,EAA8B;AACnCA,QAAAA,WAAW,GAAG,IAAd;AACD;;AACD,UAAIA,WAAJ,EAAiB;AACf/F,QAAAA,IAAI,CAACmG,QAAL,CAAc;AACZC,UAAAA,OAAO,EAAE,KAAKtG,IAAL,CAAUuG,WADP;AAEZC,UAAAA,gBAAgB,EAAE,KAAKjG,iBAFX;AAGZkG,UAAAA,MAAM,EAAE,KAAKxG,UAHD;AAIZyG,UAAAA,OAAO,EAAE,KAAK1G,IAAL,CAAU2G;AAJP,SAAd;AAMD;;AAED,aAAOzG,IAAP;AACD;;;wCAEmB6D,C,EAAGC,C,EAAGC,C,EAAG;AAAA,2BACJ,IADI,CACpBrC,QADoB;AAAA,UACpBA,QADoB,+BACT,CADS;;AAE3B,UAAI2B,KAAK,GAAG;AAACQ,QAAAA,CAAC,EAADA,CAAD;AAAIC,QAAAA,CAAC,EAADA,CAAJ;AAAOC,QAAAA,CAAC,EAADA;AAAP,OAAZ;;AAEA,aAAOV,KAAK,CAACU,CAAN,GAAUrC,QAAjB,EAA2B;AACzB2B,QAAAA,KAAK,GAAG,KAAKqD,cAAL,CAAoBrD,KAApB,CAAR;;AACA,YAAMwB,MAAM,GAAG,KAAKvB,QAAL,CAAcD,KAAd,CAAf;;AACA,YAAIwB,MAAJ,EAAY;AACV,iBAAOA,MAAP;AACD;AACF;;AACD,aAAO,IAAP;AACD;;;wBAzSW;AACV,aAAO,KAAKlE,MAAZ;AACD;;;wBAEmB;AAClB,aAAO,KAAKG,cAAZ;AACD;;;wBAEc;AACb,aAAO,KAAKA,cAAL,CAAoB6F,KAApB,CAA0B,UAAA3G,IAAI;AAAA,eAAIA,IAAI,CAAC4G,QAAT;AAAA,OAA9B,CAAP;AACD;;;;;;;AAqSH,SAAS1B,gBAAT,CAA0BlF,IAA1B,EAAgC;AAC9B,MAAI6G,CAAC,GAAG7G,IAAR;;AACA,SAAO6G,CAAP,EAAU;AACR,QAAIA,CAAC,CAACrC,KAAF,GAAWnF,kBAAkB,KAAK,CAAtC,EAA0C;AACxC,aAAO,IAAP;AACD;;AACD,QAAIwH,CAAC,CAACD,QAAN,EAAgB;AACd,aAAO,KAAP;AACD;;AACDC,IAAAA,CAAC,GAAGA,CAAC,CAAChC,MAAN;AACD;;AACD,SAAO,IAAP;AACD;;AAED,SAASI,yBAAT,CAAmCjF,IAAnC,EAAyCgF,kBAAzC,EAA6D;AAC3D,MAAIH,MAAJ;AACA,MAAIL,KAAK,GAAGlF,sBAAZ;;AACA,SAAQuF,MAAM,GAAG7E,IAAI,CAAC6E,MAAtB,EAA+B;AAC7B,QAAI7E,IAAI,CAAC4G,QAAT,EAAmB;AAEjBpC,MAAAA,KAAK,GAAGjF,iBAAR;;AACA,UAAIyF,kBAAkB,KAAKrF,gBAA3B,EAA6C;AAC3C;AACD;AACF;;AACDkF,IAAAA,MAAM,CAACL,KAAP,GAAejD,IAAI,CAACuF,GAAL,CAASjC,MAAM,CAACL,KAAhB,EAAuBA,KAAvB,CAAf;AACAxE,IAAAA,IAAI,GAAG6E,MAAP;AACD;AACF;;AAGD,SAASM,wBAAT,CAAkCnF,IAAlC,EAAwC;AAAA,+CAClBA,IAAI,CAAC8E,QADa;AAAA;;AAAA;AACtC,8DAAmC;AAAA,UAAxBiC,KAAwB;AACjCA,MAAAA,KAAK,CAACvC,KAAN,GAAcjD,IAAI,CAACuF,GAAL,CAASC,KAAK,CAACvC,KAAf,EAAsBlF,sBAAtB,CAAd;;AACA,UAAI,CAACyH,KAAK,CAACH,QAAX,EAAqB;AACnBzB,QAAAA,wBAAwB,CAAC4B,KAAD,CAAxB;AACD;AACF;AANqC;AAAA;AAAA;AAAA;AAAA;AAOvC","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"}
|