@deck.gl/geo-layers 8.9.0-alpha.5 → 8.9.0-beta.1
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 +25759 -66604
- package/dist/es5/h3-layers/h3-cluster-layer.js +2 -2
- package/dist/es5/h3-layers/h3-cluster-layer.js.map +1 -1
- package/dist/es5/index.js +4 -8
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/mesh-layer/mesh-layer-fragment.glsl.js +1 -1
- package/dist/es5/mesh-layer/mesh-layer-vertex.glsl.js +1 -1
- package/dist/es5/mvt-layer/coordinate-transform.js.map +1 -1
- package/dist/es5/mvt-layer/mvt-layer.js +9 -9
- package/dist/es5/mvt-layer/mvt-layer.js.map +1 -1
- package/dist/es5/terrain-layer/terrain-layer.js +5 -5
- package/dist/es5/terrain-layer/terrain-layer.js.map +1 -1
- package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +1 -1
- package/dist/es5/tile-layer/tile-layer.js +9 -13
- package/dist/es5/tile-layer/tile-layer.js.map +1 -1
- package/dist/es5/tileset-2d/index.js +66 -0
- package/dist/es5/tileset-2d/index.js.map +1 -0
- package/dist/es5/tileset-2d/memoize.js +47 -0
- package/dist/es5/tileset-2d/memoize.js.map +1 -0
- package/dist/es5/{tile-layer → tileset-2d}/tile-2d-header.js +3 -5
- package/dist/es5/tileset-2d/tile-2d-header.js.map +1 -0
- package/dist/es5/{tile-layer → tileset-2d}/tile-2d-traversal.js +0 -0
- package/dist/es5/tileset-2d/tile-2d-traversal.js.map +1 -0
- package/dist/es5/{tile-layer → tileset-2d}/tileset-2d.js +166 -121
- package/dist/es5/tileset-2d/tileset-2d.js.map +1 -0
- package/dist/es5/{tile-layer → tileset-2d}/types.js +0 -0
- package/dist/es5/{tile-layer → tileset-2d}/types.js.map +0 -0
- package/dist/es5/{tile-layer → tileset-2d}/utils.js +15 -16
- package/dist/es5/tileset-2d/utils.js.map +1 -0
- package/dist/esm/h3-layers/h3-cluster-layer.js +1 -1
- package/dist/esm/h3-layers/h3-cluster-layer.js.map +1 -1
- package/dist/esm/index.js +3 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/mesh-layer/mesh-layer-fragment.glsl.js +1 -1
- package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js +1 -1
- package/dist/esm/mvt-layer/coordinate-transform.js.map +1 -1
- package/dist/esm/mvt-layer/mvt-layer.js +3 -3
- package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
- package/dist/esm/terrain-layer/terrain-layer.js +1 -1
- package/dist/esm/terrain-layer/terrain-layer.js.map +1 -1
- package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +1 -1
- package/dist/esm/tile-layer/tile-layer.js +6 -3
- package/dist/esm/tile-layer/tile-layer.js.map +1 -1
- package/dist/esm/tileset-2d/index.js +4 -0
- package/dist/esm/tileset-2d/index.js.map +1 -0
- package/dist/esm/tileset-2d/memoize.js +40 -0
- package/dist/esm/tileset-2d/memoize.js.map +1 -0
- package/dist/esm/{tile-layer → tileset-2d}/tile-2d-header.js +2 -3
- package/dist/esm/tileset-2d/tile-2d-header.js.map +1 -0
- package/dist/esm/{tile-layer → tileset-2d}/tile-2d-traversal.js +0 -0
- package/dist/esm/tileset-2d/tile-2d-traversal.js.map +1 -0
- package/dist/esm/{tile-layer → tileset-2d}/tileset-2d.js +48 -16
- package/dist/esm/tileset-2d/tileset-2d.js.map +1 -0
- package/dist/esm/{tile-layer → tileset-2d}/types.js +0 -0
- package/dist/esm/{tile-layer → tileset-2d}/types.js.map +0 -0
- package/dist/esm/{tile-layer → tileset-2d}/utils.js +14 -18
- package/dist/esm/tileset-2d/utils.js.map +1 -0
- package/dist.min.js +187 -6
- package/package.json +11 -11
- package/src/h3-layers/h3-cluster-layer.ts +1 -1
- package/src/index.ts +9 -5
- package/src/mvt-layer/coordinate-transform.ts +1 -1
- package/src/mvt-layer/mvt-layer.ts +14 -7
- package/src/terrain-layer/terrain-layer.ts +2 -3
- package/src/tile-3d-layer/tile-3d-layer.ts +3 -0
- package/src/tile-layer/tile-layer.ts +13 -6
- package/src/tileset-2d/index.ts +24 -0
- package/src/tileset-2d/memoize.ts +45 -0
- package/src/{tile-layer → tileset-2d}/tile-2d-header.ts +4 -4
- package/src/{tile-layer → tileset-2d}/tile-2d-traversal.ts +3 -1
- package/src/{tile-layer → tileset-2d}/tileset-2d.ts +91 -39
- package/src/{tile-layer → tileset-2d}/types.ts +0 -0
- package/src/{tile-layer → tileset-2d}/utils.ts +20 -8
- package/typed/geo-cell-layer/GeoCellLayer.js +49 -0
- package/typed/great-circle-layer/great-circle-layer.js +29 -0
- package/typed/h3-layers/h3-cluster-layer.js +33 -0
- package/typed/h3-layers/h3-hexagon-layer.js +251 -0
- package/typed/index.d.ts +5 -5
- package/typed/index.d.ts.map +1 -1
- package/typed/index.js +33 -0
- package/typed/mesh-layer/mesh-layer-fragment.glsl.js +55 -0
- package/typed/mesh-layer/mesh-layer-vertex.glsl.js +80 -0
- package/typed/mesh-layer/mesh-layer.js +110 -0
- package/typed/mvt-layer/coordinate-transform.d.ts +1 -1
- package/typed/mvt-layer/coordinate-transform.d.ts.map +1 -1
- package/typed/mvt-layer/coordinate-transform.js +41 -0
- package/typed/mvt-layer/find-index-binary.js +96 -0
- package/typed/mvt-layer/mvt-layer.d.ts +2 -3
- package/typed/mvt-layer/mvt-layer.d.ts.map +1 -1
- package/typed/mvt-layer/mvt-layer.js +297 -0
- package/typed/quadkey-layer/quadkey-layer.js +18 -0
- package/typed/quadkey-layer/quadkey-utils.js +26 -0
- package/typed/s2-layer/s2-geometry.js +123 -0
- package/typed/s2-layer/s2-layer.js +37 -0
- package/typed/s2-layer/s2-utils.js +88 -0
- package/typed/terrain-layer/terrain-layer.d.ts +2 -2
- package/typed/terrain-layer/terrain-layer.d.ts.map +1 -1
- package/typed/terrain-layer/terrain-layer.js +226 -0
- package/typed/tile-3d-layer/tile-3d-layer.d.ts.map +1 -1
- package/typed/tile-3d-layer/tile-3d-layer.js +294 -0
- package/typed/tile-layer/tile-2d-header.js +113 -0
- package/typed/tile-layer/tile-2d-traversal.js +181 -0
- package/typed/tile-layer/tile-layer.d.ts +3 -4
- package/typed/tile-layer/tile-layer.d.ts.map +1 -1
- package/typed/tile-layer/tile-layer.js +192 -0
- package/typed/tile-layer/tileset-2d.d.ts.map +1 -1
- package/typed/tile-layer/tileset-2d.js +399 -0
- package/typed/tile-layer/types.js +1 -0
- package/typed/tile-layer/utils.d.ts +1 -1
- package/typed/tile-layer/utils.d.ts.map +1 -1
- package/typed/tile-layer/utils.js +197 -0
- package/typed/tileset-2d/index.d.ts +6 -0
- package/typed/tileset-2d/index.d.ts.map +1 -0
- package/typed/tileset-2d/memoize.d.ts +7 -0
- package/typed/tileset-2d/memoize.d.ts.map +1 -0
- package/typed/tileset-2d/tile-2d-header.d.ts +39 -0
- package/typed/tileset-2d/tile-2d-header.d.ts.map +1 -0
- package/typed/tileset-2d/tile-2d-traversal.d.ts +4 -0
- package/typed/tileset-2d/tile-2d-traversal.d.ts.map +1 -0
- package/typed/tileset-2d/tileset-2d.d.ts +121 -0
- package/typed/tileset-2d/tileset-2d.d.ts.map +1 -0
- package/typed/tileset-2d/types.d.ts +30 -0
- package/typed/tileset-2d/types.d.ts.map +1 -0
- package/typed/tileset-2d/utils.d.ts +51 -0
- package/typed/tileset-2d/utils.d.ts.map +1 -0
- package/typed/trips-layer/trips-layer.js +92 -0
- package/dist/es5/tile-layer/tile-2d-header.js.map +0 -1
- package/dist/es5/tile-layer/tile-2d-traversal.js.map +0 -1
- package/dist/es5/tile-layer/tileset-2d.js.map +0 -1
- package/dist/es5/tile-layer/utils.js.map +0 -1
- package/dist/esm/tile-layer/tile-2d-header.js.map +0 -1
- package/dist/esm/tile-layer/tile-2d-traversal.js.map +0 -1
- package/dist/esm/tile-layer/tileset-2d.js.map +0 -1
- package/dist/esm/tile-layer/utils.js.map +0 -1
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.
|
|
8
|
+
exports.Tileset2D = exports.DEFAULT_TILESET2D_PROPS = exports.STRATEGY_DEFAULT = exports.STRATEGY_REPLACE = exports.STRATEGY_NEVER = void 0;
|
|
9
9
|
|
|
10
10
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
11
|
|
|
@@ -15,15 +15,15 @@ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/creat
|
|
|
15
15
|
|
|
16
16
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
17
17
|
|
|
18
|
-
var _tile2dHeader = _interopRequireDefault(require("./tile-2d-header"));
|
|
19
|
-
|
|
20
|
-
var _utils = require("./utils");
|
|
21
|
-
|
|
22
18
|
var _loaderUtils = require("@loaders.gl/loader-utils");
|
|
23
19
|
|
|
24
20
|
var _core = require("@math.gl/core");
|
|
25
21
|
|
|
26
|
-
var
|
|
22
|
+
var _tile2dHeader = require("./tile-2d-header");
|
|
23
|
+
|
|
24
|
+
var _utils = require("./utils");
|
|
25
|
+
|
|
26
|
+
var _memoize = require("./memoize");
|
|
27
27
|
|
|
28
28
|
var _STRATEGIES;
|
|
29
29
|
|
|
@@ -33,6 +33,10 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
|
|
|
33
33
|
|
|
34
34
|
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; }
|
|
35
35
|
|
|
36
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
37
|
+
|
|
38
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
39
|
+
|
|
36
40
|
var TILE_STATE_VISITED = 1;
|
|
37
41
|
var TILE_STATE_VISIBLE = 2;
|
|
38
42
|
var STRATEGY_NEVER = 'never';
|
|
@@ -43,6 +47,22 @@ var STRATEGY_DEFAULT = 'best-available';
|
|
|
43
47
|
exports.STRATEGY_DEFAULT = STRATEGY_DEFAULT;
|
|
44
48
|
var DEFAULT_CACHE_SCALE = 5;
|
|
45
49
|
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);
|
|
50
|
+
var DEFAULT_TILESET2D_PROPS = {
|
|
51
|
+
extent: null,
|
|
52
|
+
tileSize: 512,
|
|
53
|
+
maxZoom: null,
|
|
54
|
+
minZoom: null,
|
|
55
|
+
maxCacheSize: null,
|
|
56
|
+
maxCacheByteSize: null,
|
|
57
|
+
refinementStrategy: 'best-available',
|
|
58
|
+
zRange: null,
|
|
59
|
+
maxRequests: 6,
|
|
60
|
+
zoomOffset: 0,
|
|
61
|
+
onTileLoad: function onTileLoad() {},
|
|
62
|
+
onTileUnload: function onTileUnload() {},
|
|
63
|
+
onTileError: function onTileError() {}
|
|
64
|
+
};
|
|
65
|
+
exports.DEFAULT_TILESET2D_PROPS = DEFAULT_TILESET2D_PROPS;
|
|
46
66
|
|
|
47
67
|
var Tileset2D = function () {
|
|
48
68
|
function Tileset2D(opts) {
|
|
@@ -64,11 +84,13 @@ var Tileset2D = function () {
|
|
|
64
84
|
(0, _defineProperty2.default)(this, "_maxZoom", void 0);
|
|
65
85
|
(0, _defineProperty2.default)(this, "_minZoom", void 0);
|
|
66
86
|
(0, _defineProperty2.default)(this, "onTileLoad", void 0);
|
|
67
|
-
(0, _defineProperty2.default)(this, "_getCullBounds", (0,
|
|
68
|
-
this.opts = opts;
|
|
87
|
+
(0, _defineProperty2.default)(this, "_getCullBounds", (0, _memoize.memoize)(_utils.getCullBounds));
|
|
88
|
+
this.opts = _objectSpread(_objectSpread({}, DEFAULT_TILESET2D_PROPS), opts);
|
|
69
89
|
|
|
70
90
|
this.onTileLoad = function (tile) {
|
|
71
|
-
_this
|
|
91
|
+
var _this$opts$onTileLoad, _this$opts;
|
|
92
|
+
|
|
93
|
+
(_this$opts$onTileLoad = (_this$opts = _this.opts).onTileLoad) === null || _this$opts$onTileLoad === void 0 ? void 0 : _this$opts$onTileLoad.call(_this$opts, tile);
|
|
72
94
|
|
|
73
95
|
if (_this.opts.maxCacheByteSize) {
|
|
74
96
|
_this._cacheByteSize += tile.byteLength;
|
|
@@ -79,7 +101,7 @@ var Tileset2D = function () {
|
|
|
79
101
|
|
|
80
102
|
this._requestScheduler = new _loaderUtils.RequestScheduler({
|
|
81
103
|
maxRequests: opts.maxRequests,
|
|
82
|
-
throttleRequests: opts.maxRequests > 0
|
|
104
|
+
throttleRequests: Boolean(opts.maxRequests && opts.maxRequests > 0)
|
|
83
105
|
});
|
|
84
106
|
this._cache = new Map();
|
|
85
107
|
this._tiles = [];
|
|
@@ -242,26 +264,46 @@ var Tileset2D = function () {
|
|
|
242
264
|
}
|
|
243
265
|
|
|
244
266
|
if (cullRect && this._viewport) {
|
|
245
|
-
var
|
|
267
|
+
var boundsArr = this._getCullBounds({
|
|
246
268
|
viewport: this._viewport,
|
|
247
269
|
z: this._zRange,
|
|
248
270
|
cullRect: cullRect
|
|
249
|
-
})
|
|
250
|
-
_getCullBounds2 = (0, _slicedToArray2.default)(_getCullBounds, 4),
|
|
251
|
-
minX = _getCullBounds2[0],
|
|
252
|
-
minY = _getCullBounds2[1],
|
|
253
|
-
maxX = _getCullBounds2[2],
|
|
254
|
-
maxY = _getCullBounds2[3];
|
|
271
|
+
});
|
|
255
272
|
|
|
256
273
|
var bbox = tile.bbox;
|
|
257
274
|
|
|
258
|
-
|
|
259
|
-
|
|
275
|
+
var _iterator3 = _createForOfIteratorHelper(boundsArr),
|
|
276
|
+
_step3;
|
|
277
|
+
|
|
278
|
+
try {
|
|
279
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
280
|
+
var _step3$value = (0, _slicedToArray2.default)(_step3.value, 4),
|
|
281
|
+
minX = _step3$value[0],
|
|
282
|
+
minY = _step3$value[1],
|
|
283
|
+
maxX = _step3$value[2],
|
|
284
|
+
maxY = _step3$value[3];
|
|
285
|
+
|
|
286
|
+
var overlaps = void 0;
|
|
287
|
+
|
|
288
|
+
if ('west' in bbox) {
|
|
289
|
+
overlaps = bbox.west < maxX && bbox.east > minX && bbox.south < maxY && bbox.north > minY;
|
|
290
|
+
} else {
|
|
291
|
+
var y0 = Math.min(bbox.top, bbox.bottom);
|
|
292
|
+
var y1 = Math.max(bbox.top, bbox.bottom);
|
|
293
|
+
overlaps = bbox.left < maxX && bbox.right > minX && y0 < maxY && y1 > minY;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
if (overlaps) {
|
|
297
|
+
return true;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
} catch (err) {
|
|
301
|
+
_iterator3.e(err);
|
|
302
|
+
} finally {
|
|
303
|
+
_iterator3.f();
|
|
260
304
|
}
|
|
261
305
|
|
|
262
|
-
|
|
263
|
-
var y1 = Math.max(bbox.top, bbox.bottom);
|
|
264
|
-
return bbox.left < maxX && bbox.right > minX && y0 < maxY && y1 > minY;
|
|
306
|
+
return false;
|
|
265
307
|
}
|
|
266
308
|
|
|
267
309
|
return true;
|
|
@@ -275,10 +317,10 @@ var Tileset2D = function () {
|
|
|
275
317
|
zRange = _ref2.zRange,
|
|
276
318
|
modelMatrix = _ref2.modelMatrix,
|
|
277
319
|
modelMatrixInverse = _ref2.modelMatrixInverse;
|
|
278
|
-
var _this$
|
|
279
|
-
tileSize = _this$
|
|
280
|
-
extent = _this$
|
|
281
|
-
zoomOffset = _this$
|
|
320
|
+
var _this$opts2 = this.opts,
|
|
321
|
+
tileSize = _this$opts2.tileSize,
|
|
322
|
+
extent = _this$opts2.extent,
|
|
323
|
+
zoomOffset = _this$opts2.zoomOffset;
|
|
282
324
|
return (0, _utils.getTileIndices)({
|
|
283
325
|
viewport: viewport,
|
|
284
326
|
maxZoom: maxZoom,
|
|
@@ -328,55 +370,55 @@ var Tileset2D = function () {
|
|
|
328
370
|
var visibilities = new Array(this._cache.size);
|
|
329
371
|
var i = 0;
|
|
330
372
|
|
|
331
|
-
var
|
|
332
|
-
|
|
373
|
+
var _iterator4 = _createForOfIteratorHelper(this._cache.values()),
|
|
374
|
+
_step4;
|
|
333
375
|
|
|
334
376
|
try {
|
|
335
|
-
for (
|
|
336
|
-
var _tile3 =
|
|
377
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
378
|
+
var _tile3 = _step4.value;
|
|
337
379
|
visibilities[i++] = _tile3.isVisible;
|
|
338
380
|
_tile3.isSelected = false;
|
|
339
381
|
_tile3.isVisible = false;
|
|
340
382
|
}
|
|
341
383
|
} catch (err) {
|
|
342
|
-
|
|
384
|
+
_iterator4.e(err);
|
|
343
385
|
} finally {
|
|
344
|
-
|
|
386
|
+
_iterator4.f();
|
|
345
387
|
}
|
|
346
388
|
|
|
347
|
-
var
|
|
348
|
-
|
|
389
|
+
var _iterator5 = _createForOfIteratorHelper(this._selectedTiles),
|
|
390
|
+
_step5;
|
|
349
391
|
|
|
350
392
|
try {
|
|
351
|
-
for (
|
|
352
|
-
var _tile4 =
|
|
393
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
394
|
+
var _tile4 = _step5.value;
|
|
353
395
|
_tile4.isSelected = true;
|
|
354
396
|
_tile4.isVisible = true;
|
|
355
397
|
}
|
|
356
398
|
} catch (err) {
|
|
357
|
-
|
|
399
|
+
_iterator5.e(err);
|
|
358
400
|
} finally {
|
|
359
|
-
|
|
401
|
+
_iterator5.f();
|
|
360
402
|
}
|
|
361
403
|
|
|
362
404
|
(typeof refinementStrategy === 'function' ? refinementStrategy : STRATEGIES[refinementStrategy])(Array.from(this._cache.values()));
|
|
363
405
|
i = 0;
|
|
364
406
|
|
|
365
|
-
var
|
|
366
|
-
|
|
407
|
+
var _iterator6 = _createForOfIteratorHelper(this._cache.values()),
|
|
408
|
+
_step6;
|
|
367
409
|
|
|
368
410
|
try {
|
|
369
|
-
for (
|
|
370
|
-
var _tile5 =
|
|
411
|
+
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
|
412
|
+
var _tile5 = _step6.value;
|
|
371
413
|
|
|
372
414
|
if (visibilities[i++] !== _tile5.isVisible) {
|
|
373
415
|
return true;
|
|
374
416
|
}
|
|
375
417
|
}
|
|
376
418
|
} catch (err) {
|
|
377
|
-
|
|
419
|
+
_iterator6.e(err);
|
|
378
420
|
} finally {
|
|
379
|
-
|
|
421
|
+
_iterator6.f();
|
|
380
422
|
}
|
|
381
423
|
|
|
382
424
|
return false;
|
|
@@ -384,16 +426,17 @@ var Tileset2D = function () {
|
|
|
384
426
|
}, {
|
|
385
427
|
key: "_pruneRequests",
|
|
386
428
|
value: function _pruneRequests() {
|
|
387
|
-
var
|
|
429
|
+
var _this$opts$maxRequest = this.opts.maxRequests,
|
|
430
|
+
maxRequests = _this$opts$maxRequest === void 0 ? 0 : _this$opts$maxRequest;
|
|
388
431
|
var abortCandidates = [];
|
|
389
432
|
var ongoingRequestCount = 0;
|
|
390
433
|
|
|
391
|
-
var
|
|
392
|
-
|
|
434
|
+
var _iterator7 = _createForOfIteratorHelper(this._cache.values()),
|
|
435
|
+
_step7;
|
|
393
436
|
|
|
394
437
|
try {
|
|
395
|
-
for (
|
|
396
|
-
var _tile7 =
|
|
438
|
+
for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
|
|
439
|
+
var _tile7 = _step7.value;
|
|
397
440
|
|
|
398
441
|
if (_tile7.isLoading) {
|
|
399
442
|
ongoingRequestCount++;
|
|
@@ -404,9 +447,9 @@ var Tileset2D = function () {
|
|
|
404
447
|
}
|
|
405
448
|
}
|
|
406
449
|
} catch (err) {
|
|
407
|
-
|
|
450
|
+
_iterator7.e(err);
|
|
408
451
|
} finally {
|
|
409
|
-
|
|
452
|
+
_iterator7.f();
|
|
410
453
|
}
|
|
411
454
|
|
|
412
455
|
while (maxRequests > 0 && ongoingRequestCount > maxRequests && abortCandidates.length > 0) {
|
|
@@ -422,12 +465,12 @@ var Tileset2D = function () {
|
|
|
422
465
|
value: function _rebuildTree() {
|
|
423
466
|
var _cache = this._cache;
|
|
424
467
|
|
|
425
|
-
var
|
|
426
|
-
|
|
468
|
+
var _iterator8 = _createForOfIteratorHelper(_cache.values()),
|
|
469
|
+
_step8;
|
|
427
470
|
|
|
428
471
|
try {
|
|
429
|
-
for (
|
|
430
|
-
var _tile8 =
|
|
472
|
+
for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
|
|
473
|
+
var _tile8 = _step8.value;
|
|
431
474
|
_tile8.parent = null;
|
|
432
475
|
|
|
433
476
|
if (_tile8.children) {
|
|
@@ -435,17 +478,17 @@ var Tileset2D = function () {
|
|
|
435
478
|
}
|
|
436
479
|
}
|
|
437
480
|
} catch (err) {
|
|
438
|
-
|
|
481
|
+
_iterator8.e(err);
|
|
439
482
|
} finally {
|
|
440
|
-
|
|
483
|
+
_iterator8.f();
|
|
441
484
|
}
|
|
442
485
|
|
|
443
|
-
var
|
|
444
|
-
|
|
486
|
+
var _iterator9 = _createForOfIteratorHelper(_cache.values()),
|
|
487
|
+
_step9;
|
|
445
488
|
|
|
446
489
|
try {
|
|
447
|
-
for (
|
|
448
|
-
var _tile9 =
|
|
490
|
+
for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
|
|
491
|
+
var _tile9 = _step9.value;
|
|
449
492
|
|
|
450
493
|
var parent = this._getNearestAncestor(_tile9);
|
|
451
494
|
|
|
@@ -456,9 +499,9 @@ var Tileset2D = function () {
|
|
|
456
499
|
}
|
|
457
500
|
}
|
|
458
501
|
} catch (err) {
|
|
459
|
-
|
|
502
|
+
_iterator9.e(err);
|
|
460
503
|
} finally {
|
|
461
|
-
|
|
504
|
+
_iterator9.f();
|
|
462
505
|
}
|
|
463
506
|
}
|
|
464
507
|
}, {
|
|
@@ -471,21 +514,23 @@ var Tileset2D = function () {
|
|
|
471
514
|
var overflown = _cache.size > maxCacheSize || this._cacheByteSize > maxCacheByteSize;
|
|
472
515
|
|
|
473
516
|
if (overflown) {
|
|
474
|
-
var
|
|
475
|
-
|
|
517
|
+
var _iterator10 = _createForOfIteratorHelper(_cache),
|
|
518
|
+
_step10;
|
|
476
519
|
|
|
477
520
|
try {
|
|
478
|
-
for (
|
|
479
|
-
var
|
|
480
|
-
id =
|
|
481
|
-
_tile10 =
|
|
521
|
+
for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
|
|
522
|
+
var _step10$value = (0, _slicedToArray2.default)(_step10.value, 2),
|
|
523
|
+
id = _step10$value[0],
|
|
524
|
+
_tile10 = _step10$value[1];
|
|
525
|
+
|
|
526
|
+
if (!_tile10.isVisible && !_tile10.isSelected) {
|
|
527
|
+
var _this$opts$onTileUnlo, _this$opts3;
|
|
482
528
|
|
|
483
|
-
if (!_tile10.isVisible) {
|
|
484
529
|
this._cacheByteSize -= opts.maxCacheByteSize ? _tile10.byteLength : 0;
|
|
485
530
|
|
|
486
531
|
_cache.delete(id);
|
|
487
532
|
|
|
488
|
-
this.opts.onTileUnload(_tile10);
|
|
533
|
+
(_this$opts$onTileUnlo = (_this$opts3 = this.opts).onTileUnload) === null || _this$opts$onTileUnlo === void 0 ? void 0 : _this$opts$onTileUnlo.call(_this$opts3, _tile10);
|
|
489
534
|
}
|
|
490
535
|
|
|
491
536
|
if (_cache.size <= maxCacheSize && this._cacheByteSize <= maxCacheByteSize) {
|
|
@@ -493,9 +538,9 @@ var Tileset2D = function () {
|
|
|
493
538
|
}
|
|
494
539
|
}
|
|
495
540
|
} catch (err) {
|
|
496
|
-
|
|
541
|
+
_iterator10.e(err);
|
|
497
542
|
} finally {
|
|
498
|
-
|
|
543
|
+
_iterator10.f();
|
|
499
544
|
}
|
|
500
545
|
|
|
501
546
|
this._rebuildTree();
|
|
@@ -520,7 +565,7 @@ var Tileset2D = function () {
|
|
|
520
565
|
var needsReload = false;
|
|
521
566
|
|
|
522
567
|
if (!tile && create) {
|
|
523
|
-
tile = new _tile2dHeader.
|
|
568
|
+
tile = new _tile2dHeader.Tile2DHeader(index);
|
|
524
569
|
Object.assign(tile, this.getTileMetadata(tile.index));
|
|
525
570
|
Object.assign(tile, {
|
|
526
571
|
id: id,
|
|
@@ -570,33 +615,16 @@ var Tileset2D = function () {
|
|
|
570
615
|
return Tileset2D;
|
|
571
616
|
}();
|
|
572
617
|
|
|
573
|
-
exports.
|
|
618
|
+
exports.Tileset2D = Tileset2D;
|
|
574
619
|
|
|
575
620
|
function updateTileStateDefault(allTiles) {
|
|
576
|
-
var _iterator10 = _createForOfIteratorHelper(allTiles),
|
|
577
|
-
_step10;
|
|
578
|
-
|
|
579
|
-
try {
|
|
580
|
-
for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
|
|
581
|
-
var _tile11 = _step10.value;
|
|
582
|
-
_tile11.state = 0;
|
|
583
|
-
}
|
|
584
|
-
} catch (err) {
|
|
585
|
-
_iterator10.e(err);
|
|
586
|
-
} finally {
|
|
587
|
-
_iterator10.f();
|
|
588
|
-
}
|
|
589
|
-
|
|
590
621
|
var _iterator11 = _createForOfIteratorHelper(allTiles),
|
|
591
622
|
_step11;
|
|
592
623
|
|
|
593
624
|
try {
|
|
594
625
|
for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
|
|
595
|
-
var
|
|
596
|
-
|
|
597
|
-
if (_tile12.isSelected && !getPlaceholderInAncestors(_tile12)) {
|
|
598
|
-
getPlaceholderInChildren(_tile12);
|
|
599
|
-
}
|
|
626
|
+
var _tile11 = _step11.value;
|
|
627
|
+
_tile11.state = 0;
|
|
600
628
|
}
|
|
601
629
|
} catch (err) {
|
|
602
630
|
_iterator11.e(err);
|
|
@@ -609,82 +637,99 @@ function updateTileStateDefault(allTiles) {
|
|
|
609
637
|
|
|
610
638
|
try {
|
|
611
639
|
for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
|
|
612
|
-
var
|
|
613
|
-
|
|
640
|
+
var _tile12 = _step12.value;
|
|
641
|
+
|
|
642
|
+
if (_tile12.isSelected && !getPlaceholderInAncestors(_tile12)) {
|
|
643
|
+
getPlaceholderInChildren(_tile12);
|
|
644
|
+
}
|
|
614
645
|
}
|
|
615
646
|
} catch (err) {
|
|
616
647
|
_iterator12.e(err);
|
|
617
648
|
} finally {
|
|
618
649
|
_iterator12.f();
|
|
619
650
|
}
|
|
620
|
-
}
|
|
621
651
|
|
|
622
|
-
function updateTileStateReplace(allTiles) {
|
|
623
652
|
var _iterator13 = _createForOfIteratorHelper(allTiles),
|
|
624
653
|
_step13;
|
|
625
654
|
|
|
626
655
|
try {
|
|
627
656
|
for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
|
|
628
|
-
var
|
|
629
|
-
|
|
657
|
+
var _tile13 = _step13.value;
|
|
658
|
+
_tile13.isVisible = Boolean(_tile13.state & TILE_STATE_VISIBLE);
|
|
630
659
|
}
|
|
631
660
|
} catch (err) {
|
|
632
661
|
_iterator13.e(err);
|
|
633
662
|
} finally {
|
|
634
663
|
_iterator13.f();
|
|
635
664
|
}
|
|
665
|
+
}
|
|
636
666
|
|
|
667
|
+
function updateTileStateReplace(allTiles) {
|
|
637
668
|
var _iterator14 = _createForOfIteratorHelper(allTiles),
|
|
638
669
|
_step14;
|
|
639
670
|
|
|
640
671
|
try {
|
|
641
672
|
for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
|
|
642
|
-
var
|
|
673
|
+
var _tile14 = _step14.value;
|
|
674
|
+
_tile14.state = 0;
|
|
675
|
+
}
|
|
676
|
+
} catch (err) {
|
|
677
|
+
_iterator14.e(err);
|
|
678
|
+
} finally {
|
|
679
|
+
_iterator14.f();
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
var _iterator15 = _createForOfIteratorHelper(allTiles),
|
|
683
|
+
_step15;
|
|
684
|
+
|
|
685
|
+
try {
|
|
686
|
+
for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
|
|
687
|
+
var _tile15 = _step15.value;
|
|
643
688
|
|
|
644
689
|
if (_tile15.isSelected) {
|
|
645
690
|
getPlaceholderInAncestors(_tile15);
|
|
646
691
|
}
|
|
647
692
|
}
|
|
648
693
|
} catch (err) {
|
|
649
|
-
|
|
694
|
+
_iterator15.e(err);
|
|
650
695
|
} finally {
|
|
651
|
-
|
|
696
|
+
_iterator15.f();
|
|
652
697
|
}
|
|
653
698
|
|
|
654
699
|
var sortedTiles = Array.from(allTiles).sort(function (t1, t2) {
|
|
655
700
|
return t1.zoom - t2.zoom;
|
|
656
701
|
});
|
|
657
702
|
|
|
658
|
-
var
|
|
659
|
-
|
|
703
|
+
var _iterator16 = _createForOfIteratorHelper(sortedTiles),
|
|
704
|
+
_step16;
|
|
660
705
|
|
|
661
706
|
try {
|
|
662
|
-
for (
|
|
663
|
-
var _tile16 =
|
|
707
|
+
for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
|
|
708
|
+
var _tile16 = _step16.value;
|
|
664
709
|
_tile16.isVisible = Boolean(_tile16.state & TILE_STATE_VISIBLE);
|
|
665
710
|
|
|
666
711
|
if (_tile16.children && (_tile16.isVisible || _tile16.state & TILE_STATE_VISITED)) {
|
|
667
|
-
var
|
|
668
|
-
|
|
712
|
+
var _iterator17 = _createForOfIteratorHelper(_tile16.children),
|
|
713
|
+
_step17;
|
|
669
714
|
|
|
670
715
|
try {
|
|
671
|
-
for (
|
|
672
|
-
var child =
|
|
716
|
+
for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
|
|
717
|
+
var child = _step17.value;
|
|
673
718
|
child.state = TILE_STATE_VISITED;
|
|
674
719
|
}
|
|
675
720
|
} catch (err) {
|
|
676
|
-
|
|
721
|
+
_iterator17.e(err);
|
|
677
722
|
} finally {
|
|
678
|
-
|
|
723
|
+
_iterator17.f();
|
|
679
724
|
}
|
|
680
725
|
} else if (_tile16.isSelected) {
|
|
681
726
|
getPlaceholderInChildren(_tile16);
|
|
682
727
|
}
|
|
683
728
|
}
|
|
684
729
|
} catch (err) {
|
|
685
|
-
|
|
730
|
+
_iterator16.e(err);
|
|
686
731
|
} finally {
|
|
687
|
-
|
|
732
|
+
_iterator16.f();
|
|
688
733
|
}
|
|
689
734
|
}
|
|
690
735
|
|
|
@@ -704,12 +749,12 @@ function getPlaceholderInAncestors(startTile) {
|
|
|
704
749
|
}
|
|
705
750
|
|
|
706
751
|
function getPlaceholderInChildren(tile) {
|
|
707
|
-
var
|
|
708
|
-
|
|
752
|
+
var _iterator18 = _createForOfIteratorHelper(tile.children),
|
|
753
|
+
_step18;
|
|
709
754
|
|
|
710
755
|
try {
|
|
711
|
-
for (
|
|
712
|
-
var child =
|
|
756
|
+
for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {
|
|
757
|
+
var child = _step18.value;
|
|
713
758
|
|
|
714
759
|
if (child.isLoaded || child.content) {
|
|
715
760
|
child.state |= TILE_STATE_VISIBLE;
|
|
@@ -718,9 +763,9 @@ function getPlaceholderInChildren(tile) {
|
|
|
718
763
|
}
|
|
719
764
|
}
|
|
720
765
|
} catch (err) {
|
|
721
|
-
|
|
766
|
+
_iterator18.e(err);
|
|
722
767
|
} finally {
|
|
723
|
-
|
|
768
|
+
_iterator18.f();
|
|
724
769
|
}
|
|
725
770
|
}
|
|
726
771
|
//# sourceMappingURL=tileset-2d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/tileset-2d/tileset-2d.ts"],"names":["TILE_STATE_VISITED","TILE_STATE_VISIBLE","STRATEGY_NEVER","STRATEGY_REPLACE","STRATEGY_DEFAULT","DEFAULT_CACHE_SCALE","STRATEGIES","updateTileStateDefault","updateTileStateReplace","DEFAULT_TILESET2D_PROPS","extent","tileSize","maxZoom","minZoom","maxCacheSize","maxCacheByteSize","refinementStrategy","zRange","maxRequests","zoomOffset","onTileLoad","onTileUnload","onTileError","Tileset2D","opts","getCullBounds","tile","_cacheByteSize","byteLength","_resizeCache","_requestScheduler","RequestScheduler","throttleRequests","Boolean","_cache","Map","_tiles","_dirty","_viewport","_selectedTiles","_frameNumber","_modelMatrix","Matrix4","_modelMatrixInverse","setOptions","every","isLoaded","some","needsReload","Object","assign","Number","isFinite","_maxZoom","Math","floor","_minZoom","ceil","values","isLoading","abort","clear","keys","id","get","includes","delete","setNeedsReload","viewport","modelMatrix","modelMatrixAsMatrix4","isModelMatrixNew","equals","_zRange","clone","invert","tileIndices","getTileIndices","modelMatrixInverse","map","index","_getTile","_rebuildTree","changed","updateTileStates","_pruneRequests","cullRect","isVisible","boundsArr","_getCullBounds","z","bbox","minX","minY","maxX","maxY","overlaps","west","east","south","north","y0","min","top","bottom","y1","max","left","right","x","y","visibilities","Array","size","i","isSelected","from","abortCandidates","ongoingRequestCount","push","length","shift","parent","children","_getNearestAncestor","Infinity","selectedTiles","overflown","sort","t1","t2","zoom","create","getTileId","Tile2DHeader","getTileMetadata","getTileZoom","set","loadData","getData","getTileData","requestScheduler","onLoad","onError","getParentIndex","allTiles","state","getPlaceholderInAncestors","getPlaceholderInChildren","sortedTiles","child","startTile","content"],"mappings":"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","sourcesContent":["import {Viewport} from '@deck.gl/core';\n\nimport {RequestScheduler} from '@loaders.gl/loader-utils';\nimport {Matrix4, equals} from '@math.gl/core';\n\nimport {Tile2DHeader} from './tile-2d-header';\n\nimport {getTileIndices, tileToBoundingBox, getCullBounds} from './utils';\nimport {Bounds, TileIndex, ZRange} from './types';\nimport {TileLoadProps} from './types';\nimport {memoize} from './memoize';\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 | 'never'\n | 'no-overlap'\n | 'best-available'\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<DataT = any> = {\n /** `getTileData` is called to retrieve the data of each tile. */\n getTileData: (props: TileLoadProps) => Promise<DataT> | DataT;\n\n /** The bounding box of the layer's data. */\n extent?: number[] | null;\n /** The pixel dimension of the tiles, usually a power of 2. */\n tileSize?: number;\n /** The max zoom level of the layer's data. @default null */\n maxZoom?: number | null;\n /** The min zoom level of the layer's data. @default 0 */\n minZoom?: number | null;\n /** The maximum number of tiles that can be cached. */\n maxCacheSize?: number | null;\n /** The maximum memory used for caching tiles. @default null */\n maxCacheByteSize?: number | null;\n /** How the tile layer refines the visibility of tiles. @default 'best-available' */\n refinementStrategy?: RefinementStrategy;\n /** Range of minimum and maximum heights in the tile. */\n zRange?: ZRange | null;\n /** The maximum number of concurrent getTileData calls. @default 6 */\n maxRequests?: number;\n /** Changes the zoom level at which the tiles are fetched. Needs to be an integer. @default 0 */\n zoomOffset?: number;\n\n /** Called when a tile successfully loads. */\n onTileLoad?: (tile: Tile2DHeader<DataT>) => void;\n /** Called when a tile is cleared from cache. */\n onTileUnload?: (tile: Tile2DHeader<DataT>) => void;\n /** Called when a tile failed to load. */\n onTileError?: (err: any, tile: Tile2DHeader<DataT>) => void;\n\n // onTileLoad: (tile: Tile2DHeader) => void;\n // onTileUnload: (tile: Tile2DHeader) => void;\n // onTileError: (error: any, tile: Tile2DHeader) => void;\n /** Called when all tiles in the current viewport are loaded. */\n // sonViewportLoad?: ((tiles: Tile2DHeader<DataT>[]) => void) | null;\n};\n\nexport const DEFAULT_TILESET2D_PROPS: Omit<Required<Tileset2DProps>, 'getTileData'> = {\n extent: null,\n tileSize: 512,\n\n maxZoom: null,\n minZoom: null,\n maxCacheSize: null,\n maxCacheByteSize: null,\n refinementStrategy: 'best-available',\n zRange: null,\n maxRequests: 6,\n zoomOffset: 0,\n\n // onTileLoad: (tile: Tile2DHeader) => void, // onTileUnload: (tile: Tile2DHeader) => void, // onTileError: (error: any, tile: Tile2DHeader) => void, /** Called when all tiles in the current viewport are loaded. */\n // onViewportLoad: ((tiles: Tile2DHeader<DataT>[]) => void) | null,\n onTileLoad: () => {},\n onTileUnload: () => {},\n onTileError: () => {}\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 class Tileset2D {\n private opts: Required<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 _zRange?: ZRange;\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 = {...DEFAULT_TILESET2D_PROPS, ...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: Boolean(opts.maxRequests && 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 as number);\n }\n if (Number.isFinite(opts.minZoom)) {\n this._minZoom = Math.ceil(opts.minZoom as number);\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 (\n !this._viewport ||\n !viewport.equals(this._viewport) ||\n !equals(this._zRange, zRange) ||\n isModelMatrixNew\n ) {\n if (isModelMatrixNew) {\n this._modelMatrixInverse = modelMatrixAsMatrix4.clone().invert();\n this._modelMatrix = modelMatrixAsMatrix4;\n }\n this._viewport = viewport;\n this._zRange = zRange;\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, true));\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 isTileVisible(\n tile: Tile2DHeader,\n cullRect?: {x: number; y: number; width: number; height: number}\n ): boolean {\n if (!tile.isVisible) {\n return false;\n }\n\n if (cullRect && this._viewport) {\n const boundsArr = this._getCullBounds({\n viewport: this._viewport,\n z: this._zRange,\n cullRect\n });\n const {bbox} = tile;\n for (const [minX, minY, maxX, maxY] of boundsArr) {\n let overlaps;\n if ('west' in bbox) {\n overlaps = bbox.west < maxX && bbox.east > minX && bbox.south < maxY && bbox.north > minY;\n } else {\n // top/bottom could be swapped depending on the indexing system\n const y0 = Math.min(bbox.top, bbox.bottom);\n const y1 = Math.max(bbox.top, bbox.bottom);\n overlaps = bbox.left < maxX && bbox.right > minX && y0 < maxY && y1 > minY;\n }\n if (overlaps) {\n return true;\n }\n }\n return false;\n }\n return true;\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): Record<string, any> {\n const {tileSize} = this.opts;\n // @ts-expect-error\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 private 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 // @ts-expect-error called only when _selectedTiles is already defined\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 private _getCullBounds = memoize(getCullBounds);\n\n private _pruneRequests(): void {\n const {maxRequests = 0} = 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 private _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 private _resizeCache() {\n const {_cache, opts} = this;\n\n const maxCacheSize =\n opts.maxCacheSize ||\n // @ts-expect-error called only when selectedTiles is initialized\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 && !tile.isSelected) {\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 private _getTile(index: TileIndex, create: true): Tile2DHeader;\n private _getTile(index: TileIndex, create?: false): Tile2DHeader | undefined;\n private _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"}
|
|
File without changes
|
|
File without changes
|