@loaders.gl/tiles 4.0.0-alpha.4 → 4.0.0-alpha.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/dist/bundle.d.ts +2 -0
  2. package/dist/bundle.d.ts.map +1 -0
  3. package/dist/bundle.js +2 -2
  4. package/dist/constants.d.ts +32 -0
  5. package/dist/constants.d.ts.map +1 -0
  6. package/dist/constants.js +30 -26
  7. package/dist/dist.min.js +8921 -0
  8. package/dist/es5/bundle.js +6 -0
  9. package/dist/es5/bundle.js.map +1 -0
  10. package/dist/es5/constants.js +44 -0
  11. package/dist/es5/constants.js.map +1 -0
  12. package/dist/es5/index.js +93 -0
  13. package/dist/es5/index.js.map +1 -0
  14. package/dist/es5/tileset/format-3d-tiles/tileset-3d-traverser.js +70 -0
  15. package/dist/es5/tileset/format-3d-tiles/tileset-3d-traverser.js.map +1 -0
  16. package/dist/es5/tileset/format-i3s/i3s-pending-tiles-register.js +45 -0
  17. package/dist/es5/tileset/format-i3s/i3s-pending-tiles-register.js.map +1 -0
  18. package/dist/es5/tileset/format-i3s/i3s-tile-manager.js +84 -0
  19. package/dist/es5/tileset/format-i3s/i3s-tile-manager.js.map +1 -0
  20. package/dist/es5/tileset/format-i3s/i3s-tileset-traverser.js +143 -0
  21. package/dist/es5/tileset/format-i3s/i3s-tileset-traverser.js.map +1 -0
  22. package/dist/es5/tileset/helpers/3d-tiles-options.js +12 -0
  23. package/dist/es5/tileset/helpers/3d-tiles-options.js.map +1 -0
  24. package/dist/es5/tileset/helpers/bounding-volume.js +176 -0
  25. package/dist/es5/tileset/helpers/bounding-volume.js.map +1 -0
  26. package/dist/es5/tileset/helpers/frame-state.js +129 -0
  27. package/dist/es5/tileset/helpers/frame-state.js.map +1 -0
  28. package/dist/es5/tileset/helpers/i3s-lod.js +60 -0
  29. package/dist/es5/tileset/helpers/i3s-lod.js.map +1 -0
  30. package/dist/es5/tileset/helpers/tiles-3d-lod.js +103 -0
  31. package/dist/es5/tileset/helpers/tiles-3d-lod.js.map +1 -0
  32. package/dist/es5/tileset/helpers/transform-utils.js +50 -0
  33. package/dist/es5/tileset/helpers/transform-utils.js.map +1 -0
  34. package/dist/es5/tileset/helpers/zoom.js +63 -0
  35. package/dist/es5/tileset/helpers/zoom.js.map +1 -0
  36. package/dist/es5/tileset/tile-3d.js +565 -0
  37. package/dist/es5/tileset/tile-3d.js.map +1 -0
  38. package/dist/es5/tileset/tileset-3d.js +890 -0
  39. package/dist/es5/tileset/tileset-3d.js.map +1 -0
  40. package/dist/es5/tileset/tileset-cache.js +85 -0
  41. package/dist/es5/tileset/tileset-cache.js.map +1 -0
  42. package/dist/es5/tileset/tileset-traverser.js +328 -0
  43. package/dist/es5/tileset/tileset-traverser.js.map +1 -0
  44. package/dist/es5/types.js +2 -0
  45. package/dist/es5/types.js.map +1 -0
  46. package/dist/es5/utils/doubly-linked-list-node.js +21 -0
  47. package/dist/es5/utils/doubly-linked-list-node.js.map +1 -0
  48. package/dist/es5/utils/doubly-linked-list.js +88 -0
  49. package/dist/es5/utils/doubly-linked-list.js.map +1 -0
  50. package/dist/es5/utils/managed-array.js +126 -0
  51. package/dist/es5/utils/managed-array.js.map +1 -0
  52. package/dist/esm/bundle.js +4 -0
  53. package/dist/esm/bundle.js.map +1 -0
  54. package/dist/esm/constants.js +32 -0
  55. package/dist/esm/constants.js.map +1 -0
  56. package/dist/esm/index.js +10 -0
  57. package/dist/esm/index.js.map +1 -0
  58. package/dist/{tileset/traversers → esm/tileset/format-3d-tiles}/tileset-3d-traverser.js +2 -13
  59. package/dist/esm/tileset/format-3d-tiles/tileset-3d-traverser.js.map +1 -0
  60. package/dist/esm/tileset/format-i3s/i3s-pending-tiles-register.js +26 -0
  61. package/dist/esm/tileset/format-i3s/i3s-pending-tiles-register.js.map +1 -0
  62. package/dist/esm/tileset/format-i3s/i3s-tile-manager.js +79 -0
  63. package/dist/esm/tileset/format-i3s/i3s-tile-manager.js.map +1 -0
  64. package/dist/{tileset/traversers → esm/tileset/format-i3s}/i3s-tileset-traverser.js +16 -28
  65. package/dist/esm/tileset/format-i3s/i3s-tileset-traverser.js.map +1 -0
  66. package/dist/esm/tileset/helpers/3d-tiles-options.js +6 -0
  67. package/dist/esm/tileset/helpers/3d-tiles-options.js.map +1 -0
  68. package/dist/esm/tileset/helpers/bounding-volume.js +155 -0
  69. package/dist/esm/tileset/helpers/bounding-volume.js.map +1 -0
  70. package/dist/esm/tileset/helpers/frame-state.js +109 -0
  71. package/dist/esm/tileset/helpers/frame-state.js.map +1 -0
  72. package/dist/esm/tileset/helpers/i3s-lod.js +53 -0
  73. package/dist/esm/tileset/helpers/i3s-lod.js.map +1 -0
  74. package/dist/esm/tileset/helpers/tiles-3d-lod.js +100 -0
  75. package/dist/{tileset → esm/tileset}/helpers/tiles-3d-lod.js.map +1 -1
  76. package/dist/esm/tileset/helpers/transform-utils.js +50 -0
  77. package/dist/esm/tileset/helpers/transform-utils.js.map +1 -0
  78. package/dist/esm/tileset/helpers/zoom.js +55 -0
  79. package/dist/esm/tileset/helpers/zoom.js.map +1 -0
  80. package/dist/esm/tileset/tile-3d.js +445 -0
  81. package/dist/esm/tileset/tile-3d.js.map +1 -0
  82. package/dist/esm/tileset/tileset-3d.js +637 -0
  83. package/dist/esm/tileset/tileset-3d.js.map +1 -0
  84. package/dist/esm/tileset/tileset-cache.js +60 -0
  85. package/dist/esm/tileset/tileset-cache.js.map +1 -0
  86. package/dist/{tileset/traversers → esm/tileset}/tileset-traverser.js +20 -72
  87. package/dist/esm/tileset/tileset-traverser.js.map +1 -0
  88. package/dist/esm/types.js +2 -0
  89. package/dist/esm/types.js.map +1 -0
  90. package/dist/esm/utils/doubly-linked-list-node.js +12 -0
  91. package/dist/esm/utils/doubly-linked-list-node.js.map +1 -0
  92. package/dist/esm/utils/doubly-linked-list.js +65 -0
  93. package/dist/esm/utils/doubly-linked-list.js.map +1 -0
  94. package/dist/esm/utils/managed-array.js +87 -0
  95. package/dist/esm/utils/managed-array.js.map +1 -0
  96. package/dist/index.d.ts +11 -0
  97. package/dist/index.d.ts.map +1 -0
  98. package/dist/index.js +26 -9
  99. package/dist/tileset/format-3d-tiles/tileset-3d-traverser.d.ts +7 -0
  100. package/dist/tileset/format-3d-tiles/tileset-3d-traverser.d.ts.map +1 -0
  101. package/dist/tileset/format-3d-tiles/tileset-3d-traverser.js +54 -0
  102. package/dist/tileset/format-i3s/i3s-pending-tiles-register.d.ts +27 -0
  103. package/dist/tileset/format-i3s/i3s-pending-tiles-register.d.ts.map +1 -0
  104. package/dist/tileset/format-i3s/i3s-pending-tiles-register.js +47 -0
  105. package/dist/tileset/format-i3s/i3s-tile-manager.d.ts +34 -0
  106. package/dist/tileset/format-i3s/i3s-tile-manager.d.ts.map +1 -0
  107. package/dist/tileset/format-i3s/i3s-tile-manager.js +80 -0
  108. package/dist/tileset/format-i3s/i3s-tileset-traverser.d.ts +25 -0
  109. package/dist/tileset/format-i3s/i3s-tileset-traverser.d.ts.map +1 -0
  110. package/dist/tileset/format-i3s/i3s-tileset-traverser.js +92 -0
  111. package/dist/tileset/helpers/3d-tiles-options.d.ts +4 -0
  112. package/dist/tileset/helpers/3d-tiles-options.d.ts.map +1 -0
  113. package/dist/tileset/helpers/3d-tiles-options.js +8 -5
  114. package/dist/tileset/helpers/bounding-volume.d.ts +19 -0
  115. package/dist/tileset/helpers/bounding-volume.d.ts.map +1 -0
  116. package/dist/tileset/helpers/bounding-volume.js +274 -69
  117. package/dist/tileset/helpers/frame-state.d.ts +28 -0
  118. package/dist/tileset/helpers/frame-state.d.ts.map +1 -0
  119. package/dist/tileset/helpers/frame-state.js +131 -49
  120. package/dist/tileset/helpers/i3s-lod.d.ts +20 -0
  121. package/dist/tileset/helpers/i3s-lod.d.ts.map +1 -0
  122. package/dist/tileset/helpers/i3s-lod.js +82 -105
  123. package/dist/tileset/helpers/tiles-3d-lod.d.ts +8 -0
  124. package/dist/tileset/helpers/tiles-3d-lod.d.ts.map +1 -0
  125. package/dist/tileset/helpers/tiles-3d-lod.js +112 -100
  126. package/dist/tileset/helpers/transform-utils.d.ts +2 -0
  127. package/dist/tileset/helpers/transform-utils.d.ts.map +1 -0
  128. package/dist/tileset/helpers/transform-utils.js +51 -56
  129. package/dist/tileset/helpers/zoom.d.ts +46 -0
  130. package/dist/tileset/helpers/zoom.d.ts.map +1 -0
  131. package/dist/tileset/helpers/zoom.js +83 -30
  132. package/dist/tileset/tile-3d.d.ts +206 -0
  133. package/dist/tileset/tile-3d.d.ts.map +1 -0
  134. package/dist/tileset/tile-3d.js +593 -531
  135. package/dist/tileset/tileset-3d.d.ts +217 -0
  136. package/dist/tileset/tileset-3d.d.ts.map +1 -0
  137. package/dist/tileset/tileset-3d.js +707 -648
  138. package/dist/tileset/tileset-cache.d.ts +18 -0
  139. package/dist/tileset/tileset-cache.d.ts.map +1 -0
  140. package/dist/tileset/tileset-cache.js +70 -71
  141. package/dist/tileset/tileset-traverser.d.ts +46 -0
  142. package/dist/tileset/tileset-traverser.d.ts.map +1 -0
  143. package/dist/tileset/tileset-traverser.js +309 -0
  144. package/dist/types.d.ts +34 -0
  145. package/dist/types.d.ts.map +1 -0
  146. package/dist/types.js +2 -0
  147. package/dist/utils/doubly-linked-list-node.d.ts +11 -0
  148. package/dist/utils/doubly-linked-list-node.d.ts.map +1 -0
  149. package/dist/utils/doubly-linked-list-node.js +17 -8
  150. package/dist/utils/doubly-linked-list.d.ts +30 -0
  151. package/dist/utils/doubly-linked-list.d.ts.map +1 -0
  152. package/dist/utils/doubly-linked-list.js +91 -72
  153. package/dist/utils/managed-array.d.ts +85 -0
  154. package/dist/utils/managed-array.d.ts.map +1 -0
  155. package/dist/utils/managed-array.js +144 -103
  156. package/package.json +10 -10
  157. package/src/constants.ts +2 -0
  158. package/src/index.ts +7 -4
  159. package/src/tileset/{traversers → format-3d-tiles}/tileset-3d-traverser.ts +4 -2
  160. package/src/tileset/format-i3s/i3s-pending-tiles-register.ts +44 -0
  161. package/src/tileset/format-i3s/i3s-tile-manager.ts +101 -0
  162. package/src/tileset/{traversers → format-i3s}/i3s-tileset-traverser.ts +27 -15
  163. package/src/tileset/helpers/bounding-volume.ts +136 -0
  164. package/src/tileset/helpers/frame-state.ts +102 -18
  165. package/src/tileset/helpers/i3s-lod.ts +75 -96
  166. package/src/tileset/helpers/tiles-3d-lod.ts +2 -0
  167. package/src/tileset/helpers/transform-utils.ts +2 -0
  168. package/src/tileset/helpers/zoom.ts +84 -9
  169. package/src/tileset/tile-3d.ts +77 -20
  170. package/src/tileset/tileset-3d.ts +205 -43
  171. package/src/tileset/tileset-cache.ts +6 -2
  172. package/src/tileset/{traversers/tileset-traverser.ts → tileset-traverser.ts} +29 -17
  173. package/src/types.ts +36 -0
  174. package/src/utils/{doubly-linked-list-node.js → doubly-linked-list-node.ts} +7 -2
  175. package/src/utils/{doubly-linked-list.js → doubly-linked-list.ts} +5 -8
  176. package/src/utils/{managed-array.js → managed-array.ts} +5 -2
  177. package/dist/bundle.js.map +0 -1
  178. package/dist/constants.js.map +0 -1
  179. package/dist/index.js.map +0 -1
  180. package/dist/tileset/helpers/3d-tiles-options.js.map +0 -1
  181. package/dist/tileset/helpers/bounding-volume.js.map +0 -1
  182. package/dist/tileset/helpers/frame-state.js.map +0 -1
  183. package/dist/tileset/helpers/i3s-lod.js.map +0 -1
  184. package/dist/tileset/helpers/transform-utils.js.map +0 -1
  185. package/dist/tileset/helpers/zoom.js.map +0 -1
  186. package/dist/tileset/tile-3d.js.map +0 -1
  187. package/dist/tileset/tileset-3d.js.map +0 -1
  188. package/dist/tileset/tileset-cache.js.map +0 -1
  189. package/dist/tileset/traversers/i3s-tile-manager.js +0 -45
  190. package/dist/tileset/traversers/i3s-tile-manager.js.map +0 -1
  191. package/dist/tileset/traversers/i3s-tileset-traverser.js.map +0 -1
  192. package/dist/tileset/traversers/tileset-3d-traverser.js.map +0 -1
  193. package/dist/tileset/traversers/tileset-traverser.js.map +0 -1
  194. package/dist/utils/doubly-linked-list-node.js.map +0 -1
  195. package/dist/utils/doubly-linked-list.js.map +0 -1
  196. package/dist/utils/managed-array.js.map +0 -1
  197. package/src/tileset/traversers/i3s-tile-manager.ts +0 -39
