@loaders.gl/tiles 3.1.0-alpha.2 → 3.1.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/bundle.d.ts +2 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/bundle.js +8134 -5
- package/dist/constants.d.ts +32 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +29 -26
- package/dist/es5/bundle.js +7 -0
- package/dist/es5/bundle.js.map +1 -0
- package/dist/es5/constants.js +44 -0
- package/dist/es5/constants.js.map +1 -0
- package/dist/es5/index.js +104 -0
- package/dist/es5/index.js.map +1 -0
- package/dist/es5/tileset/helpers/3d-tiles-options.js +13 -0
- package/dist/es5/tileset/helpers/3d-tiles-options.js.map +1 -0
- package/dist/es5/tileset/helpers/bounding-volume.js +102 -0
- package/dist/es5/tileset/helpers/bounding-volume.js.map +1 -0
- package/dist/es5/tileset/helpers/frame-state.js +69 -0
- package/dist/es5/tileset/helpers/frame-state.js.map +1 -0
- package/dist/es5/tileset/helpers/i3s-lod.js +84 -0
- package/dist/es5/tileset/helpers/i3s-lod.js.map +1 -0
- package/dist/es5/tileset/helpers/tiles-3d-lod.js +123 -0
- package/dist/es5/tileset/helpers/tiles-3d-lod.js.map +1 -0
- package/dist/es5/tileset/helpers/transform-utils.js +71 -0
- package/dist/es5/tileset/helpers/transform-utils.js.map +1 -0
- package/dist/es5/tileset/helpers/zoom.js +45 -0
- package/dist/es5/tileset/helpers/zoom.js.map +1 -0
- package/dist/es5/tileset/tile-3d.js +510 -0
- package/dist/es5/tileset/tile-3d.js.map +1 -0
- package/dist/es5/tileset/tileset-3d.js +656 -0
- package/dist/es5/tileset/tileset-3d.js.map +1 -0
- package/dist/es5/tileset/tileset-cache.js +88 -0
- package/dist/es5/tileset/tileset-cache.js.map +1 -0
- package/dist/es5/tileset/traversers/i3s-tile-manager.js +57 -0
- package/dist/es5/tileset/traversers/i3s-tile-manager.js.map +1 -0
- package/dist/es5/tileset/traversers/i3s-tileset-traverser.js +95 -0
- package/dist/es5/tileset/traversers/i3s-tileset-traverser.js.map +1 -0
- package/dist/es5/tileset/traversers/tileset-3d-traverser.js +66 -0
- package/dist/es5/tileset/traversers/tileset-3d-traverser.js.map +1 -0
- package/dist/es5/tileset/traversers/tileset-traverser.js +304 -0
- package/dist/es5/tileset/traversers/tileset-traverser.js.map +1 -0
- package/dist/es5/utils/doubly-linked-list-node.js +25 -0
- package/dist/es5/utils/doubly-linked-list-node.js.map +1 -0
- package/dist/es5/utils/doubly-linked-list.js +92 -0
- package/dist/es5/utils/doubly-linked-list.js.map +1 -0
- package/dist/es5/utils/managed-array.js +127 -0
- package/dist/es5/utils/managed-array.js.map +1 -0
- package/dist/esm/bundle.js +5 -0
- package/dist/esm/bundle.js.map +1 -0
- package/dist/esm/constants.js +32 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/tileset/helpers/3d-tiles-options.js +6 -0
- package/dist/esm/tileset/helpers/3d-tiles-options.js.map +1 -0
- package/dist/esm/tileset/helpers/bounding-volume.js +88 -0
- package/dist/esm/tileset/helpers/bounding-volume.js.map +1 -0
- package/dist/esm/tileset/helpers/frame-state.js +51 -0
- package/dist/esm/tileset/helpers/frame-state.js.map +1 -0
- package/dist/esm/tileset/helpers/i3s-lod.js +67 -0
- package/dist/esm/tileset/helpers/i3s-lod.js.map +1 -0
- package/dist/esm/tileset/helpers/tiles-3d-lod.js +105 -0
- package/dist/esm/tileset/helpers/tiles-3d-lod.js.map +1 -0
- package/dist/esm/tileset/helpers/transform-utils.js +58 -0
- package/dist/esm/tileset/helpers/transform-utils.js.map +1 -0
- package/dist/esm/tileset/helpers/zoom.js +36 -0
- package/dist/esm/tileset/helpers/zoom.js.map +1 -0
- package/dist/esm/tileset/tile-3d.js +534 -0
- package/dist/esm/tileset/tile-3d.js.map +1 -0
- package/dist/esm/tileset/tileset-3d.js +674 -0
- package/dist/esm/tileset/tileset-3d.js.map +1 -0
- package/dist/esm/tileset/tileset-cache.js +79 -0
- package/dist/esm/tileset/tileset-cache.js.map +1 -0
- package/dist/esm/tileset/traversers/i3s-tile-manager.js +45 -0
- package/dist/esm/tileset/traversers/i3s-tile-manager.js.map +1 -0
- package/dist/esm/tileset/traversers/i3s-tileset-traverser.js +80 -0
- package/dist/esm/tileset/traversers/i3s-tileset-traverser.js.map +1 -0
- package/dist/esm/tileset/traversers/tileset-3d-traverser.js +53 -0
- package/dist/esm/tileset/traversers/tileset-3d-traverser.js.map +1 -0
- package/dist/esm/tileset/traversers/tileset-traverser.js +296 -0
- package/dist/esm/tileset/traversers/tileset-traverser.js.map +1 -0
- package/dist/esm/utils/doubly-linked-list-node.js +16 -0
- package/dist/esm/utils/doubly-linked-list-node.js.map +1 -0
- package/dist/esm/utils/doubly-linked-list.js +81 -0
- package/dist/esm/utils/doubly-linked-list.js.map +1 -0
- package/dist/esm/utils/managed-array.js +117 -0
- package/dist/esm/utils/managed-array.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -9
- package/dist/tileset/helpers/3d-tiles-options.d.ts +4 -0
- package/dist/tileset/helpers/3d-tiles-options.d.ts.map +1 -0
- package/dist/tileset/helpers/3d-tiles-options.js +8 -5
- package/dist/tileset/helpers/bounding-volume.d.ts +9 -0
- package/dist/tileset/helpers/bounding-volume.d.ts.map +1 -0
- package/dist/tileset/helpers/bounding-volume.js +159 -70
- package/dist/tileset/helpers/frame-state.d.ts +17 -0
- package/dist/tileset/helpers/frame-state.d.ts.map +1 -0
- package/dist/tileset/helpers/frame-state.js +67 -48
- package/dist/tileset/helpers/i3s-lod.d.ts +20 -0
- package/dist/tileset/helpers/i3s-lod.d.ts.map +1 -0
- package/dist/tileset/helpers/i3s-lod.js +80 -105
- package/dist/tileset/helpers/tiles-3d-lod.d.ts +8 -0
- package/dist/tileset/helpers/tiles-3d-lod.d.ts.map +1 -0
- package/dist/tileset/helpers/tiles-3d-lod.js +111 -100
- package/dist/tileset/helpers/transform-utils.d.ts +2 -0
- package/dist/tileset/helpers/transform-utils.d.ts.map +1 -0
- package/dist/tileset/helpers/transform-utils.js +50 -53
- package/dist/tileset/helpers/zoom.d.ts +7 -0
- package/dist/tileset/helpers/zoom.d.ts.map +1 -0
- package/dist/tileset/helpers/zoom.js +36 -30
- package/dist/tileset/tile-3d.d.ts +174 -0
- package/dist/tileset/tile-3d.d.ts.map +1 -0
- package/dist/tileset/tile-3d.js +550 -530
- package/dist/tileset/tileset-3d.d.ts +172 -0
- package/dist/tileset/tileset-3d.d.ts.map +1 -0
- package/dist/tileset/tileset-3d.js +576 -649
- package/dist/tileset/tileset-cache.d.ts +18 -0
- package/dist/tileset/tileset-cache.d.ts.map +1 -0
- package/dist/tileset/tileset-cache.js +71 -71
- package/dist/tileset/traversers/i3s-tile-manager.d.ts +8 -0
- package/dist/tileset/traversers/i3s-tile-manager.d.ts.map +1 -0
- package/dist/tileset/traversers/i3s-tile-manager.js +31 -40
- package/dist/tileset/traversers/i3s-tileset-traverser.d.ts +18 -0
- package/dist/tileset/traversers/i3s-tileset-traverser.d.ts.map +1 -0
- package/dist/tileset/traversers/i3s-tileset-traverser.js +81 -76
- package/dist/tileset/traversers/tileset-3d-traverser.d.ts +7 -0
- package/dist/tileset/traversers/tileset-3d-traverser.d.ts.map +1 -0
- package/dist/tileset/traversers/tileset-3d-traverser.js +51 -49
- package/dist/tileset/traversers/tileset-traverser.d.ts +52 -0
- package/dist/tileset/traversers/tileset-traverser.d.ts.map +1 -0
- package/dist/tileset/traversers/tileset-traverser.js +274 -276
- package/dist/utils/doubly-linked-list-node.d.ts +12 -0
- package/dist/utils/doubly-linked-list-node.d.ts.map +1 -0
- package/dist/utils/doubly-linked-list-node.js +16 -8
- package/dist/utils/doubly-linked-list.d.ts +31 -0
- package/dist/utils/doubly-linked-list.d.ts.map +1 -0
- package/dist/utils/doubly-linked-list.js +94 -72
- package/dist/utils/managed-array.d.ts +85 -0
- package/dist/utils/managed-array.d.ts.map +1 -0
- package/dist/utils/managed-array.js +143 -103
- package/package.json +11 -9
- package/src/bundle.ts +2 -3
- package/src/index.ts +1 -0
- package/src/tileset/helpers/i3s-lod.ts +72 -96
- package/src/tileset/helpers/transform-utils.ts +3 -1
- package/src/tileset/tile-3d.ts +2 -2
- package/src/tileset/tileset-cache.ts +2 -0
- package/src/tileset/traversers/i3s-tileset-traverser.ts +2 -3
- package/src/utils/{doubly-linked-list-node.js → doubly-linked-list-node.ts} +4 -0
- package/src/utils/{doubly-linked-list.js → doubly-linked-list.ts} +3 -5
- package/src/utils/{managed-array.js → managed-array.ts} +4 -1
- package/dist/bundle.js.map +0 -1
- package/dist/constants.js.map +0 -1
- package/dist/dist.min.js +0 -2
- package/dist/dist.min.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/tileset/helpers/3d-tiles-options.js.map +0 -1
- package/dist/tileset/helpers/bounding-volume.js.map +0 -1
- package/dist/tileset/helpers/frame-state.js.map +0 -1
- package/dist/tileset/helpers/i3s-lod.js.map +0 -1
- package/dist/tileset/helpers/tiles-3d-lod.js.map +0 -1
- package/dist/tileset/helpers/transform-utils.js.map +0 -1
- package/dist/tileset/helpers/zoom.js.map +0 -1
- package/dist/tileset/tile-3d.js.map +0 -1
- package/dist/tileset/tileset-3d.js.map +0 -1
- package/dist/tileset/tileset-cache.js.map +0 -1
- package/dist/tileset/traversers/i3s-tile-manager.js.map +0 -1
- package/dist/tileset/traversers/i3s-tileset-traverser.js.map +0 -1
- package/dist/tileset/traversers/tileset-3d-traverser.js.map +0 -1
- package/dist/tileset/traversers/tileset-traverser.js.map +0 -1
- package/dist/utils/doubly-linked-list-node.js.map +0 -1
- package/dist/utils/doubly-linked-list.js.map +0 -1
- package/dist/utils/managed-array.js.map +0 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stores tiles with content loaded.
|
|
3
|
+
*
|
|
4
|
+
* @private
|
|
5
|
+
*/
|
|
6
|
+
export default class TilesetCache {
|
|
7
|
+
private _list;
|
|
8
|
+
private _sentinel;
|
|
9
|
+
private _trimTiles;
|
|
10
|
+
constructor();
|
|
11
|
+
reset(): void;
|
|
12
|
+
touch(tile: any): void;
|
|
13
|
+
add(tileset: any, tile: any, addCallback: any): void;
|
|
14
|
+
unloadTile(tileset: any, tile: any, unloadCallback?: any): void;
|
|
15
|
+
unloadTiles(tileset: any, unloadCallback: any): void;
|
|
16
|
+
trim(): void;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=tileset-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tileset-cache.d.ts","sourceRoot":"","sources":["../../src/tileset/tileset-cache.ts"],"names":[],"mappings":"AASA;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,UAAU,CAAU;;IAU5B,KAAK;IAOL,KAAK,CAAC,IAAI,KAAA;IAOV,GAAG,CAAC,OAAO,KAAA,EAAE,IAAI,KAAA,EAAE,WAAW,KAAA;IAU9B,UAAU,CAAC,OAAO,KAAA,EAAE,IAAI,KAAA,EAAE,cAAc,CAAC,KAAA;IAazC,WAAW,CAAC,OAAO,KAAA,EAAE,cAAc,KAAA;IA0BnC,IAAI;CAGL"}
|
|
@@ -1,79 +1,79 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
// This file is derived from the Cesium code base under Apache 2 license
|
|
3
|
+
// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md
|
|
4
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
6
|
+
};
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
const doubly_linked_list_1 = __importDefault(require("../utils/doubly-linked-list"));
|
|
4
9
|
function defined(x) {
|
|
5
|
-
|
|
10
|
+
return x !== undefined && x !== null;
|
|
6
11
|
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
reset() {
|
|
22
|
-
this._list.splice(this._list.tail, this._sentinel);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
touch(tile) {
|
|
26
|
-
const node = tile._cacheNode;
|
|
27
|
-
|
|
28
|
-
if (defined(node)) {
|
|
29
|
-
this._list.splice(this._sentinel, node);
|
|
12
|
+
/**
|
|
13
|
+
* Stores tiles with content loaded.
|
|
14
|
+
*
|
|
15
|
+
* @private
|
|
16
|
+
*/
|
|
17
|
+
class TilesetCache {
|
|
18
|
+
constructor() {
|
|
19
|
+
// [head, sentinel) -> tiles that weren't selected this frame and may be removed from the cache
|
|
20
|
+
// (sentinel, tail] -> tiles that were selected this frame
|
|
21
|
+
this._list = new doubly_linked_list_1.default();
|
|
22
|
+
this._sentinel = this._list.add('sentinel');
|
|
23
|
+
this._trimTiles = false;
|
|
30
24
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
if (addCallback) {
|
|
38
|
-
addCallback(tileset, tile);
|
|
39
|
-
}
|
|
25
|
+
reset() {
|
|
26
|
+
// Move sentinel node to the tail so, at the start of the frame, all tiles
|
|
27
|
+
// may be potentially replaced. Tiles are moved to the right of the sentinel
|
|
28
|
+
// when they are selected so they will not be replaced.
|
|
29
|
+
this._list.splice(this._list.tail, this._sentinel);
|
|
40
30
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
if (!defined(node)) {
|
|
47
|
-
return;
|
|
31
|
+
touch(tile) {
|
|
32
|
+
const node = tile._cacheNode;
|
|
33
|
+
if (defined(node)) {
|
|
34
|
+
this._list.splice(this._sentinel, node);
|
|
35
|
+
}
|
|
48
36
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
37
|
+
add(tileset, tile, addCallback) {
|
|
38
|
+
if (!defined(tile._cacheNode)) {
|
|
39
|
+
tile._cacheNode = this._list.add(tile);
|
|
40
|
+
if (addCallback) {
|
|
41
|
+
addCallback(tileset, tile);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
56
44
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
45
|
+
unloadTile(tileset, tile, unloadCallback) {
|
|
46
|
+
const node = tile._cacheNode;
|
|
47
|
+
if (!defined(node)) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
this._list.remove(node);
|
|
51
|
+
tile._cacheNode = undefined;
|
|
52
|
+
if (unloadCallback) {
|
|
53
|
+
unloadCallback(tileset, tile);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
unloadTiles(tileset, unloadCallback) {
|
|
57
|
+
const trimTiles = this._trimTiles;
|
|
58
|
+
this._trimTiles = false;
|
|
59
|
+
const list = this._list;
|
|
60
|
+
const maximumMemoryUsageInBytes = tileset.maximumMemoryUsage * 1024 * 1024;
|
|
61
|
+
// Traverse the list only to the sentinel since tiles/nodes to the
|
|
62
|
+
// right of the sentinel were used this frame.
|
|
63
|
+
// The sub-list to the left of the sentinel is ordered from LRU to MRU.
|
|
64
|
+
const sentinel = this._sentinel;
|
|
65
|
+
let node = list.head;
|
|
66
|
+
while (node !== sentinel &&
|
|
67
|
+
(tileset.gpuMemoryUsageInBytes > maximumMemoryUsageInBytes || trimTiles)) {
|
|
68
|
+
// @ts-expect-error
|
|
69
|
+
const tile = node.item;
|
|
70
|
+
// @ts-expect-error
|
|
71
|
+
node = node.next;
|
|
72
|
+
this.unloadTile(tileset, tile, unloadCallback);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
trim() {
|
|
76
|
+
this._trimTiles = true;
|
|
71
77
|
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
trim() {
|
|
75
|
-
this._trimTiles = true;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
78
|
}
|
|
79
|
-
|
|
79
|
+
exports.default = TilesetCache;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i3s-tile-manager.d.ts","sourceRoot":"","sources":["../../../src/tileset/traversers/i3s-tile-manager.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,OAAO,OAAO,cAAc;IACjC,OAAO,CAAC,UAAU,CAAS;;IAM3B,GAAG,CAAC,OAAO,KAAA,EAAE,GAAG,KAAA,EAAE,QAAQ,KAAA,EAAE,UAAU,KAAA;IAetC,MAAM,CAAC,GAAG,KAAA,EAAE,UAAU,KAAA;IAMtB,IAAI,CAAC,GAAG,KAAA;CAGT"}
|
|
@@ -1,45 +1,36 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
3
|
const STATUS = {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
REQUESTED: 'REQUESTED',
|
|
5
|
+
COMPLETED: 'COMPLETED',
|
|
6
|
+
ERROR: 'ERROR'
|
|
6
7
|
};
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
this._statusMap = {};
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
add(request, key, callback, frameState) {
|
|
15
|
-
if (!this._statusMap[key]) {
|
|
16
|
-
this._statusMap[key] = {
|
|
17
|
-
request,
|
|
18
|
-
callback,
|
|
19
|
-
key,
|
|
20
|
-
frameState,
|
|
21
|
-
status: STATUS.REQUESTED
|
|
22
|
-
};
|
|
23
|
-
request().then(data => {
|
|
24
|
-
this._statusMap[key].status = STATUS.COMPLETED;
|
|
25
|
-
|
|
26
|
-
this._statusMap[key].callback(data, frameState);
|
|
27
|
-
}).catch(error => {
|
|
28
|
-
this._statusMap[key].status = STATUS.ERROR;
|
|
29
|
-
callback(error);
|
|
30
|
-
});
|
|
8
|
+
// A helper class to manage tile metadata fetching
|
|
9
|
+
class I3STileManager {
|
|
10
|
+
constructor() {
|
|
11
|
+
this._statusMap = {};
|
|
31
12
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
13
|
+
add(request, key, callback, frameState) {
|
|
14
|
+
if (!this._statusMap[key]) {
|
|
15
|
+
this._statusMap[key] = { request, callback, key, frameState, status: STATUS.REQUESTED };
|
|
16
|
+
request()
|
|
17
|
+
.then((data) => {
|
|
18
|
+
this._statusMap[key].status = STATUS.COMPLETED;
|
|
19
|
+
this._statusMap[key].callback(data, frameState);
|
|
20
|
+
})
|
|
21
|
+
.catch((error) => {
|
|
22
|
+
this._statusMap[key].status = STATUS.ERROR;
|
|
23
|
+
callback(error);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
update(key, frameState) {
|
|
28
|
+
if (this._statusMap[key]) {
|
|
29
|
+
this._statusMap[key].frameState = frameState;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
find(key) {
|
|
33
|
+
return this._statusMap[key];
|
|
37
34
|
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
find(key) {
|
|
41
|
-
return this._statusMap[key];
|
|
42
|
-
}
|
|
43
|
-
|
|
44
35
|
}
|
|
45
|
-
|
|
36
|
+
exports.default = I3STileManager;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import TilesetTraverser from './tileset-traverser';
|
|
2
|
+
export default class I3STilesetTraverser extends TilesetTraverser {
|
|
3
|
+
private _tileManager;
|
|
4
|
+
constructor(options: any);
|
|
5
|
+
shouldRefine(tile: any, frameState: any): boolean;
|
|
6
|
+
updateChildTiles(tile: any, frameState: any): boolean;
|
|
7
|
+
_loadTile(nodeId: any, tileset: any): Promise<any>;
|
|
8
|
+
/**
|
|
9
|
+
* The callback to init TileHeader instance after loading the tile JSON
|
|
10
|
+
* @param {Object} header - the tile JSON from a dataset
|
|
11
|
+
* @param {TileHeader} tile - the parent TileHeader instance
|
|
12
|
+
* @param {string} extendedId - optional ID to separate copies of a tile for different viewports.
|
|
13
|
+
* const extendedId = `${tile.id}-${frameState.viewport.id}`;
|
|
14
|
+
* @return {void}
|
|
15
|
+
*/
|
|
16
|
+
_onTileLoad(header: any, tile: any, extendedId: any): void;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=i3s-tileset-traverser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i3s-tileset-traverser.d.ts","sourceRoot":"","sources":["../../../src/tileset/traversers/i3s-tileset-traverser.ts"],"names":[],"mappings":"AACA,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AAMnD,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,gBAAgB;IAC/D,OAAO,CAAC,YAAY,CAAiB;gBAEzB,OAAO,KAAA;IAKnB,YAAY,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IAK7B,gBAAgB,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA,GAAG,OAAO;IAoCrC,SAAS,CAAC,MAAM,KAAA,EAAE,OAAO,KAAA;IAgB/B;;;;;;;OAOG;IACH,WAAW,CAAC,MAAM,KAAA,EAAE,IAAI,KAAA,EAAE,UAAU,KAAA;CAYrC"}
|
|
@@ -1,80 +1,85 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const core_1 = require("@loaders.gl/core");
|
|
7
|
+
const tileset_traverser_1 = __importDefault(require("./tileset-traverser"));
|
|
8
|
+
const i3s_lod_1 = require("../helpers/i3s-lod");
|
|
9
|
+
const tile_3d_1 = __importDefault(require("../tile-3d"));
|
|
10
|
+
const i3s_tile_manager_1 = __importDefault(require("./i3s-tile-manager"));
|
|
11
|
+
class I3STilesetTraverser extends tileset_traverser_1.default {
|
|
12
|
+
constructor(options) {
|
|
13
|
+
super(options);
|
|
14
|
+
this._tileManager = new i3s_tile_manager_1.default();
|
|
15
|
+
}
|
|
16
|
+
shouldRefine(tile, frameState) {
|
|
17
|
+
tile._lodJudge = (0, i3s_lod_1.getLodStatus)(tile, frameState);
|
|
18
|
+
return tile._lodJudge === 'DIG';
|
|
19
|
+
}
|
|
20
|
+
updateChildTiles(tile, frameState) {
|
|
21
|
+
const children = tile.header.children || [];
|
|
22
|
+
// children which are already fetched and constructed as Tile3D instances
|
|
23
|
+
const childTiles = tile.children;
|
|
24
|
+
const tileset = tile.tileset;
|
|
25
|
+
for (const child of children) {
|
|
26
|
+
const extendedId = `${child.id}-${frameState.viewport.id}`;
|
|
27
|
+
// if child tile is not fetched
|
|
28
|
+
const childTile = childTiles && childTiles.find((t) => t.id === extendedId);
|
|
29
|
+
if (!childTile) {
|
|
30
|
+
let request = () => this._loadTile(child.id, tileset);
|
|
31
|
+
const cachedRequest = this._tileManager.find(extendedId);
|
|
32
|
+
if (!cachedRequest) {
|
|
33
|
+
// eslint-disable-next-line max-depth
|
|
34
|
+
if (tileset.tileset.nodePages) {
|
|
35
|
+
request = () => tileset.tileset.nodePagesTile.formTileFromNodePages(child.id);
|
|
36
|
+
}
|
|
37
|
+
this._tileManager.add(request, extendedId, (header) => this._onTileLoad(header, tile, extendedId), frameState);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
// update frameNumber since it is still needed in current frame
|
|
41
|
+
this._tileManager.update(extendedId, frameState);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else if (childTile) {
|
|
45
|
+
// if child tile is fetched and available
|
|
46
|
+
this.updateTile(childTile, frameState);
|
|
47
|
+
}
|
|
43
48
|
}
|
|
44
|
-
|
|
45
|
-
this.updateTile(childTile, frameState);
|
|
46
|
-
}
|
|
49
|
+
return false;
|
|
47
50
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
51
|
+
async _loadTile(nodeId, tileset) {
|
|
52
|
+
const { loader } = tileset;
|
|
53
|
+
const nodeUrl = tileset.getTileUrl(`${tileset.url}/nodes/${nodeId}`);
|
|
54
|
+
// load metadata
|
|
55
|
+
const options = {
|
|
56
|
+
...tileset.loadOptions,
|
|
57
|
+
i3s: {
|
|
58
|
+
...tileset.loadOptions.i3s,
|
|
59
|
+
isTileHeader: true,
|
|
60
|
+
loadContent: false
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
return await (0, core_1.load)(nodeUrl, loader, options);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* The callback to init TileHeader instance after loading the tile JSON
|
|
67
|
+
* @param {Object} header - the tile JSON from a dataset
|
|
68
|
+
* @param {TileHeader} tile - the parent TileHeader instance
|
|
69
|
+
* @param {string} extendedId - optional ID to separate copies of a tile for different viewports.
|
|
70
|
+
* const extendedId = `${tile.id}-${frameState.viewport.id}`;
|
|
71
|
+
* @return {void}
|
|
72
|
+
*/
|
|
73
|
+
_onTileLoad(header, tile, extendedId) {
|
|
74
|
+
// after child tile is fetched
|
|
75
|
+
const childTile = new tile_3d_1.default(tile.tileset, header, tile, extendedId);
|
|
76
|
+
tile.children.push(childTile);
|
|
77
|
+
const frameState = this._tileManager.find(childTile.id).frameState;
|
|
78
|
+
this.updateTile(childTile, frameState);
|
|
79
|
+
// after tile fetched, resume traversal if still in current update/traversal frame
|
|
80
|
+
if (this._frameNumber === frameState.frameNumber) {
|
|
81
|
+
this.executeTraversal(childTile, frameState);
|
|
82
|
+
}
|
|
76
83
|
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
84
|
}
|
|
80
|
-
|
|
85
|
+
exports.default = I3STilesetTraverser;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import TilesetTraverser from './tileset-traverser';
|
|
2
|
+
export default class Tileset3DTraverser extends TilesetTraverser {
|
|
3
|
+
compareDistanceToCamera(a: any, b: any): number;
|
|
4
|
+
updateTileVisibility(tile: any, frameState: any): void;
|
|
5
|
+
meetsScreenSpaceErrorEarly(tile: any, frameState: any): boolean;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=tileset-3d-traverser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tileset-3d-traverser.d.ts","sourceRoot":"","sources":["../../../src/tileset/traversers/tileset-3d-traverser.ts"],"names":[],"mappings":"AAIA,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AAEnD,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,gBAAgB;IAC9D,uBAAuB,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA;IAO5B,oBAAoB,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IAmCrC,0BAA0B,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;CAS5C"}
|
|
@@ -1,53 +1,55 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
return
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
// This file is derived from the Cesium code base under Apache 2 license
|
|
3
|
+
// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md
|
|
4
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
6
|
+
};
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
const constants_1 = require("../../constants");
|
|
9
|
+
const tileset_traverser_1 = __importDefault(require("./tileset-traverser"));
|
|
10
|
+
class Tileset3DTraverser extends tileset_traverser_1.default {
|
|
11
|
+
compareDistanceToCamera(a, b) {
|
|
12
|
+
// Sort by farthest child first since this is going on a stack
|
|
13
|
+
return b._distanceToCamera === 0 && a._distanceToCamera === 0
|
|
14
|
+
? b._centerZDepth - a._centerZDepth
|
|
15
|
+
: b._distanceToCamera - a._distanceToCamera;
|
|
13
16
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
updateTileVisibility(tile, frameState) {
|
|
18
|
+
super.updateTileVisibility(tile, frameState);
|
|
19
|
+
// Optimization - if none of the tile's children are visible then this tile isn't visible
|
|
20
|
+
if (!tile.isVisibleAndInRequestVolume) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const hasChildren = tile.children.length > 0;
|
|
24
|
+
if (tile.hasTilesetContent && hasChildren) {
|
|
25
|
+
// Use the root tile's visibility instead of this tile's visibility.
|
|
26
|
+
// The root tile may be culled by the children bounds optimization in which
|
|
27
|
+
// case this tile should also be culled.
|
|
28
|
+
const firstChild = tile.children[0];
|
|
29
|
+
this.updateTileVisibility(firstChild, frameState);
|
|
30
|
+
tile._visible = firstChild._visible;
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (this.meetsScreenSpaceErrorEarly(tile, frameState)) {
|
|
34
|
+
tile._visible = false;
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const replace = tile.refine === constants_1.TILE_REFINEMENT.REPLACE;
|
|
38
|
+
const useOptimization = tile._optimChildrenWithinParent === constants_1.TILE3D_OPTIMIZATION_HINT.USE_OPTIMIZATION;
|
|
39
|
+
if (replace && useOptimization && hasChildren) {
|
|
40
|
+
if (!this.anyChildrenVisible(tile, frameState)) {
|
|
41
|
+
tile._visible = false;
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
22
45
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
46
|
+
meetsScreenSpaceErrorEarly(tile, frameState) {
|
|
47
|
+
const { parent } = tile;
|
|
48
|
+
if (!parent || parent.hasTilesetContent || parent.refine !== constants_1.TILE_REFINEMENT.ADD) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
// Use parent's geometric error with child's box to see if the tile already meet the SSE
|
|
52
|
+
return !this.shouldRefine(tile, frameState, true);
|
|
27
53
|
}
|
|
28
|
-
|
|
29
|
-
const replace = tile.refine === TILE_REFINEMENT.REPLACE;
|
|
30
|
-
const useOptimization = tile._optimChildrenWithinParent === TILE3D_OPTIMIZATION_HINT.USE_OPTIMIZATION;
|
|
31
|
-
|
|
32
|
-
if (replace && useOptimization && hasChildren) {
|
|
33
|
-
if (!this.anyChildrenVisible(tile, frameState)) {
|
|
34
|
-
tile._visible = false;
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
meetsScreenSpaceErrorEarly(tile, frameState) {
|
|
41
|
-
const {
|
|
42
|
-
parent
|
|
43
|
-
} = tile;
|
|
44
|
-
|
|
45
|
-
if (!parent || parent.hasTilesetContent || parent.refine !== TILE_REFINEMENT.ADD) {
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
return !this.shouldRefine(tile, frameState, true);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
54
|
}
|
|
53
|
-
|
|
55
|
+
exports.default = Tileset3DTraverser;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import ManagedArray from '../../utils/managed-array';
|
|
2
|
+
export declare type TilesetTraverserProps = {
|
|
3
|
+
loadSiblings?: boolean;
|
|
4
|
+
skipLevelOfDetail?: boolean;
|
|
5
|
+
maximumScreenSpaceError?: number;
|
|
6
|
+
onTraversalEnd?: (frameState: any) => any;
|
|
7
|
+
viewportTraversersMap?: {
|
|
8
|
+
[key: string]: any;
|
|
9
|
+
};
|
|
10
|
+
basePath?: string;
|
|
11
|
+
};
|
|
12
|
+
export declare type Props = {
|
|
13
|
+
loadSiblings: boolean;
|
|
14
|
+
skipLevelOfDetail: boolean;
|
|
15
|
+
updateTransforms: boolean;
|
|
16
|
+
maximumScreenSpaceError: number;
|
|
17
|
+
onTraversalEnd: (frameState: any) => any;
|
|
18
|
+
viewportTraversersMap: {
|
|
19
|
+
[key: string]: any;
|
|
20
|
+
};
|
|
21
|
+
basePath: string;
|
|
22
|
+
};
|
|
23
|
+
export declare const DEFAULT_PROPS: Props;
|
|
24
|
+
export default class TilesetTraverser {
|
|
25
|
+
options: Props;
|
|
26
|
+
root: any;
|
|
27
|
+
requestedTiles: object;
|
|
28
|
+
selectedTiles: object;
|
|
29
|
+
emptyTiles: object;
|
|
30
|
+
protected _traversalStack: ManagedArray;
|
|
31
|
+
protected _emptyTraversalStack: ManagedArray;
|
|
32
|
+
protected _frameNumber: number | null;
|
|
33
|
+
constructor(options: TilesetTraverserProps);
|
|
34
|
+
traverse(root: any, frameState: any, options: any): void;
|
|
35
|
+
reset(): void;
|
|
36
|
+
executeTraversal(root: any, frameState: any): void;
|
|
37
|
+
updateChildTiles(tile: any, frameState: any): boolean;
|
|
38
|
+
updateAndPushChildren(tile: any, frameState: any, stack: any, depth: any): boolean;
|
|
39
|
+
updateTile(tile: any, frameState: any): void;
|
|
40
|
+
selectTile(tile: any, frameState: any): void;
|
|
41
|
+
loadTile(tile: any, frameState: any): void;
|
|
42
|
+
touchTile(tile: any, frameState: any): void;
|
|
43
|
+
canTraverse(tile: any, frameState: any, useParentMetric?: boolean, ignoreVisibility?: boolean): boolean;
|
|
44
|
+
shouldLoadTile(tile: any): any;
|
|
45
|
+
shouldSelectTile(tile: any): any;
|
|
46
|
+
shouldRefine(tile: any, frameState: any, useParentMetric: any): boolean;
|
|
47
|
+
updateTileVisibility(tile: any, frameState: any): void;
|
|
48
|
+
compareDistanceToCamera(b: any, a: any): number;
|
|
49
|
+
anyChildrenVisible(tile: any, frameState: any): boolean;
|
|
50
|
+
executeEmptyTraversal(root: any, frameState: any): boolean;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=tileset-traverser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tileset-traverser.d.ts","sourceRoot":"","sources":["../../../src/tileset/traversers/tileset-traverser.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,2BAA2B,CAAC;AAGrD,oBAAY,qBAAqB,GAAG;IAClC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,cAAc,CAAC,EAAE,CAAC,UAAU,KAAA,KAAK,GAAG,CAAC;IACrC,qBAAqB,CAAC,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,CAAC;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,oBAAY,KAAK,GAAG;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,uBAAuB,EAAE,MAAM,CAAC;IAChC,cAAc,EAAE,CAAC,UAAU,KAAA,KAAK,GAAG,CAAC;IACpC,qBAAqB,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAQ3B,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACnC,OAAO,EAAE,KAAK,CAAC;IAEf,IAAI,EAAE,GAAG,CAAC;IACV,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IAEnB,SAAS,CAAC,eAAe,EAAE,YAAY,CAAC;IACxC,SAAS,CAAC,oBAAoB,EAAE,YAAY,CAAC;IAC7C,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;gBAG1B,OAAO,EAAE,qBAAqB;IAuB1C,QAAQ,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA,EAAE,OAAO,KAAA;IAclC,KAAK;IAgBL,gBAAgB,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IA+DjC,gBAAgB,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IASjC,qBAAqB,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA,EAAE,KAAK,KAAA,EAAE,KAAK,KAAA;IAuDpD,UAAU,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IAK3B,UAAU,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IAS3B,QAAQ,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IASzB,SAAS,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IAQ1B,WAAW,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA,EAAE,eAAe,UAAQ,EAAE,gBAAgB,UAAQ;IAmB/E,cAAc,CAAC,IAAI,KAAA;IAMnB,gBAAgB,CAAC,IAAI,KAAA;IAOrB,YAAY,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA,EAAE,eAAe,KAAA;IAS9C,oBAAoB,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IAiBrC,uBAAuB,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA;IAI5B,kBAAkB,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IAWnC,qBAAqB,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;CAqCvC"}
|