@loaders.gl/tiles 3.3.0-alpha.1 → 3.3.0-alpha.10
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.min.js +1027 -1431
- package/dist/es5/bundle.js +0 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/constants.js +2 -1
- package/dist/es5/constants.js.map +1 -1
- package/dist/es5/index.js +26 -36
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/tileset/helpers/3d-tiles-options.js +0 -1
- package/dist/es5/tileset/helpers/3d-tiles-options.js.map +1 -1
- package/dist/es5/tileset/helpers/bounding-volume.js +7 -26
- package/dist/es5/tileset/helpers/bounding-volume.js.map +1 -1
- package/dist/es5/tileset/helpers/frame-state.js +45 -50
- package/dist/es5/tileset/helpers/frame-state.js.map +1 -1
- package/dist/es5/tileset/helpers/i3s-lod.js +0 -13
- package/dist/es5/tileset/helpers/i3s-lod.js.map +1 -1
- package/dist/es5/tileset/helpers/tiles-3d-lod.js +7 -16
- package/dist/es5/tileset/helpers/tiles-3d-lod.js.map +1 -1
- package/dist/es5/tileset/helpers/transform-utils.js +2 -11
- package/dist/es5/tileset/helpers/transform-utils.js.map +1 -1
- package/dist/es5/tileset/helpers/zoom.js +6 -16
- package/dist/es5/tileset/helpers/zoom.js.map +1 -1
- package/dist/es5/tileset/tile-3d.js +111 -98
- package/dist/es5/tileset/tile-3d.js.map +1 -1
- package/dist/es5/tileset/tileset-3d.js +130 -196
- package/dist/es5/tileset/tileset-3d.js.map +1 -1
- package/dist/es5/tileset/tileset-cache.js +1 -14
- package/dist/es5/tileset/tileset-cache.js.map +1 -1
- package/dist/es5/tileset/traversers/{i3s-frame-counter.js → i3s-pending-tiles-register.js} +21 -16
- package/dist/es5/tileset/traversers/i3s-pending-tiles-register.js.map +1 -0
- package/dist/es5/tileset/traversers/i3s-tile-manager.js +33 -27
- package/dist/es5/tileset/traversers/i3s-tile-manager.js.map +1 -1
- package/dist/es5/tileset/traversers/i3s-tileset-traverser.js +10 -52
- package/dist/es5/tileset/traversers/i3s-tileset-traverser.js.map +1 -1
- package/dist/es5/tileset/traversers/tileset-3d-traverser.js +0 -22
- package/dist/es5/tileset/traversers/tileset-3d-traverser.js.map +1 -1
- package/dist/es5/tileset/traversers/tileset-traverser.js +55 -78
- package/dist/es5/tileset/traversers/tileset-traverser.js.map +1 -1
- package/dist/es5/types.js.map +1 -1
- package/dist/es5/utils/doubly-linked-list-node.js +3 -7
- package/dist/es5/utils/doubly-linked-list-node.js.map +1 -1
- package/dist/es5/utils/doubly-linked-list.js +9 -17
- package/dist/es5/utils/doubly-linked-list.js.map +1 -1
- package/dist/es5/utils/managed-array.js +29 -30
- package/dist/es5/utils/managed-array.js.map +1 -1
- package/dist/esm/bundle.js +1 -1
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/constants.js +3 -0
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/tileset/helpers/3d-tiles-options.js.map +1 -1
- package/dist/esm/tileset/helpers/bounding-volume.js +4 -10
- package/dist/esm/tileset/helpers/bounding-volume.js.map +1 -1
- package/dist/esm/tileset/helpers/frame-state.js +36 -20
- package/dist/esm/tileset/helpers/frame-state.js.map +1 -1
- package/dist/esm/tileset/helpers/i3s-lod.js +4 -4
- package/dist/esm/tileset/helpers/i3s-lod.js.map +1 -1
- package/dist/esm/tileset/helpers/tiles-3d-lod.js +11 -8
- package/dist/esm/tileset/helpers/tiles-3d-lod.js.map +1 -1
- package/dist/esm/tileset/helpers/transform-utils.js +1 -3
- package/dist/esm/tileset/helpers/transform-utils.js.map +1 -1
- package/dist/esm/tileset/helpers/zoom.js +3 -2
- package/dist/esm/tileset/helpers/zoom.js.map +1 -1
- package/dist/esm/tileset/tile-3d.js +47 -108
- package/dist/esm/tileset/tile-3d.js.map +1 -1
- package/dist/esm/tileset/tileset-3d.js +70 -163
- package/dist/esm/tileset/tileset-3d.js.map +1 -1
- package/dist/esm/tileset/tileset-cache.js +2 -18
- package/dist/esm/tileset/tileset-cache.js.map +1 -1
- package/dist/esm/tileset/traversers/i3s-pending-tiles-register.js +28 -0
- package/dist/esm/tileset/traversers/i3s-pending-tiles-register.js.map +1 -0
- package/dist/esm/tileset/traversers/i3s-tile-manager.js +34 -15
- package/dist/esm/tileset/traversers/i3s-tile-manager.js.map +1 -1
- package/dist/esm/tileset/traversers/i3s-tileset-traverser.js +8 -22
- package/dist/esm/tileset/traversers/i3s-tileset-traverser.js.map +1 -1
- package/dist/esm/tileset/traversers/tileset-3d-traverser.js +2 -9
- package/dist/esm/tileset/traversers/tileset-3d-traverser.js.map +1 -1
- package/dist/esm/tileset/traversers/tileset-traverser.js +20 -59
- package/dist/esm/tileset/traversers/tileset-traverser.js.map +1 -1
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/utils/doubly-linked-list-node.js +1 -4
- package/dist/esm/utils/doubly-linked-list-node.js.map +1 -1
- package/dist/esm/utils/doubly-linked-list.js +2 -11
- package/dist/esm/utils/doubly-linked-list.js.map +1 -1
- package/dist/esm/utils/managed-array.js +4 -22
- package/dist/esm/utils/managed-array.js.map +1 -1
- package/dist/tileset/helpers/frame-state.d.ts +5 -8
- package/dist/tileset/helpers/frame-state.d.ts.map +1 -1
- package/dist/tileset/helpers/frame-state.js +27 -12
- package/dist/tileset/helpers/i3s-lod.d.ts.map +1 -1
- package/dist/tileset/tile-3d.d.ts +15 -4
- package/dist/tileset/tile-3d.d.ts.map +1 -1
- package/dist/tileset/tile-3d.js +15 -2
- package/dist/tileset/tileset-3d.d.ts +17 -4
- package/dist/tileset/tileset-3d.d.ts.map +1 -1
- package/dist/tileset/tileset-3d.js +47 -10
- package/dist/tileset/traversers/{i3s-frame-counter.d.ts → i3s-pending-tiles-register.d.ts} +7 -4
- package/dist/tileset/traversers/i3s-pending-tiles-register.d.ts.map +1 -0
- package/dist/tileset/traversers/{i3s-frame-counter.js → i3s-pending-tiles-register.js} +17 -8
- package/dist/tileset/traversers/i3s-tile-manager.d.ts +19 -1
- package/dist/tileset/traversers/i3s-tile-manager.d.ts.map +1 -1
- package/dist/tileset/traversers/i3s-tile-manager.js +32 -12
- package/dist/tileset/traversers/i3s-tileset-traverser.d.ts +1 -1
- package/dist/tileset/traversers/i3s-tileset-traverser.d.ts.map +1 -1
- package/dist/tileset/traversers/i3s-tileset-traverser.js +9 -9
- package/dist/tileset/traversers/tileset-traverser.d.ts +3 -3
- package/dist/tileset/traversers/tileset-traverser.d.ts.map +1 -1
- package/dist/tileset/traversers/tileset-traverser.js +4 -4
- package/dist/types.d.ts +30 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/tileset/helpers/frame-state.ts +47 -19
- package/src/tileset/helpers/i3s-lod.ts +3 -1
- package/src/tileset/tile-3d.ts +16 -2
- package/src/tileset/tileset-3d.ts +55 -16
- package/src/tileset/traversers/i3s-pending-tiles-register.ts +44 -0
- package/src/tileset/traversers/i3s-tile-manager.ts +47 -11
- package/src/tileset/traversers/i3s-tileset-traverser.ts +5 -5
- package/src/tileset/traversers/tileset-traverser.ts +2 -2
- package/src/types.ts +32 -0
- package/dist/es5/tileset/traversers/i3s-frame-counter.js.map +0 -1
- package/dist/esm/tileset/traversers/i3s-frame-counter.js +0 -23
- package/dist/esm/tileset/traversers/i3s-frame-counter.js.map +0 -1
- package/dist/tileset/traversers/i3s-frame-counter.d.ts.map +0 -1
- package/src/tileset/traversers/i3s-frame-counter.ts +0 -35
|
@@ -6,19 +6,22 @@ export default class I3SPendingTilesRegister {
|
|
|
6
6
|
private frameNumberMap;
|
|
7
7
|
/**
|
|
8
8
|
* Register a new pending tile header for the particular frameNumber
|
|
9
|
+
* @param viewportId
|
|
9
10
|
* @param frameNumber
|
|
10
11
|
*/
|
|
11
|
-
register(frameNumber: number): void;
|
|
12
|
+
register(viewportId: string, frameNumber: number): void;
|
|
12
13
|
/**
|
|
13
14
|
* Deregister a pending tile header for the particular frameNumber
|
|
15
|
+
* @param viewportId
|
|
14
16
|
* @param frameNumber
|
|
15
17
|
*/
|
|
16
|
-
deregister(frameNumber: number): void;
|
|
18
|
+
deregister(viewportId: string, frameNumber: number): void;
|
|
17
19
|
/**
|
|
18
20
|
* Check is there are no pending tile headers registered for the particular frameNumber
|
|
21
|
+
* @param viewportId
|
|
19
22
|
* @param frameNumber
|
|
20
23
|
* @returns
|
|
21
24
|
*/
|
|
22
|
-
isZero(frameNumber: number): boolean;
|
|
25
|
+
isZero(viewportId: string, frameNumber: number): boolean;
|
|
23
26
|
}
|
|
24
|
-
//# sourceMappingURL=i3s-
|
|
27
|
+
//# sourceMappingURL=i3s-pending-tiles-register.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i3s-pending-tiles-register.d.ts","sourceRoot":"","sources":["../../../src/tileset/traversers/i3s-pending-tiles-register.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,uBAAuB;IAC1C,OAAO,CAAC,cAAc,CAA+C;IAErE;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAOhD;;;;OAIG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IASlD;;;;;OAKG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAI/C"}
|
|
@@ -10,27 +10,36 @@ class I3SPendingTilesRegister {
|
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
12
|
* Register a new pending tile header for the particular frameNumber
|
|
13
|
+
* @param viewportId
|
|
13
14
|
* @param frameNumber
|
|
14
15
|
*/
|
|
15
|
-
register(frameNumber) {
|
|
16
|
-
const
|
|
17
|
-
|
|
16
|
+
register(viewportId, frameNumber) {
|
|
17
|
+
const viewportMap = this.frameNumberMap.get(viewportId) || new Map();
|
|
18
|
+
const oldCount = viewportMap.get(frameNumber) || 0;
|
|
19
|
+
viewportMap.set(frameNumber, oldCount + 1);
|
|
20
|
+
this.frameNumberMap.set(viewportId, viewportMap);
|
|
18
21
|
}
|
|
19
22
|
/**
|
|
20
23
|
* Deregister a pending tile header for the particular frameNumber
|
|
24
|
+
* @param viewportId
|
|
21
25
|
* @param frameNumber
|
|
22
26
|
*/
|
|
23
|
-
deregister(frameNumber) {
|
|
24
|
-
const
|
|
25
|
-
|
|
27
|
+
deregister(viewportId, frameNumber) {
|
|
28
|
+
const viewportMap = this.frameNumberMap.get(viewportId);
|
|
29
|
+
if (!viewportMap) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const oldCount = viewportMap.get(frameNumber) || 1;
|
|
33
|
+
viewportMap.set(frameNumber, oldCount - 1);
|
|
26
34
|
}
|
|
27
35
|
/**
|
|
28
36
|
* Check is there are no pending tile headers registered for the particular frameNumber
|
|
37
|
+
* @param viewportId
|
|
29
38
|
* @param frameNumber
|
|
30
39
|
* @returns
|
|
31
40
|
*/
|
|
32
|
-
isZero(frameNumber) {
|
|
33
|
-
const count = this.frameNumberMap.get(frameNumber) || 0;
|
|
41
|
+
isZero(viewportId, frameNumber) {
|
|
42
|
+
const count = this.frameNumberMap.get(viewportId)?.get(frameNumber) || 0;
|
|
34
43
|
return count === 0;
|
|
35
44
|
}
|
|
36
45
|
}
|
|
@@ -3,14 +3,32 @@ export default class I3STileManager {
|
|
|
3
3
|
private _statusMap;
|
|
4
4
|
private pendingTilesRegister;
|
|
5
5
|
constructor();
|
|
6
|
+
/**
|
|
7
|
+
* Add request to map
|
|
8
|
+
* @param request - node metadata request
|
|
9
|
+
* @param key - unique key
|
|
10
|
+
* @param callback - callback after request completed
|
|
11
|
+
* @param frameState - frameState data
|
|
12
|
+
*/
|
|
6
13
|
add(request: any, key: any, callback: any, frameState: FrameState): void;
|
|
14
|
+
/**
|
|
15
|
+
* Update request if it is still actual for the new frameState
|
|
16
|
+
* @param key - unique key
|
|
17
|
+
* @param frameState - frameState data
|
|
18
|
+
*/
|
|
7
19
|
update(key: any, frameState: FrameState): void;
|
|
20
|
+
/**
|
|
21
|
+
* Find request in the map
|
|
22
|
+
* @param key - unique key
|
|
23
|
+
* @returns
|
|
24
|
+
*/
|
|
8
25
|
find(key: any): any;
|
|
9
26
|
/**
|
|
10
27
|
* Check it there are pending tile headers for the particular frameNumber
|
|
28
|
+
* @param viewportId
|
|
11
29
|
* @param frameNumber
|
|
12
30
|
* @returns
|
|
13
31
|
*/
|
|
14
|
-
hasPendingTiles(frameNumber: number): boolean;
|
|
32
|
+
hasPendingTiles(viewportId: string, frameNumber: number): boolean;
|
|
15
33
|
}
|
|
16
34
|
//# sourceMappingURL=i3s-tile-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i3s-tile-manager.d.ts","sourceRoot":"","sources":["../../../src/tileset/traversers/i3s-tile-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAUlD,MAAM,CAAC,OAAO,OAAO,cAAc;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,oBAAoB,CAAiC;;IAM7D,GAAG,CAAC,OAAO,KAAA,EAAE,GAAG,KAAA,EAAE,QAAQ,KAAA,EAAE,UAAU,EAAE,UAAU;
|
|
1
|
+
{"version":3,"file":"i3s-tile-manager.d.ts","sourceRoot":"","sources":["../../../src/tileset/traversers/i3s-tile-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAUlD,MAAM,CAAC,OAAO,OAAO,cAAc;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,oBAAoB,CAAiC;;IAM7D;;;;;;OAMG;IACH,GAAG,CAAC,OAAO,KAAA,EAAE,GAAG,KAAA,EAAE,QAAQ,KAAA,EAAE,UAAU,EAAE,UAAU;IAiClD;;;;OAIG;IACH,MAAM,CAAC,GAAG,KAAA,EAAE,UAAU,EAAE,UAAU;IAmBlC;;;;OAIG;IACH,IAAI,CAAC,GAAG,KAAA;IAIR;;;;;OAKG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;CAGlE"}
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const
|
|
6
|
+
const i3s_pending_tiles_register_1 = __importDefault(require("./i3s-pending-tiles-register"));
|
|
7
7
|
const STATUS = {
|
|
8
8
|
REQUESTED: 'REQUESTED',
|
|
9
9
|
COMPLETED: 'COMPLETED',
|
|
@@ -12,51 +12,71 @@ const STATUS = {
|
|
|
12
12
|
// A helper class to manage tile metadata fetching
|
|
13
13
|
class I3STileManager {
|
|
14
14
|
constructor() {
|
|
15
|
-
this.pendingTilesRegister = new
|
|
15
|
+
this.pendingTilesRegister = new i3s_pending_tiles_register_1.default();
|
|
16
16
|
this._statusMap = {};
|
|
17
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Add request to map
|
|
20
|
+
* @param request - node metadata request
|
|
21
|
+
* @param key - unique key
|
|
22
|
+
* @param callback - callback after request completed
|
|
23
|
+
* @param frameState - frameState data
|
|
24
|
+
*/
|
|
18
25
|
add(request, key, callback, frameState) {
|
|
19
26
|
if (!this._statusMap[key]) {
|
|
20
|
-
const { frameNumber } = frameState;
|
|
27
|
+
const { frameNumber, viewport: { id } } = frameState;
|
|
21
28
|
this._statusMap[key] = { request, callback, key, frameState, status: STATUS.REQUESTED };
|
|
22
29
|
// Register pending request for the frameNumber
|
|
23
|
-
this.pendingTilesRegister.register(frameNumber);
|
|
30
|
+
this.pendingTilesRegister.register(id, frameNumber);
|
|
24
31
|
request()
|
|
25
32
|
.then((data) => {
|
|
26
33
|
this._statusMap[key].status = STATUS.COMPLETED;
|
|
27
|
-
const { frameNumber: actualFrameNumber } = this._statusMap[key].frameState;
|
|
34
|
+
const { frameNumber: actualFrameNumber, viewport: { id } } = this._statusMap[key].frameState;
|
|
28
35
|
// Deregister pending request for the frameNumber
|
|
29
|
-
this.pendingTilesRegister.deregister(actualFrameNumber);
|
|
36
|
+
this.pendingTilesRegister.deregister(id, actualFrameNumber);
|
|
30
37
|
this._statusMap[key].callback(data, frameState);
|
|
31
38
|
})
|
|
32
39
|
.catch((error) => {
|
|
33
40
|
this._statusMap[key].status = STATUS.ERROR;
|
|
34
|
-
const { frameNumber: actualFrameNumber } = this._statusMap[key].frameState;
|
|
41
|
+
const { frameNumber: actualFrameNumber, viewport: { id } } = this._statusMap[key].frameState;
|
|
35
42
|
// Deregister pending request for the frameNumber
|
|
36
|
-
this.pendingTilesRegister.deregister(actualFrameNumber);
|
|
43
|
+
this.pendingTilesRegister.deregister(id, actualFrameNumber);
|
|
37
44
|
callback(error);
|
|
38
45
|
});
|
|
39
46
|
}
|
|
40
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Update request if it is still actual for the new frameState
|
|
50
|
+
* @param key - unique key
|
|
51
|
+
* @param frameState - frameState data
|
|
52
|
+
*/
|
|
41
53
|
update(key, frameState) {
|
|
42
54
|
if (this._statusMap[key]) {
|
|
43
55
|
// Deregister pending request for the old frameNumber
|
|
44
|
-
this.
|
|
56
|
+
const { frameNumber, viewport: { id } } = this._statusMap[key].frameState;
|
|
57
|
+
this.pendingTilesRegister.deregister(id, frameNumber);
|
|
45
58
|
// Register pending request for the new frameNumber
|
|
46
|
-
|
|
59
|
+
const { frameNumber: newFrameNumber, viewport: { id: newViewportId } } = frameState;
|
|
60
|
+
this.pendingTilesRegister.register(newViewportId, newFrameNumber);
|
|
47
61
|
this._statusMap[key].frameState = frameState;
|
|
48
62
|
}
|
|
49
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* Find request in the map
|
|
66
|
+
* @param key - unique key
|
|
67
|
+
* @returns
|
|
68
|
+
*/
|
|
50
69
|
find(key) {
|
|
51
70
|
return this._statusMap[key];
|
|
52
71
|
}
|
|
53
72
|
/**
|
|
54
73
|
* Check it there are pending tile headers for the particular frameNumber
|
|
74
|
+
* @param viewportId
|
|
55
75
|
* @param frameNumber
|
|
56
76
|
* @returns
|
|
57
77
|
*/
|
|
58
|
-
hasPendingTiles(frameNumber) {
|
|
59
|
-
return !this.pendingTilesRegister.isZero(frameNumber);
|
|
78
|
+
hasPendingTiles(viewportId, frameNumber) {
|
|
79
|
+
return !this.pendingTilesRegister.isZero(viewportId, frameNumber);
|
|
60
80
|
}
|
|
61
81
|
}
|
|
62
82
|
exports.default = I3STileManager;
|
|
@@ -7,7 +7,7 @@ export default class I3STilesetTraverser extends TilesetTraverser {
|
|
|
7
7
|
* that means the traversal is finished and we can call
|
|
8
8
|
* following-up callbacks.
|
|
9
9
|
*/
|
|
10
|
-
protected
|
|
10
|
+
protected traversalFinished(frameState: FrameState): boolean;
|
|
11
11
|
constructor(options: any);
|
|
12
12
|
shouldRefine(tile: any, frameState: FrameState): boolean;
|
|
13
13
|
updateChildTiles(tile: any, frameState: FrameState): boolean;
|
|
@@ -1 +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;AAKnD,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAElD,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,gBAAgB;IAC/D,OAAO,CAAC,YAAY,CAAiB;IAErC;;;;OAIG;IACH,SAAS,
|
|
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;AAKnD,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAElD,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,gBAAgB;IAC/D,OAAO,CAAC,YAAY,CAAiB;IAErC;;;;OAIG;IACH,SAAS,CAAC,iBAAiB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;gBAIhD,OAAO,KAAA;IAKnB,YAAY,CAAC,IAAI,KAAA,EAAE,UAAU,EAAE,UAAU;IAKzC,gBAAgB,CAAC,IAAI,KAAA,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO;IAoCjD,SAAS,CAAC,MAAM,KAAA,EAAE,OAAO,KAAA;IAe/B;;;;;;;OAOG;IACH,WAAW,CAAC,MAAM,KAAA,EAAE,IAAI,KAAA,EAAE,UAAU,KAAA;CAgBrC"}
|
|
@@ -9,17 +9,17 @@ const i3s_lod_1 = require("../helpers/i3s-lod");
|
|
|
9
9
|
const tile_3d_1 = __importDefault(require("../tile-3d"));
|
|
10
10
|
const i3s_tile_manager_1 = __importDefault(require("./i3s-tile-manager"));
|
|
11
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
12
|
/**
|
|
17
13
|
* Check if there are no penging tile header requests,
|
|
18
14
|
* that means the traversal is finished and we can call
|
|
19
15
|
* following-up callbacks.
|
|
20
16
|
*/
|
|
21
|
-
|
|
22
|
-
return !this._tileManager.hasPendingTiles(this._frameNumber || 0);
|
|
17
|
+
traversalFinished(frameState) {
|
|
18
|
+
return !this._tileManager.hasPendingTiles(frameState.viewport.id, this._frameNumber || 0);
|
|
19
|
+
}
|
|
20
|
+
constructor(options) {
|
|
21
|
+
super(options);
|
|
22
|
+
this._tileManager = new i3s_tile_manager_1.default();
|
|
23
23
|
}
|
|
24
24
|
shouldRefine(tile, frameState) {
|
|
25
25
|
tile._lodJudge = (0, i3s_lod_1.getLodStatus)(tile, frameState);
|
|
@@ -64,8 +64,7 @@ class I3STilesetTraverser extends tileset_traverser_1.default {
|
|
|
64
64
|
...tileset.loadOptions,
|
|
65
65
|
i3s: {
|
|
66
66
|
...tileset.loadOptions.i3s,
|
|
67
|
-
isTileHeader: true
|
|
68
|
-
loadContent: false
|
|
67
|
+
isTileHeader: true
|
|
69
68
|
}
|
|
70
69
|
};
|
|
71
70
|
return await (0, core_1.load)(nodeUrl, loader, options);
|
|
@@ -86,7 +85,8 @@ class I3STilesetTraverser extends tileset_traverser_1.default {
|
|
|
86
85
|
this.updateTile(childTile, frameState);
|
|
87
86
|
// after tile fetched, resume traversal if still in current update/traversal frame
|
|
88
87
|
if (this._frameNumber === frameState.frameNumber &&
|
|
89
|
-
(this.traversalFinished
|
|
88
|
+
(this.traversalFinished(frameState) ||
|
|
89
|
+
new Date().getTime() - this.lastUpdate > this.updateDebounceTime)) {
|
|
90
90
|
this.executeTraversal(childTile, frameState);
|
|
91
91
|
}
|
|
92
92
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import ManagedArray from '../../utils/managed-array';
|
|
2
2
|
import { FrameState } from '../helpers/frame-state';
|
|
3
|
-
export
|
|
3
|
+
export type TilesetTraverserProps = {
|
|
4
4
|
loadSiblings?: boolean;
|
|
5
5
|
skipLevelOfDetail?: boolean;
|
|
6
6
|
maximumScreenSpaceError?: number;
|
|
@@ -10,7 +10,7 @@ export declare type TilesetTraverserProps = {
|
|
|
10
10
|
};
|
|
11
11
|
basePath?: string;
|
|
12
12
|
};
|
|
13
|
-
export
|
|
13
|
+
export type Props = {
|
|
14
14
|
loadSiblings: boolean;
|
|
15
15
|
skipLevelOfDetail: boolean;
|
|
16
16
|
updateTransforms: boolean;
|
|
@@ -33,7 +33,7 @@ export default class TilesetTraverser {
|
|
|
33
33
|
protected _traversalStack: ManagedArray;
|
|
34
34
|
protected _emptyTraversalStack: ManagedArray;
|
|
35
35
|
protected _frameNumber: number | null;
|
|
36
|
-
protected
|
|
36
|
+
protected traversalFinished(frameState: FrameState): boolean;
|
|
37
37
|
constructor(options: TilesetTraverserProps);
|
|
38
38
|
traverse(root: any, frameState: any, options: any): void;
|
|
39
39
|
reset(): void;
|
|
@@ -1 +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;AAErD,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAElD,
|
|
1
|
+
{"version":3,"file":"tileset-traverser.d.ts","sourceRoot":"","sources":["../../../src/tileset/traversers/tileset-traverser.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,2BAA2B,CAAC;AAErD,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAElD,MAAM,MAAM,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,MAAM,MAAM,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,UAAU,EAAE,MAAM,CAAwB;IACpD,SAAS,CAAC,QAAQ,CAAC,kBAAkB,QAAQ;IAC7C,SAAS,CAAC,eAAe,EAAE,YAAY,CAAC;IACxC,SAAS,CAAC,oBAAoB,EAAE,YAAY,CAAC;IAC7C,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtC,SAAS,CAAC,iBAAiB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;gBAKhD,OAAO,EAAE,qBAAqB;IAuB1C,QAAQ,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA,EAAE,OAAO,KAAA;IAclC,KAAK;IAgBL,gBAAgB,CAAC,IAAI,KAAA,EAAE,UAAU,EAAE,UAAU;IAmE7C,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"}
|
|
@@ -16,6 +16,9 @@ exports.DEFAULT_PROPS = {
|
|
|
16
16
|
basePath: ''
|
|
17
17
|
};
|
|
18
18
|
class TilesetTraverser {
|
|
19
|
+
traversalFinished(frameState) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
19
22
|
// TODO nested props
|
|
20
23
|
constructor(options) {
|
|
21
24
|
this.lastUpdate = new Date().getTime();
|
|
@@ -37,9 +40,6 @@ class TilesetTraverser {
|
|
|
37
40
|
// tiles does not have render content
|
|
38
41
|
this.emptyTiles = {};
|
|
39
42
|
}
|
|
40
|
-
get traversalFinished() {
|
|
41
|
-
return true;
|
|
42
|
-
}
|
|
43
43
|
// tiles should be visible
|
|
44
44
|
traverse(root, frameState, options) {
|
|
45
45
|
this.root = root; // for root screen space error
|
|
@@ -116,7 +116,7 @@ class TilesetTraverser {
|
|
|
116
116
|
tile._shouldRefine = shouldRefine && parentRefines;
|
|
117
117
|
}
|
|
118
118
|
const newTime = new Date().getTime();
|
|
119
|
-
if (this.traversalFinished || newTime - this.lastUpdate > this.updateDebounceTime) {
|
|
119
|
+
if (this.traversalFinished(frameState) || newTime - this.lastUpdate > this.updateDebounceTime) {
|
|
120
120
|
this.lastUpdate = newTime;
|
|
121
121
|
this.options.onTraversalEnd(frameState);
|
|
122
122
|
}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,5 +1,34 @@
|
|
|
1
|
-
|
|
1
|
+
import { Vector3 } from '@math.gl/core';
|
|
2
|
+
export type BoundingRectangle = {
|
|
2
3
|
width: number;
|
|
3
4
|
height: number;
|
|
4
5
|
};
|
|
6
|
+
/** Deck.gl Viewport instance type.
|
|
7
|
+
* We can't import it from Deck.gl to avoid circular reference */
|
|
8
|
+
export type Viewport = {
|
|
9
|
+
id: string;
|
|
10
|
+
cameraPosition: number[] | Vector3;
|
|
11
|
+
height: number;
|
|
12
|
+
width: number;
|
|
13
|
+
zoom: number;
|
|
14
|
+
distanceScales: {
|
|
15
|
+
unitsPerMeter: number[];
|
|
16
|
+
metersPerUnit: number[];
|
|
17
|
+
};
|
|
18
|
+
center: number[] | Vector3;
|
|
19
|
+
unprojectPosition: (position: number[] | Vector3) => [number, number, number];
|
|
20
|
+
project: (coorinates: number[] | Vector3) => number[];
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Contain extra fields from WebMercatorViewport and FirstPersonViewport
|
|
24
|
+
*/
|
|
25
|
+
export type GeospatialViewport = Viewport & {
|
|
26
|
+
/** @todo This field is not represented in Deck.gl viewports. Can be removed in the next version */
|
|
27
|
+
cameraDirection: [number, number, number];
|
|
28
|
+
/** @todo This field is not represented in Deck.gl viewports. Can be removed in the next version */
|
|
29
|
+
cameraUp: [number, number, number];
|
|
30
|
+
longitude: number;
|
|
31
|
+
latitude: number;
|
|
32
|
+
bearing: number;
|
|
33
|
+
};
|
|
5
34
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAEtC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;iEACiE;AACjE,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE;QACd,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,aAAa,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IACF,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC3B,iBAAiB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9E,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,KAAK,MAAM,EAAE,CAAC;CACvD,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG;IAC1C,mGAAmG;IACnG,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,mGAAmG;IACnG,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loaders.gl/tiles",
|
|
3
|
-
"version": "3.3.0-alpha.
|
|
3
|
+
"version": "3.3.0-alpha.10",
|
|
4
4
|
"description": "Common components for different tiles loaders.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
"build-bundle": "esbuild src/bundle.ts --bundle --outfile=dist/dist.min.js"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@loaders.gl/loader-utils": "3.3.0-alpha.
|
|
37
|
-
"@loaders.gl/math": "3.3.0-alpha.
|
|
36
|
+
"@loaders.gl/loader-utils": "3.3.0-alpha.10",
|
|
37
|
+
"@loaders.gl/math": "3.3.0-alpha.10",
|
|
38
38
|
"@math.gl/core": "^3.5.1",
|
|
39
39
|
"@math.gl/culling": "^3.5.1",
|
|
40
40
|
"@math.gl/geospatial": "^3.5.1",
|
|
@@ -44,5 +44,5 @@
|
|
|
44
44
|
"peerDependencies": {
|
|
45
45
|
"@loaders.gl/core": "^3.2.0"
|
|
46
46
|
},
|
|
47
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "53bc8d3f18fbc3445a00f8509038479119895c78"
|
|
48
48
|
}
|
|
@@ -2,6 +2,7 @@ import {Tile3D} from '@loaders.gl/tiles';
|
|
|
2
2
|
import {Vector3} from '@math.gl/core';
|
|
3
3
|
import {CullingVolume, Plane} from '@math.gl/culling';
|
|
4
4
|
import {Ellipsoid} from '@math.gl/geospatial';
|
|
5
|
+
import {GeospatialViewport, Viewport} from '../../types';
|
|
5
6
|
|
|
6
7
|
export type FrameState = {
|
|
7
8
|
camera: {
|
|
@@ -9,8 +10,8 @@ export type FrameState = {
|
|
|
9
10
|
direction: number[];
|
|
10
11
|
up: number[];
|
|
11
12
|
};
|
|
12
|
-
viewport:
|
|
13
|
-
topDownViewport:
|
|
13
|
+
viewport: GeospatialViewport;
|
|
14
|
+
topDownViewport: GeospatialViewport; // Use it to calculate projected radius for a tile
|
|
14
15
|
height: number;
|
|
15
16
|
cullingVolume: CullingVolume;
|
|
16
17
|
frameNumber: number; // TODO: This can be the same between updates, what number is unique for between updates?
|
|
@@ -30,18 +31,15 @@ const cullingVolume = new CullingVolume([
|
|
|
30
31
|
|
|
31
32
|
// Extracts a frame state appropriate for tile culling from a deck.gl viewport
|
|
32
33
|
// TODO - this could likely be generalized and merged back into deck.gl for other culling scenarios
|
|
33
|
-
export function getFrameState(viewport, frameNumber: number): FrameState {
|
|
34
|
+
export function getFrameState(viewport: GeospatialViewport, frameNumber: number): FrameState {
|
|
35
|
+
// Traverse and and request. Update _selectedTiles so that we know what to render.
|
|
34
36
|
// Traverse and and request. Update _selectedTiles so that we know what to render.
|
|
35
37
|
const {cameraDirection, cameraUp, height} = viewport;
|
|
36
38
|
const {metersPerUnit} = viewport.distanceScales;
|
|
37
39
|
|
|
38
|
-
const viewportCenterCartographic = viewport.unprojectPosition(viewport.center);
|
|
39
40
|
// TODO - Ellipsoid.eastNorthUpToFixedFrame() breaks on raw array, create a Vector.
|
|
40
41
|
// TODO - Ellipsoid.eastNorthUpToFixedFrame() takes a cartesian, is that intuitive?
|
|
41
|
-
const viewportCenterCartesian =
|
|
42
|
-
viewportCenterCartographic,
|
|
43
|
-
new Vector3()
|
|
44
|
-
);
|
|
42
|
+
const viewportCenterCartesian = worldToCartesian(viewport, viewport.center);
|
|
45
43
|
const enuToFixedTransform = Ellipsoid.WGS84.eastNorthUpToFixedFrame(viewportCenterCartesian);
|
|
46
44
|
|
|
47
45
|
const cameraPositionCartographic = viewport.unprojectPosition(viewport.cameraPosition);
|
|
@@ -60,7 +58,7 @@ export function getFrameState(viewport, frameNumber: number): FrameState {
|
|
|
60
58
|
enuToFixedTransform.transformAsVector(new Vector3(cameraUp).scale(metersPerUnit))
|
|
61
59
|
).normalize();
|
|
62
60
|
|
|
63
|
-
commonSpacePlanesToWGS84(viewport
|
|
61
|
+
commonSpacePlanesToWGS84(viewport);
|
|
64
62
|
|
|
65
63
|
const ViewportClass = viewport.constructor;
|
|
66
64
|
const {longitude, latitude, width, bearing, zoom} = viewport;
|
|
@@ -131,25 +129,55 @@ export function limitSelectedTiles(
|
|
|
131
129
|
return [selectedTiles, unselectedTiles];
|
|
132
130
|
}
|
|
133
131
|
|
|
134
|
-
function commonSpacePlanesToWGS84(viewport
|
|
132
|
+
function commonSpacePlanesToWGS84(viewport) {
|
|
135
133
|
// Extract frustum planes based on current view.
|
|
136
134
|
const frustumPlanes = viewport.getFrustumPlanes();
|
|
135
|
+
|
|
136
|
+
// Get the near/far plane centers
|
|
137
|
+
const nearCenterCommon = closestPointOnPlane(frustumPlanes.near, viewport.cameraPosition);
|
|
138
|
+
const nearCenterCartesian = worldToCartesian(viewport, nearCenterCommon);
|
|
139
|
+
const cameraCartesian = worldToCartesian(viewport, viewport.cameraPosition, scratchPosition);
|
|
140
|
+
|
|
137
141
|
let i = 0;
|
|
142
|
+
cullingVolume.planes[i++].fromPointNormal(
|
|
143
|
+
nearCenterCartesian,
|
|
144
|
+
scratchVector.copy(nearCenterCartesian).subtract(cameraCartesian)
|
|
145
|
+
);
|
|
146
|
+
|
|
138
147
|
for (const dir in frustumPlanes) {
|
|
148
|
+
if (dir === 'near') {
|
|
149
|
+
continue; // eslint-disable-line no-continue
|
|
150
|
+
}
|
|
139
151
|
const plane = frustumPlanes[dir];
|
|
140
|
-
const
|
|
141
|
-
scratchPosition
|
|
142
|
-
.copy(plane.normal)
|
|
143
|
-
.scale(plane.distance - distanceToCenter)
|
|
144
|
-
.add(viewport.center);
|
|
145
|
-
const cartographicPos = viewport.unprojectPosition(scratchPosition);
|
|
146
|
-
|
|
147
|
-
const cartesianPos = Ellipsoid.WGS84.cartographicToCartesian(cartographicPos, new Vector3());
|
|
152
|
+
const posCommon = closestPointOnPlane(plane, nearCenterCommon, scratchPosition);
|
|
153
|
+
const cartesianPos = worldToCartesian(viewport, posCommon, scratchPosition);
|
|
148
154
|
|
|
149
155
|
cullingVolume.planes[i++].fromPointNormal(
|
|
150
156
|
cartesianPos,
|
|
151
157
|
// Want the normal to point into the frustum since that's what culling expects
|
|
152
|
-
scratchVector.copy(
|
|
158
|
+
scratchVector.copy(nearCenterCartesian).subtract(cartesianPos)
|
|
153
159
|
);
|
|
154
160
|
}
|
|
155
161
|
}
|
|
162
|
+
|
|
163
|
+
function closestPointOnPlane(
|
|
164
|
+
plane: {distance: number; normal: Vector3},
|
|
165
|
+
refPoint: [number, number, number] | Vector3,
|
|
166
|
+
out: Vector3 = new Vector3()
|
|
167
|
+
): Vector3 {
|
|
168
|
+
const distanceToRef = plane.normal.dot(refPoint);
|
|
169
|
+
out
|
|
170
|
+
.copy(plane.normal)
|
|
171
|
+
.scale(plane.distance - distanceToRef)
|
|
172
|
+
.add(refPoint);
|
|
173
|
+
return out;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
function worldToCartesian(
|
|
177
|
+
viewport: Viewport,
|
|
178
|
+
point: number[] | Vector3,
|
|
179
|
+
out: Vector3 = new Vector3()
|
|
180
|
+
): Vector3 {
|
|
181
|
+
const cartographicPos = viewport.unprojectPosition(point);
|
|
182
|
+
return Ellipsoid.WGS84.cartographicToCartesian(cartographicPos, out);
|
|
183
|
+
}
|
|
@@ -80,7 +80,9 @@ export function getProjectedRadius(tile: Tile3D, frameState: FrameState): number
|
|
|
80
80
|
|
|
81
81
|
// Project center vertex and border vertex and calculate projected radius of MBS
|
|
82
82
|
const projectedOrigin = viewport.project([mbsLon, mbsLat, mbsZ]);
|
|
83
|
-
const projectedMbsBorderVertex = viewport.project(
|
|
83
|
+
const projectedMbsBorderVertex = viewport.project(
|
|
84
|
+
sphereMbsBorderVertexCartographic as [number, number, number]
|
|
85
|
+
);
|
|
84
86
|
const projectedRadius = projectedOriginVector
|
|
85
87
|
.copy(projectedOrigin)
|
|
86
88
|
.subtract(projectedMbsBorderVertex)
|
package/src/tileset/tile-3d.ts
CHANGED
|
@@ -61,6 +61,7 @@ export default class TileHeader {
|
|
|
61
61
|
viewportIds: any[];
|
|
62
62
|
transform: Matrix4;
|
|
63
63
|
extensions: any;
|
|
64
|
+
implicitTiling?: any;
|
|
64
65
|
|
|
65
66
|
// Container to store application specific data
|
|
66
67
|
userData: {[key: string]: any};
|
|
@@ -205,6 +206,7 @@ export default class TileHeader {
|
|
|
205
206
|
// TODO Cesium 3d tiles specific
|
|
206
207
|
this._expireDate = null;
|
|
207
208
|
this._expiredContent = null;
|
|
209
|
+
this.implicitTiling = null;
|
|
208
210
|
|
|
209
211
|
Object.seal(this);
|
|
210
212
|
}
|
|
@@ -770,8 +772,20 @@ export default class TileHeader {
|
|
|
770
772
|
case 'i3s':
|
|
771
773
|
return {
|
|
772
774
|
...this.tileset.options.i3s,
|
|
773
|
-
|
|
774
|
-
|
|
775
|
+
_tileOptions: {
|
|
776
|
+
attributeUrls: this.header.attributeUrls,
|
|
777
|
+
textureUrl: this.header.textureUrl,
|
|
778
|
+
textureFormat: this.header.textureFormat,
|
|
779
|
+
textureLoaderOptions: this.header.textureLoaderOptions,
|
|
780
|
+
materialDefinition: this.header.materialDefinition,
|
|
781
|
+
isDracoGeometry: this.header.isDracoGeometry,
|
|
782
|
+
mbs: this.header.mbs
|
|
783
|
+
},
|
|
784
|
+
_tilesetOptions: {
|
|
785
|
+
store: this.tileset.tileset.store,
|
|
786
|
+
attributeStorageInfo: this.tileset.tileset.attributeStorageInfo,
|
|
787
|
+
fields: this.tileset.tileset.fields
|
|
788
|
+
},
|
|
775
789
|
isTileHeader: false
|
|
776
790
|
};
|
|
777
791
|
case '3d-tiles':
|