@@ -0,0 +1,637 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+ import { Matrix4, Vector3 } from '@math.gl/core';
3
+ import { Ellipsoid } from '@math.gl/geospatial';
4
+ import { Stats } from '@probe.gl/stats';
5
+ import { RequestScheduler, assert, path } from '@loaders.gl/loader-utils';
6
+ import { TilesetCache } from './tileset-cache';
7
+ import { calculateTransformProps } from './helpers/transform-utils';
8
+ import { getFrameState, limitSelectedTiles } from './helpers/frame-state';
9
+ import { getZoomFromBoundingVolume, getZoomFromExtent, getZoomFromFullExtent } from './helpers/zoom';
10
+ import { Tile3D } from './tile-3d';
11
+ import { TILESET_TYPE } from '../constants';
12
+ import { TilesetTraverser } from './tileset-traverser';
13
+ import { Tileset3DTraverser } from './format-3d-tiles/tileset-3d-traverser';
14
+ import { I3STilesetTraverser } from './format-i3s/i3s-tileset-traverser';
15
+ const DEFAULT_PROPS = {
16
+ description: '',
17
+ ellipsoid: Ellipsoid.WGS84,
18
+ modelMatrix: new Matrix4(),
19
+ throttleRequests: true,
20
+ maxRequests: 64,
21
+ maximumMemoryUsage: 32,
22
+ maximumTilesSelected: 0,
23
+ debounceTime: 0,
24
+ onTileLoad: () => {},
25
+ onTileUnload: () => {},
26
+ onTileError: () => {},
27
+ onTraversalComplete: selectedTiles => selectedTiles,
28
+ contentLoader: undefined,
29
+ viewDistanceScale: 1.0,
30
+ maximumScreenSpaceError: 8,
31
+ loadTiles: true,
32
+ updateTransforms: true,
33
+ viewportTraversersMap: null,
34
+ loadOptions: {
35
+ fetch: {}
36
+ },
37
+ attributions: [],
38
+ basePath: '',
39
+ i3s: {}
40
+ };
41
+ const TILES_TOTAL = 'Tiles In Tileset(s)';
42
+ const TILES_IN_MEMORY = 'Tiles In Memory';
43
+ const TILES_IN_VIEW = 'Tiles In View';
44
+ const TILES_RENDERABLE = 'Tiles To Render';
45
+ const TILES_LOADED = 'Tiles Loaded';
46
+ const TILES_LOADING = 'Tiles Loading';
47
+ const TILES_UNLOADED = 'Tiles Unloaded';
48
+ const TILES_LOAD_FAILED = 'Failed Tile Loads';
49
+ const POINTS_COUNT = 'Points/Vertices';
50
+ const TILES_GPU_MEMORY = 'Tile Memory Use';
51
+ export class Tileset3D {
52
+ constructor(json, options) {
53
+ _defineProperty(this, "options", void 0);
54
+ _defineProperty(this, "loadOptions", void 0);
55
+ _defineProperty(this, "type", void 0);
56
+ _defineProperty(this, "tileset", void 0);
57
+ _defineProperty(this, "loader", void 0);
58
+ _defineProperty(this, "url", void 0);
59
+ _defineProperty(this, "basePath", void 0);
60
+ _defineProperty(this, "modelMatrix", void 0);
61
+ _defineProperty(this, "ellipsoid", void 0);
62
+ _defineProperty(this, "lodMetricType", void 0);
63
+ _defineProperty(this, "lodMetricValue", void 0);
64
+ _defineProperty(this, "refine", void 0);
65
+ _defineProperty(this, "root", void 0);
66
+ _defineProperty(this, "roots", void 0);
67
+ _defineProperty(this, "asset", void 0);
68
+ _defineProperty(this, "description", void 0);
69
+ _defineProperty(this, "properties", void 0);
70
+ _defineProperty(this, "extras", void 0);
71
+ _defineProperty(this, "attributions", void 0);
72
+ _defineProperty(this, "credits", void 0);
73
+ _defineProperty(this, "stats", void 0);
74
+ _defineProperty(this, "contentFormats", {
75
+ draco: false,
76
+ meshopt: false,
77
+ dds: false,
78
+ ktx2: false
79
+ });
80
+ _defineProperty(this, "traverseCounter", void 0);
81
+ _defineProperty(this, "geometricError", void 0);
82
+ _defineProperty(this, "selectedTiles", void 0);
83
+ _defineProperty(this, "updatePromise", null);
84
+ _defineProperty(this, "tilesetInitializationPromise", void 0);
85
+ _defineProperty(this, "cartographicCenter", void 0);
86
+ _defineProperty(this, "cartesianCenter", void 0);
87
+ _defineProperty(this, "zoom", void 0);
88
+ _defineProperty(this, "boundingVolume", void 0);
89
+ _defineProperty(this, "gpuMemoryUsageInBytes", void 0);
90
+ _defineProperty(this, "dynamicScreenSpaceErrorComputedDensity", void 0);
91
+ _defineProperty(this, "_traverser", void 0);
92
+ _defineProperty(this, "_cache", void 0);
93
+ _defineProperty(this, "_requestScheduler", void 0);
94
+ _defineProperty(this, "_frameNumber", void 0);
95
+ _defineProperty(this, "_queryParamsString", void 0);
96
+ _defineProperty(this, "_queryParams", void 0);
97
+ _defineProperty(this, "_extensionsUsed", void 0);
98
+ _defineProperty(this, "_tiles", void 0);
99
+ _defineProperty(this, "_pendingCount", void 0);
100
+ _defineProperty(this, "lastUpdatedVieports", void 0);
101
+ _defineProperty(this, "_requestedTiles", void 0);
102
+ _defineProperty(this, "_emptyTiles", void 0);
103
+ _defineProperty(this, "frameStateData", void 0);
104
+ _defineProperty(this, "maximumMemoryUsage", void 0);
105
+ assert(json);
106
+ this.options = {
107
+ ...DEFAULT_PROPS,
108
+ ...options
109
+ };
110
+ this.tileset = json;
111
+ this.loader = json.loader;
112
+ this.type = json.type;
113
+ this.url = json.url;
114
+ this.basePath = json.basePath || path.dirname(this.url);
115
+ this.modelMatrix = this.options.modelMatrix;
116
+ this.ellipsoid = this.options.ellipsoid;
117
+ this.lodMetricType = json.lodMetricType;
118
+ this.lodMetricValue = json.lodMetricValue;
119
+ this.refine = json.root.refine;
120
+ this.loadOptions = this.options.loadOptions || {};
121
+ this.root = null;
122
+ this.roots = {};
123
+ this.cartographicCenter = null;
124
+ this.cartesianCenter = null;
125
+ this.zoom = 1;
126
+ this.boundingVolume = null;
127
+ this.traverseCounter = 0;
128
+ this.geometricError = 0;
129
+ this._traverser = this._initializeTraverser();
130
+ this._cache = new TilesetCache();
131
+ this._requestScheduler = new RequestScheduler({
132
+ throttleRequests: this.options.throttleRequests,
133
+ maxRequests: this.options.maxRequests
134
+ });
135
+ this._frameNumber = 0;
136
+ this._pendingCount = 0;
137
+ this._tiles = {};
138
+ this.selectedTiles = [];
139
+ this._emptyTiles = [];
140
+ this._requestedTiles = [];
141
+ this.frameStateData = {};
142
+ this.lastUpdatedVieports = null;
143
+ this._queryParams = {};
144
+ this._queryParamsString = '';
145
+ this.maximumMemoryUsage = this.options.maximumMemoryUsage || 32;
146
+ this.gpuMemoryUsageInBytes = 0;
147
+ this.stats = new Stats({
148
+ id: this.url
149
+ });
150
+ this._initializeStats();
151
+ this._extensionsUsed = undefined;
152
+ this.dynamicScreenSpaceErrorComputedDensity = 0.0;
153
+ this.extras = null;
154
+ this.asset = {};
155
+ this.credits = {};
156
+ this.description = this.options.description || '';
157
+ this.tilesetInitializationPromise = this._initializeTileSet(json);
158
+ }
159
+ destroy() {
160
+ this._destroy();
161
+ }
162
+ isLoaded() {
163
+ return this._pendingCount === 0 && this._frameNumber !== 0 && this._requestedTiles.length === 0;
164
+ }
165
+ get tiles() {
166
+ return Object.values(this._tiles);
167
+ }
168
+ get frameNumber() {
169
+ return this._frameNumber;
170
+ }
171
+ get queryParams() {
172
+ if (!this._queryParamsString) {
173
+ this._queryParamsString = getQueryParamString(this._queryParams);
174
+ }
175
+ return this._queryParamsString;
176
+ }
177
+ setProps(props) {
178
+ this.options = {
179
+ ...this.options,
180
+ ...props
181
+ };
182
+ }
183
+ setOptions(options) {
184
+ this.options = {
185
+ ...this.options,
186
+ ...options
187
+ };
188
+ }
189
+ getTileUrl(tilePath) {
190
+ const isDataUrl = tilePath.startsWith('data:');
191
+ if (isDataUrl) {
192
+ return tilePath;
193
+ }
194
+ return "".concat(tilePath).concat(this.queryParams);
195
+ }
196
+ hasExtension(extensionName) {
197
+ return Boolean(this._extensionsUsed && this._extensionsUsed.indexOf(extensionName) > -1);
198
+ }
199
+ update() {
200
+ let viewports = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
201
+ this.tilesetInitializationPromise.then(() => {
202
+ if (!viewports && this.lastUpdatedVieports) {
203
+ viewports = this.lastUpdatedVieports;
204
+ } else {
205
+ this.lastUpdatedVieports = viewports;
206
+ }
207
+ if (viewports) {
208
+ this.doUpdate(viewports);
209
+ }
210
+ });
211
+ }
212
+ async selectTiles() {
213
+ let viewports = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
214
+ await this.tilesetInitializationPromise;
215
+ if (viewports) {
216
+ this.lastUpdatedVieports = viewports;
217
+ }
218
+ if (!this.updatePromise) {
219
+ this.updatePromise = new Promise(resolve => {
220
+ setTimeout(() => {
221
+ if (this.lastUpdatedVieports) {
222
+ this.doUpdate(this.lastUpdatedVieports);
223
+ }
224
+ resolve(this._frameNumber);
225
+ this.updatePromise = null;
226
+ }, this.options.debounceTime);
227
+ });
228
+ }
229
+ return this.updatePromise;
230
+ }
231
+ doUpdate(viewports) {
232
+ if ('loadTiles' in this.options && !this.options.loadTiles) {
233
+ return;
234
+ }
235
+ if (this.traverseCounter > 0) {
236
+ return;
237
+ }
238
+ const preparedViewports = viewports instanceof Array ? viewports : [viewports];
239
+ this._cache.reset();
240
+ this._frameNumber++;
241
+ this.traverseCounter = preparedViewports.length;
242
+ const viewportsToTraverse = [];
243
+ for (const viewport of preparedViewports) {
244
+ const id = viewport.id;
245
+ if (this._needTraverse(id)) {
246
+ viewportsToTraverse.push(id);
247
+ } else {
248
+ this.traverseCounter--;
249
+ }
250
+ }
251
+ for (const viewport of preparedViewports) {
252
+ const id = viewport.id;
253
+ if (!this.roots[id]) {
254
+ this.roots[id] = this._initializeTileHeaders(this.tileset, null);
255
+ }
256
+ if (!viewportsToTraverse.includes(id)) {
257
+ continue;
258
+ }
259
+ const frameState = getFrameState(viewport, this._frameNumber);
260
+ this._traverser.traverse(this.roots[id], frameState, this.options);
261
+ }
262
+ }
263
+ _needTraverse(viewportId) {
264
+ let traverserId = viewportId;
265
+ if (this.options.viewportTraversersMap) {
266
+ traverserId = this.options.viewportTraversersMap[viewportId];
267
+ }
268
+ if (traverserId !== viewportId) {
269
+ return false;
270
+ }
271
+ return true;
272
+ }
273
+ _onTraversalEnd(frameState) {
274
+ const id = frameState.viewport.id;
275
+ if (!this.frameStateData[id]) {
276
+ this.frameStateData[id] = {
277
+ selectedTiles: [],
278
+ _requestedTiles: [],
279
+ _emptyTiles: []
280
+ };
281
+ }
282
+ const currentFrameStateData = this.frameStateData[id];
283
+ const selectedTiles = Object.values(this._traverser.selectedTiles);
284
+ const [filteredSelectedTiles, unselectedTiles] = limitSelectedTiles(selectedTiles, frameState, this.options.maximumTilesSelected);
285
+ currentFrameStateData.selectedTiles = filteredSelectedTiles;
286
+ for (const tile of unselectedTiles) {
287
+ tile.unselect();
288
+ }
289
+ currentFrameStateData._requestedTiles = Object.values(this._traverser.requestedTiles);
290
+ currentFrameStateData._emptyTiles = Object.values(this._traverser.emptyTiles);
291
+ this.traverseCounter--;
292
+ if (this.traverseCounter > 0) {
293
+ return;
294
+ }
295
+ this._updateTiles();
296
+ }
297
+ _updateTiles() {
298
+ this.selectedTiles = [];
299
+ this._requestedTiles = [];
300
+ this._emptyTiles = [];
301
+ for (const frameStateKey in this.frameStateData) {
302
+ const frameStateDataValue = this.frameStateData[frameStateKey];
303
+ this.selectedTiles = this.selectedTiles.concat(frameStateDataValue.selectedTiles);
304
+ this._requestedTiles = this._requestedTiles.concat(frameStateDataValue._requestedTiles);
305
+ this._emptyTiles = this._emptyTiles.concat(frameStateDataValue._emptyTiles);
306
+ }
307
+ this.selectedTiles = this.options.onTraversalComplete(this.selectedTiles);
308
+ for (const tile of this.selectedTiles) {
309
+ this._tiles[tile.id] = tile;
310
+ }
311
+ this._loadTiles();
312
+ this._unloadTiles();
313
+ this._updateStats();
314
+ }
315
+ _tilesChanged(oldSelectedTiles, selectedTiles) {
316
+ if (oldSelectedTiles.length !== selectedTiles.length) {
317
+ return true;
318
+ }
319
+ const set1 = new Set(oldSelectedTiles.map(t => t.id));
320
+ const set2 = new Set(selectedTiles.map(t => t.id));
321
+ let changed = oldSelectedTiles.filter(x => !set2.has(x.id)).length > 0;
322
+ changed = changed || selectedTiles.filter(x => !set1.has(x.id)).length > 0;
323
+ return changed;
324
+ }
325
+ _loadTiles() {
326
+ for (const tile of this._requestedTiles) {
327
+ if (tile.contentUnloaded) {
328
+ this._loadTile(tile);
329
+ }
330
+ }
331
+ }
332
+ _unloadTiles() {
333
+ this._cache.unloadTiles(this, (tileset, tile) => tileset._unloadTile(tile));
334
+ }
335
+ _updateStats() {
336
+ let tilesRenderable = 0;
337
+ let pointsRenderable = 0;
338
+ for (const tile of this.selectedTiles) {
339
+ if (tile.contentAvailable && tile.content) {
340
+ tilesRenderable++;
341
+ if (tile.content.pointCount) {
342
+ pointsRenderable += tile.content.pointCount;
343
+ } else {
344
+ pointsRenderable += tile.content.vertexCount;
345
+ }
346
+ }
347
+ }
348
+ this.stats.get(TILES_IN_VIEW).count = this.selectedTiles.length;
349
+ this.stats.get(TILES_RENDERABLE).count = tilesRenderable;
350
+ this.stats.get(POINTS_COUNT).count = pointsRenderable;
351
+ }
352
+ async _initializeTileSet(tilesetJson) {
353
+ if (this.type === TILESET_TYPE.I3S) {
354
+ this.calculateViewPropsI3S();
355
+ tilesetJson.root = await tilesetJson.root;
356
+ }
357
+ this.root = this._initializeTileHeaders(tilesetJson, null);
358
+ if (this.type === TILESET_TYPE.TILES3D) {
359
+ this._initializeTiles3DTileset(tilesetJson);
360
+ this.calculateViewPropsTiles3D();
361
+ }
362
+ if (this.type === TILESET_TYPE.I3S) {
363
+ this._initializeI3STileset();
364
+ }
365
+ }
366
+ calculateViewPropsI3S() {
367
+ var _this$tileset$store;
368
+ const fullExtent = this.tileset.fullExtent;
369
+ if (fullExtent) {
370
+ const {
371
+ xmin,
372
+ xmax,
373
+ ymin,
374
+ ymax,
375
+ zmin,
376
+ zmax
377
+ } = fullExtent;
378
+ this.cartographicCenter = new Vector3(xmin + (xmax - xmin) / 2, ymin + (ymax - ymin) / 2, zmin + (zmax - zmin) / 2);
379
+ this.cartesianCenter = Ellipsoid.WGS84.cartographicToCartesian(this.cartographicCenter, new Vector3());
380
+ this.zoom = getZoomFromFullExtent(fullExtent, this.cartographicCenter, this.cartesianCenter);
381
+ return;
382
+ }
383
+ const extent = (_this$tileset$store = this.tileset.store) === null || _this$tileset$store === void 0 ? void 0 : _this$tileset$store.extent;
384
+ if (extent) {
385
+ const [xmin, ymin, xmax, ymax] = extent;
386
+ this.cartographicCenter = new Vector3(xmin + (xmax - xmin) / 2, ymin + (ymax - ymin) / 2, 0);
387
+ this.cartesianCenter = Ellipsoid.WGS84.cartographicToCartesian(this.cartographicCenter, new Vector3());
388
+ this.zoom = getZoomFromExtent(extent, this.cartographicCenter, this.cartesianCenter);
389
+ return;
390
+ }
391
+ console.warn('Extent is not defined in the tileset header');
392
+ this.cartographicCenter = new Vector3();
393
+ this.zoom = 1;
394
+ return;
395
+ }
396
+ calculateViewPropsTiles3D() {
397
+ const root = this.root;
398
+ assert(root);
399
+ const {
400
+ center
401
+ } = root.boundingVolume;
402
+ if (!center) {
403
+ console.warn('center was not pre-calculated for the root tile');
404
+ this.cartographicCenter = new Vector3();
405
+ this.zoom = 1;
406
+ return;
407
+ }
408
+ if (center[0] !== 0 || center[1] !== 0 || center[2] !== 0) {
409
+ this.cartographicCenter = Ellipsoid.WGS84.cartesianToCartographic(center, new Vector3());
410
+ } else {
411
+ this.cartographicCenter = new Vector3(0, 0, -Ellipsoid.WGS84.radii[0]);
412
+ }
413
+ this.cartesianCenter = center;
414
+ this.zoom = getZoomFromBoundingVolume(root.boundingVolume, this.cartographicCenter);
415
+ }
416
+ _initializeStats() {
417
+ this.stats.get(TILES_TOTAL);
418
+ this.stats.get(TILES_LOADING);
419
+ this.stats.get(TILES_IN_MEMORY);
420
+ this.stats.get(TILES_IN_VIEW);
421
+ this.stats.get(TILES_RENDERABLE);
422
+ this.stats.get(TILES_LOADED);
423
+ this.stats.get(TILES_UNLOADED);
424
+ this.stats.get(TILES_LOAD_FAILED);
425
+ this.stats.get(POINTS_COUNT);
426
+ this.stats.get(TILES_GPU_MEMORY, 'memory');
427
+ }
428
+ _initializeTileHeaders(tilesetJson, parentTileHeader) {
429
+ const rootTile = new Tile3D(this, tilesetJson.root, parentTileHeader);
430
+ if (parentTileHeader) {
431
+ parentTileHeader.children.push(rootTile);
432
+ rootTile.depth = parentTileHeader.depth + 1;
433
+ }
434
+ if (this.type === TILESET_TYPE.TILES3D) {
435
+ const stack = [];
436
+ stack.push(rootTile);
437
+ while (stack.length > 0) {
438
+ const tile = stack.pop();
439
+ this.stats.get(TILES_TOTAL).incrementCount();
440
+ const children = tile.header.children || [];
441
+ for (const childHeader of children) {
442
+ const childTile = new Tile3D(this, childHeader, tile);
443
+ tile.children.push(childTile);
444
+ childTile.depth = tile.depth + 1;
445
+ stack.push(childTile);
446
+ }
447
+ }
448
+ }
449
+ return rootTile;
450
+ }
451
+ _initializeTraverser() {
452
+ let TraverserClass;
453
+ const type = this.type;
454
+ switch (type) {
455
+ case TILESET_TYPE.TILES3D:
456
+ TraverserClass = Tileset3DTraverser;
457
+ break;
458
+ case TILESET_TYPE.I3S:
459
+ TraverserClass = I3STilesetTraverser;
460
+ break;
461
+ default:
462
+ TraverserClass = TilesetTraverser;
463
+ }
464
+ return new TraverserClass({
465
+ basePath: this.basePath,
466
+ onTraversalEnd: this._onTraversalEnd.bind(this)
467
+ });
468
+ }
469
+ _destroyTileHeaders(parentTile) {
470
+ this._destroySubtree(parentTile);
471
+ }
472
+ async _loadTile(tile) {
473
+ let loaded;
474
+ try {
475
+ this._onStartTileLoading();
476
+ loaded = await tile.loadContent();
477
+ } catch (error) {
478
+ this._onTileLoadError(tile, error);
479
+ } finally {
480
+ this._onEndTileLoading();
481
+ this._onTileLoad(tile, loaded);
482
+ }
483
+ }
484
+ _onTileLoadError(tile, error) {
485
+ this.stats.get(TILES_LOAD_FAILED).incrementCount();
486
+ const message = error.message || error.toString();
487
+ const url = tile.url;
488
+ console.error("A 3D tile failed to load: ".concat(tile.url, " ").concat(message));
489
+ this.options.onTileError(tile, message, url);
490
+ }
491
+ _onTileLoad(tile, loaded) {
492
+ if (!loaded) {
493
+ return;
494
+ }
495
+ if (this.type === TILESET_TYPE.I3S) {
496
+ var _this$tileset, _this$tileset$nodePag;
497
+ const nodesInNodePages = ((_this$tileset = this.tileset) === null || _this$tileset === void 0 ? void 0 : (_this$tileset$nodePag = _this$tileset.nodePagesTile) === null || _this$tileset$nodePag === void 0 ? void 0 : _this$tileset$nodePag.nodesInNodePages) || 0;
498
+ this.stats.get(TILES_TOTAL).reset();
499
+ this.stats.get(TILES_TOTAL).addCount(nodesInNodePages);
500
+ }
501
+ if (tile && tile.content) {
502
+ calculateTransformProps(tile, tile.content);
503
+ }
504
+ this.updateContentTypes(tile);
505
+ this._addTileToCache(tile);
506
+ this.options.onTileLoad(tile);
507
+ }
508
+ updateContentTypes(tile) {
509
+ if (this.type === TILESET_TYPE.I3S) {
510
+ if (tile.header.isDracoGeometry) {
511
+ this.contentFormats.draco = true;
512
+ }
513
+ switch (tile.header.textureFormat) {
514
+ case 'dds':
515
+ this.contentFormats.dds = true;
516
+ break;
517
+ case 'ktx2':
518
+ this.contentFormats.ktx2 = true;
519
+ break;
520
+ default:
521
+ }
522
+ } else if (this.type === TILESET_TYPE.TILES3D) {
523
+ var _tile$content;
524
+ const {
525
+ extensionsRemoved = []
526
+ } = ((_tile$content = tile.content) === null || _tile$content === void 0 ? void 0 : _tile$content.gltf) || {};
527
+ if (extensionsRemoved.includes('KHR_draco_mesh_compression')) {
528
+ this.contentFormats.draco = true;
529
+ }
530
+ if (extensionsRemoved.includes('EXT_meshopt_compression')) {
531
+ this.contentFormats.meshopt = true;
532
+ }
533
+ if (extensionsRemoved.includes('KHR_texture_basisu')) {
534
+ this.contentFormats.ktx2 = true;
535
+ }
536
+ }
537
+ }
538
+ _onStartTileLoading() {
539
+ this._pendingCount++;
540
+ this.stats.get(TILES_LOADING).incrementCount();
541
+ }
542
+ _onEndTileLoading() {
543
+ this._pendingCount--;
544
+ this.stats.get(TILES_LOADING).decrementCount();
545
+ }
546
+ _addTileToCache(tile) {
547
+ this._cache.add(this, tile, tileset => tileset._updateCacheStats(tile));
548
+ }
549
+ _updateCacheStats(tile) {
550
+ this.stats.get(TILES_LOADED).incrementCount();
551
+ this.stats.get(TILES_IN_MEMORY).incrementCount();
552
+ this.gpuMemoryUsageInBytes += tile.content.byteLength || 0;
553
+ this.stats.get(TILES_GPU_MEMORY).count = this.gpuMemoryUsageInBytes;
554
+ }
555
+ _unloadTile(tile) {
556
+ this.gpuMemoryUsageInBytes -= tile.content && tile.content.byteLength || 0;
557
+ this.stats.get(TILES_IN_MEMORY).decrementCount();
558
+ this.stats.get(TILES_UNLOADED).incrementCount();
559
+ this.stats.get(TILES_GPU_MEMORY).count = this.gpuMemoryUsageInBytes;
560
+ this.options.onTileUnload(tile);
561
+ tile.unloadContent();
562
+ }
563
+ _destroy() {
564
+ const stack = [];
565
+ if (this.root) {
566
+ stack.push(this.root);
567
+ }
568
+ while (stack.length > 0) {
569
+ const tile = stack.pop();
570
+ for (const child of tile.children) {
571
+ stack.push(child);
572
+ }
573
+ this._destroyTile(tile);
574
+ }
575
+ this.root = null;
576
+ }
577
+ _destroySubtree(tile) {
578
+ const root = tile;
579
+ const stack = [];
580
+ stack.push(root);
581
+ while (stack.length > 0) {
582
+ tile = stack.pop();
583
+ for (const child of tile.children) {
584
+ stack.push(child);
585
+ }
586
+ if (tile !== root) {
587
+ this._destroyTile(tile);
588
+ }
589
+ }
590
+ root.children = [];
591
+ }
592
+ _destroyTile(tile) {
593
+ this._cache.unloadTile(this, tile);
594
+ this._unloadTile(tile);
595
+ tile.destroy();
596
+ }
597
+ _initializeTiles3DTileset(tilesetJson) {
598
+ this.asset = tilesetJson.asset;
599
+ if (!this.asset) {
600
+ throw new Error('Tileset must have an asset property.');
601
+ }
602
+ if (this.asset.version !== '0.0' && this.asset.version !== '1.0') {
603
+ throw new Error('The tileset must be 3D Tiles version 0.0 or 1.0.');
604
+ }
605
+ if ('tilesetVersion' in this.asset) {
606
+ this._queryParams.v = this.asset.tilesetVersion;
607
+ }
608
+ this.credits = {
609
+ attributions: this.options.attributions || []
610
+ };
611
+ this.description = this.options.description || '';
612
+ this.properties = tilesetJson.properties;
613
+ this.geometricError = tilesetJson.geometricError;
614
+ this._extensionsUsed = tilesetJson.extensionsUsed;
615
+ this.extras = tilesetJson.extras;
616
+ }
617
+ _initializeI3STileset() {
618
+ if (this.loadOptions.i3s && 'token' in this.loadOptions.i3s) {
619
+ this._queryParams.token = this.loadOptions.i3s.token;
620
+ }
621
+ }
622
+ }
623
+ function getQueryParamString(queryParams) {
624
+ const queryParamStrings = [];
625
+ for (const key of Object.keys(queryParams)) {
626
+ queryParamStrings.push("".concat(key, "=").concat(queryParams[key]));
627
+ }
628
+ switch (queryParamStrings.length) {
629
+ case 0:
630
+ return '';
631
+ case 1:
632
+ return "?".concat(queryParamStrings[0]);
633
+ default:
634
+ return "?".concat(queryParamStrings.join('&'));
635
+ }
636
+ }
637
+ //# sourceMappingURL=tileset-3d.js.map