@loaders.gl/tiles 4.4.5 → 5.0.0-alpha.2

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 (227) hide show
  1. package/LICENSE +14 -3
  2. package/README.md +110 -1
  3. package/dist/dist.dev.js +6588 -2057
  4. package/dist/dist.min.js +1 -1
  5. package/dist/image-set.d.ts +94 -0
  6. package/dist/image-set.d.ts.map +1 -0
  7. package/dist/image-set.js +243 -0
  8. package/dist/image-set.js.map +1 -0
  9. package/dist/index.cjs +6872 -2160
  10. package/dist/index.cjs.map +3 -4
  11. package/dist/index.d.ts +33 -9
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +18 -8
  14. package/dist/index.js.map +1 -1
  15. package/dist/point-cloud/point-cloud-tile.d.ts +47 -0
  16. package/dist/point-cloud/point-cloud-tile.d.ts.map +1 -0
  17. package/dist/point-cloud/point-cloud-tile.js +70 -0
  18. package/dist/point-cloud/point-cloud-tile.js.map +1 -0
  19. package/dist/point-cloud/point-cloud-tileset.d.ts +131 -0
  20. package/dist/point-cloud/point-cloud-tileset.d.ts.map +1 -0
  21. package/dist/point-cloud/point-cloud-tileset.js +510 -0
  22. package/dist/point-cloud/point-cloud-tileset.js.map +1 -0
  23. package/dist/point-cloud/types.d.ts +64 -0
  24. package/dist/point-cloud/types.d.ts.map +1 -0
  25. package/dist/point-cloud/types.js +5 -0
  26. package/dist/point-cloud/types.js.map +1 -0
  27. package/dist/raster-set.d.ts +113 -0
  28. package/dist/raster-set.d.ts.map +1 -0
  29. package/dist/raster-set.js +274 -0
  30. package/dist/raster-set.js.map +1 -0
  31. package/dist/tileset-2d/adapter.d.ts +38 -0
  32. package/dist/tileset-2d/adapter.d.ts.map +1 -0
  33. package/dist/tileset-2d/adapter.js +5 -0
  34. package/dist/tileset-2d/adapter.js.map +1 -0
  35. package/dist/tileset-2d/index.d.ts +7 -0
  36. package/dist/tileset-2d/index.d.ts.map +1 -0
  37. package/dist/tileset-2d/index.js +6 -0
  38. package/dist/tileset-2d/index.js.map +1 -0
  39. package/dist/tileset-2d/tile-2d-header.d.ts +68 -0
  40. package/dist/tileset-2d/tile-2d-header.d.ts.map +1 -0
  41. package/dist/tileset-2d/tile-2d-header.js +181 -0
  42. package/dist/tileset-2d/tile-2d-header.js.map +1 -0
  43. package/dist/tileset-2d/tileset-2d.d.ts +201 -0
  44. package/dist/tileset-2d/tileset-2d.d.ts.map +1 -0
  45. package/dist/tileset-2d/tileset-2d.js +532 -0
  46. package/dist/tileset-2d/tileset-2d.js.map +1 -0
  47. package/dist/tileset-2d/types.d.ts +44 -0
  48. package/dist/tileset-2d/types.d.ts.map +1 -0
  49. package/dist/tileset-2d/types.js +5 -0
  50. package/dist/tileset-2d/types.js.map +1 -0
  51. package/dist/tileset-2d.d.ts +2 -0
  52. package/dist/tileset-2d.d.ts.map +1 -0
  53. package/dist/tileset-2d.js +5 -0
  54. package/dist/tileset-2d.js.map +1 -0
  55. package/dist/tileset-3d/common/indexed-archive-tileset-source.d.ts +60 -0
  56. package/dist/tileset-3d/common/indexed-archive-tileset-source.d.ts.map +1 -0
  57. package/dist/tileset-3d/common/indexed-archive-tileset-source.js +125 -0
  58. package/dist/tileset-3d/common/indexed-archive-tileset-source.js.map +1 -0
  59. package/dist/{tileset → tileset-3d/common}/tile-3d.d.ts +133 -29
  60. package/dist/tileset-3d/common/tile-3d.d.ts.map +1 -0
  61. package/dist/{tileset → tileset-3d/common}/tile-3d.js +282 -77
  62. package/dist/tileset-3d/common/tile-3d.js.map +1 -0
  63. package/dist/tileset-3d/common/tileset-3d.d.ts +317 -0
  64. package/dist/tileset-3d/common/tileset-3d.d.ts.map +1 -0
  65. package/dist/tileset-3d/common/tileset-3d.js +807 -0
  66. package/dist/tileset-3d/common/tileset-3d.js.map +1 -0
  67. package/dist/tileset-3d/common/tileset-cache.d.ts +29 -0
  68. package/dist/tileset-3d/common/tileset-cache.d.ts.map +1 -0
  69. package/dist/{tileset → tileset-3d/common}/tileset-cache.js +12 -4
  70. package/dist/tileset-3d/common/tileset-cache.js.map +1 -0
  71. package/dist/tileset-3d/common/tileset-source.d.ts +204 -0
  72. package/dist/tileset-3d/common/tileset-source.d.ts.map +1 -0
  73. package/dist/tileset-3d/common/tileset-source.js +17 -0
  74. package/dist/tileset-3d/common/tileset-source.js.map +1 -0
  75. package/dist/{tileset → tileset-3d/common}/tileset-traverser.d.ts +15 -2
  76. package/dist/tileset-3d/common/tileset-traverser.d.ts.map +1 -0
  77. package/dist/{tileset → tileset-3d/common}/tileset-traverser.js +30 -3
  78. package/dist/tileset-3d/common/tileset-traverser.js.map +1 -0
  79. package/dist/tileset-3d/format-3d-tiles/implicit-tiling.d.ts +111 -0
  80. package/dist/tileset-3d/format-3d-tiles/implicit-tiling.d.ts.map +1 -0
  81. package/dist/tileset-3d/format-3d-tiles/implicit-tiling.js +340 -0
  82. package/dist/tileset-3d/format-3d-tiles/implicit-tiling.js.map +1 -0
  83. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.d.ts +189 -0
  84. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.d.ts.map +1 -0
  85. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.js +510 -0
  86. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.js.map +1 -0
  87. package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.d.ts +43 -0
  88. package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.d.ts.map +1 -0
  89. package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.js +119 -0
  90. package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.js.map +1 -0
  91. package/dist/tileset-3d/format-i3s/i3s-pending-tiles-register.d.ts.map +1 -0
  92. package/dist/{tileset → tileset-3d}/format-i3s/i3s-pending-tiles-register.js +3 -0
  93. package/dist/tileset-3d/format-i3s/i3s-pending-tiles-register.js.map +1 -0
  94. package/dist/tileset-3d/format-i3s/i3s-source.d.ts +99 -0
  95. package/dist/tileset-3d/format-i3s/i3s-source.d.ts.map +1 -0
  96. package/dist/tileset-3d/format-i3s/i3s-source.js +299 -0
  97. package/dist/tileset-3d/format-i3s/i3s-source.js.map +1 -0
  98. package/dist/tileset-3d/format-i3s/i3s-tile-manager.d.ts.map +1 -0
  99. package/dist/{tileset → tileset-3d}/format-i3s/i3s-tile-manager.js +5 -2
  100. package/dist/tileset-3d/format-i3s/i3s-tile-manager.js.map +1 -0
  101. package/dist/{tileset → tileset-3d}/format-i3s/i3s-tileset-traverser.d.ts +2 -2
  102. package/dist/tileset-3d/format-i3s/i3s-tileset-traverser.d.ts.map +1 -0
  103. package/dist/{tileset → tileset-3d}/format-i3s/i3s-tileset-traverser.js +17 -23
  104. package/dist/tileset-3d/format-i3s/i3s-tileset-traverser.js.map +1 -0
  105. package/dist/{tileset → tileset-3d}/helpers/3d-tiles-options.d.ts +1 -1
  106. package/dist/tileset-3d/helpers/3d-tiles-options.d.ts.map +1 -0
  107. package/dist/{tileset → tileset-3d}/helpers/3d-tiles-options.js +3 -0
  108. package/dist/tileset-3d/helpers/3d-tiles-options.js.map +1 -0
  109. package/dist/tileset-3d/helpers/bounding-volume.d.ts.map +1 -0
  110. package/dist/{tileset → tileset-3d}/helpers/bounding-volume.js +1 -0
  111. package/dist/tileset-3d/helpers/bounding-volume.js.map +1 -0
  112. package/dist/tileset-3d/helpers/frame-state.d.ts +86 -0
  113. package/dist/tileset-3d/helpers/frame-state.d.ts.map +1 -0
  114. package/dist/{tileset → tileset-3d}/helpers/frame-state.js +84 -9
  115. package/dist/tileset-3d/helpers/frame-state.js.map +1 -0
  116. package/dist/{tileset → tileset-3d}/helpers/i3s-lod.d.ts +1 -1
  117. package/dist/tileset-3d/helpers/i3s-lod.d.ts.map +1 -0
  118. package/dist/{tileset → tileset-3d}/helpers/i3s-lod.js +1 -1
  119. package/dist/tileset-3d/helpers/i3s-lod.js.map +1 -0
  120. package/dist/tileset-3d/helpers/tiles-3d-lod.d.ts +72 -0
  121. package/dist/tileset-3d/helpers/tiles-3d-lod.d.ts.map +1 -0
  122. package/dist/tileset-3d/helpers/tiles-3d-lod.js +257 -0
  123. package/dist/tileset-3d/helpers/tiles-3d-lod.js.map +1 -0
  124. package/dist/tileset-3d/helpers/tiles-3d-request-priority.d.ts +134 -0
  125. package/dist/tileset-3d/helpers/tiles-3d-request-priority.d.ts.map +1 -0
  126. package/dist/tileset-3d/helpers/tiles-3d-request-priority.js +179 -0
  127. package/dist/tileset-3d/helpers/tiles-3d-request-priority.js.map +1 -0
  128. package/dist/{tileset → tileset-3d}/helpers/transform-utils.d.ts +1 -1
  129. package/dist/tileset-3d/helpers/transform-utils.d.ts.map +1 -0
  130. package/dist/tileset-3d/helpers/transform-utils.js.map +1 -0
  131. package/dist/tileset-3d/helpers/zoom.d.ts.map +1 -0
  132. package/dist/tileset-3d/helpers/zoom.js.map +1 -0
  133. package/dist/types.d.ts +9 -0
  134. package/dist/types.d.ts.map +1 -1
  135. package/dist/types.js +3 -0
  136. package/dist/types.js.map +1 -1
  137. package/dist/utils/doubly-linked-list.d.ts.map +1 -1
  138. package/dist/utils/doubly-linked-list.js +1 -0
  139. package/dist/utils/doubly-linked-list.js.map +1 -1
  140. package/dist/utils/managed-array.d.ts.map +1 -1
  141. package/dist/utils/managed-array.js +1 -0
  142. package/dist/utils/managed-array.js.map +1 -1
  143. package/package.json +7 -6
  144. package/src/image-set.ts +328 -0
  145. package/src/index.ts +99 -9
  146. package/src/point-cloud/point-cloud-tile.ts +80 -0
  147. package/src/point-cloud/point-cloud-tileset.ts +713 -0
  148. package/src/point-cloud/types.ts +82 -0
  149. package/src/raster-set.ts +412 -0
  150. package/src/tileset-2d/adapter.ts +47 -0
  151. package/src/tileset-2d/index.ts +33 -0
  152. package/src/tileset-2d/tile-2d-header.ts +224 -0
  153. package/src/tileset-2d/tileset-2d.ts +716 -0
  154. package/src/tileset-2d/types.ts +39 -0
  155. package/src/tileset-2d.ts +5 -0
  156. package/src/tileset-3d/common/indexed-archive-tileset-source.ts +205 -0
  157. package/src/{tileset → tileset-3d/common}/tile-3d.ts +348 -93
  158. package/src/tileset-3d/common/tileset-3d.ts +1087 -0
  159. package/src/{tileset → tileset-3d/common}/tileset-cache.ts +16 -8
  160. package/src/tileset-3d/common/tileset-source.ts +255 -0
  161. package/src/{tileset → tileset-3d/common}/tileset-traverser.ts +32 -4
  162. package/src/tileset-3d/format-3d-tiles/implicit-tiling.ts +534 -0
  163. package/src/tileset-3d/format-3d-tiles/tiles-3d-source.ts +632 -0
  164. package/src/tileset-3d/format-3d-tiles/tileset-3d-traverser.ts +140 -0
  165. package/src/{tileset → tileset-3d}/format-i3s/i3s-pending-tiles-register.ts +4 -0
  166. package/src/tileset-3d/format-i3s/i3s-source.ts +366 -0
  167. package/src/{tileset → tileset-3d}/format-i3s/i3s-tile-manager.ts +6 -2
  168. package/src/{tileset → tileset-3d}/format-i3s/i3s-tileset-traverser.ts +19 -24
  169. package/src/{tileset → tileset-3d}/helpers/3d-tiles-options.ts +5 -1
  170. package/src/{tileset → tileset-3d}/helpers/bounding-volume.ts +2 -0
  171. package/src/tileset-3d/helpers/frame-state.ts +311 -0
  172. package/src/{tileset → tileset-3d}/helpers/i3s-lod.ts +2 -2
  173. package/src/tileset-3d/helpers/tiles-3d-lod.ts +370 -0
  174. package/src/tileset-3d/helpers/tiles-3d-request-priority.ts +301 -0
  175. package/src/{tileset → tileset-3d}/helpers/transform-utils.ts +1 -1
  176. package/src/types.ts +13 -0
  177. package/src/utils/doubly-linked-list.ts +2 -0
  178. package/src/utils/managed-array.ts +2 -0
  179. package/dist/tileset/format-3d-tiles/tileset-3d-traverser.d.ts +0 -7
  180. package/dist/tileset/format-3d-tiles/tileset-3d-traverser.d.ts.map +0 -1
  181. package/dist/tileset/format-3d-tiles/tileset-3d-traverser.js +0 -53
  182. package/dist/tileset/format-3d-tiles/tileset-3d-traverser.js.map +0 -1
  183. package/dist/tileset/format-i3s/i3s-pending-tiles-register.d.ts.map +0 -1
  184. package/dist/tileset/format-i3s/i3s-pending-tiles-register.js.map +0 -1
  185. package/dist/tileset/format-i3s/i3s-tile-manager.d.ts.map +0 -1
  186. package/dist/tileset/format-i3s/i3s-tile-manager.js.map +0 -1
  187. package/dist/tileset/format-i3s/i3s-tileset-traverser.d.ts.map +0 -1
  188. package/dist/tileset/format-i3s/i3s-tileset-traverser.js.map +0 -1
  189. package/dist/tileset/helpers/3d-tiles-options.d.ts.map +0 -1
  190. package/dist/tileset/helpers/3d-tiles-options.js.map +0 -1
  191. package/dist/tileset/helpers/bounding-volume.d.ts.map +0 -1
  192. package/dist/tileset/helpers/bounding-volume.js.map +0 -1
  193. package/dist/tileset/helpers/frame-state.d.ts +0 -28
  194. package/dist/tileset/helpers/frame-state.d.ts.map +0 -1
  195. package/dist/tileset/helpers/frame-state.js.map +0 -1
  196. package/dist/tileset/helpers/i3s-lod.d.ts.map +0 -1
  197. package/dist/tileset/helpers/i3s-lod.js.map +0 -1
  198. package/dist/tileset/helpers/tiles-3d-lod.d.ts +0 -8
  199. package/dist/tileset/helpers/tiles-3d-lod.d.ts.map +0 -1
  200. package/dist/tileset/helpers/tiles-3d-lod.js +0 -113
  201. package/dist/tileset/helpers/tiles-3d-lod.js.map +0 -1
  202. package/dist/tileset/helpers/transform-utils.d.ts.map +0 -1
  203. package/dist/tileset/helpers/transform-utils.js.map +0 -1
  204. package/dist/tileset/helpers/zoom.d.ts.map +0 -1
  205. package/dist/tileset/helpers/zoom.js.map +0 -1
  206. package/dist/tileset/tile-3d.d.ts.map +0 -1
  207. package/dist/tileset/tile-3d.js.map +0 -1
  208. package/dist/tileset/tileset-3d.d.ts +0 -284
  209. package/dist/tileset/tileset-3d.d.ts.map +0 -1
  210. package/dist/tileset/tileset-3d.js +0 -814
  211. package/dist/tileset/tileset-3d.js.map +0 -1
  212. package/dist/tileset/tileset-cache.d.ts +0 -19
  213. package/dist/tileset/tileset-cache.d.ts.map +0 -1
  214. package/dist/tileset/tileset-cache.js.map +0 -1
  215. package/dist/tileset/tileset-traverser.d.ts.map +0 -1
  216. package/dist/tileset/tileset-traverser.js.map +0 -1
  217. package/src/tileset/format-3d-tiles/tileset-3d-traverser.ts +0 -63
  218. package/src/tileset/helpers/frame-state.ts +0 -183
  219. package/src/tileset/helpers/tiles-3d-lod.ts +0 -149
  220. package/src/tileset/tileset-3d.ts +0 -1037
  221. /package/dist/{tileset → tileset-3d}/format-i3s/i3s-pending-tiles-register.d.ts +0 -0
  222. /package/dist/{tileset → tileset-3d}/format-i3s/i3s-tile-manager.d.ts +0 -0
  223. /package/dist/{tileset → tileset-3d}/helpers/bounding-volume.d.ts +0 -0
  224. /package/dist/{tileset → tileset-3d}/helpers/transform-utils.js +0 -0
  225. /package/dist/{tileset → tileset-3d}/helpers/zoom.d.ts +0 -0
  226. /package/dist/{tileset → tileset-3d}/helpers/zoom.js +0 -0
  227. /package/src/{tileset → tileset-3d}/helpers/zoom.ts +0 -0
@@ -0,0 +1,510 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { Vector3 } from '@math.gl/core';
5
+ import { BoundingSphere, CullingVolume, Plane } from '@math.gl/culling';
6
+ import { PointCloudTile } from "./point-cloud-tile.js";
7
+ const DEFAULT_PROPS = {
8
+ debounceTime: 0,
9
+ minimumNodePixelSize: 150,
10
+ maximumScreenSpaceError: 1,
11
+ pointBudget: 2_000_000,
12
+ maxDepth: Number.POSITIVE_INFINITY,
13
+ onTileLoad: () => { },
14
+ onTileError: () => { },
15
+ onTraversalComplete: (selectedTiles) => selectedTiles,
16
+ onUpdate: () => { }
17
+ };
18
+ const VISIBILITY_MARGIN_PIXELS = 64;
19
+ /**
20
+ * A minimal point-cloud-oriented tileset manager backed by a DataSource.
21
+ */
22
+ export class PointCloudTileset {
23
+ dataSource;
24
+ options;
25
+ root = null;
26
+ cartographicCenter = null;
27
+ zoom = 1;
28
+ boundingVolume = null;
29
+ visibleTilesCount = 0;
30
+ frameNumberValue = 0;
31
+ pendingCount = 0;
32
+ lastUpdatedViewports = null;
33
+ updatePromise = null;
34
+ tilesMap = new Map();
35
+ constructor(dataSource, options = {}) {
36
+ this.dataSource = dataSource;
37
+ this.options = { ...DEFAULT_PROPS, ...options };
38
+ this.tilesetInitializationPromise = this.initialize();
39
+ }
40
+ tilesetInitializationPromise;
41
+ /**
42
+ * Whether the tileset finished initialization.
43
+ */
44
+ get isReady() {
45
+ return this.dataSource.isReady;
46
+ }
47
+ /**
48
+ * Runtime frame number.
49
+ */
50
+ get frameNumber() {
51
+ return this.frameNumberValue;
52
+ }
53
+ /**
54
+ * All discovered tiles.
55
+ */
56
+ get tiles() {
57
+ return Array.from(this.tilesMap.values());
58
+ }
59
+ /**
60
+ * Whether all currently selected tiles have finished loading.
61
+ */
62
+ isLoaded() {
63
+ return (this.frameNumberValue > 0 &&
64
+ this.pendingCount === 0 &&
65
+ this.selectedTiles.every(tile => tile.contentAvailable || tile.contentFailed));
66
+ }
67
+ /**
68
+ * Currently selected tiles.
69
+ */
70
+ selectedTiles = [];
71
+ /**
72
+ * Fire-and-forget update helper.
73
+ */
74
+ update(viewports = null) {
75
+ this.selectTiles(viewports).catch(() => undefined);
76
+ }
77
+ /**
78
+ * Releases traversal state held by this tileset.
79
+ */
80
+ destroy() {
81
+ this.selectedTiles = [];
82
+ this.tilesMap.clear();
83
+ this.root = null;
84
+ this.cartographicCenter = null;
85
+ this.boundingVolume = null;
86
+ this.visibleTilesCount = 0;
87
+ this.pendingCount = 0;
88
+ this.lastUpdatedViewports = null;
89
+ this.updatePromise = null;
90
+ }
91
+ /**
92
+ * Initialize the underlying source and the root tile.
93
+ */
94
+ async initialize() {
95
+ await this.dataSource.initialize();
96
+ const rootHeader = await this.dataSource.getRootTile();
97
+ this.root = this.getOrCreateTile(rootHeader, null);
98
+ const viewState = await this.dataSource.getViewState?.();
99
+ this.boundingVolume = viewState?.boundingVolume || this.root.boundingVolume;
100
+ const center = viewState?.cartographicCenter || this.root.boundingVolume.center;
101
+ this.cartographicCenter = new Vector3(center);
102
+ this.zoom = viewState?.zoom || this.estimateZoom(this.boundingVolume);
103
+ }
104
+ /**
105
+ * Debounced async tile selection.
106
+ */
107
+ async selectTiles(viewports = null) {
108
+ await this.tilesetInitializationPromise;
109
+ if (viewports) {
110
+ this.lastUpdatedViewports = viewports;
111
+ }
112
+ if (!this.updatePromise) {
113
+ this.updatePromise = new Promise((resolve, reject) => {
114
+ setTimeout(() => {
115
+ this.doSelectTiles()
116
+ .then(() => resolve(this.frameNumberValue))
117
+ .catch(reject)
118
+ .finally(() => {
119
+ this.updatePromise = null;
120
+ });
121
+ }, this.options.debounceTime);
122
+ });
123
+ }
124
+ return this.updatePromise;
125
+ }
126
+ async doSelectTiles() {
127
+ if (!this.root || !this.lastUpdatedViewports) {
128
+ return;
129
+ }
130
+ const previousSelectedIds = new Set(this.selectedTiles.map(tile => tile.id));
131
+ for (const tile of this.tilesMap.values()) {
132
+ tile.clearSelection();
133
+ }
134
+ this.frameNumberValue++;
135
+ const preparedViewports = Array.isArray(this.lastUpdatedViewports)
136
+ ? this.lastUpdatedViewports
137
+ : [this.lastUpdatedViewports];
138
+ const selectedTilesById = new Map();
139
+ const visibleTileIds = new Set();
140
+ let selectedPointCount = 0;
141
+ for (const viewport of preparedViewports) {
142
+ const traversalContext = this.getTraversalContext(viewport);
143
+ selectedPointCount = await this.traverseTiles(traversalContext, selectedTilesById, selectedPointCount, visibleTileIds);
144
+ }
145
+ this.visibleTilesCount = visibleTileIds.size;
146
+ this.selectedTiles = this.options.onTraversalComplete(Array.from(selectedTilesById.values()));
147
+ for (const tile of this.selectedTiles) {
148
+ this.loadTile(tile).catch(() => undefined);
149
+ }
150
+ const nextSelectedIds = new Set(this.selectedTiles.map(tile => tile.id));
151
+ if (!this.haveSameIds(previousSelectedIds, nextSelectedIds)) {
152
+ this.options.onUpdate();
153
+ }
154
+ }
155
+ /**
156
+ * Traverses visible tiles in descending projected-size order, similar to Potree's viewer update loop.
157
+ */
158
+ async traverseTiles(traversalContext, selectedTilesById, initialSelectedPointCount, visibleTileIds) {
159
+ if (!this.root) {
160
+ return initialSelectedPointCount;
161
+ }
162
+ let selectedPointCount = initialSelectedPointCount;
163
+ const traversalQueue = [
164
+ { tile: this.root, weight: this.estimateScreenRadius(this.root, traversalContext.viewport) }
165
+ ];
166
+ while (traversalQueue.length > 0) {
167
+ traversalQueue.sort((candidateA, candidateB) => candidateB.weight - candidateA.weight);
168
+ const candidate = traversalQueue.shift();
169
+ if (!candidate) {
170
+ break;
171
+ }
172
+ const { tile, weight } = candidate;
173
+ if (!this.isVisible(tile, traversalContext)) {
174
+ continue;
175
+ }
176
+ visibleTileIds.add(tile.id);
177
+ if (!selectedTilesById.has(tile.id) && tile.pointCount > 0) {
178
+ const exceedsPointBudget = selectedPointCount > 0 && selectedPointCount + tile.pointCount > this.options.pointBudget;
179
+ if (exceedsPointBudget) {
180
+ break;
181
+ }
182
+ selectedTilesById.set(tile.id, tile);
183
+ selectedPointCount += tile.pointCount;
184
+ }
185
+ if (selectedTilesById.has(tile.id)) {
186
+ tile.setSelected(traversalContext.viewport.id);
187
+ }
188
+ if (!this.shouldRefine(tile, weight)) {
189
+ continue;
190
+ }
191
+ const visibleChildren = await this.getVisibleChildren(tile, traversalContext);
192
+ if (visibleChildren.length > 0) {
193
+ traversalQueue.push(...visibleChildren);
194
+ }
195
+ }
196
+ return selectedPointCount;
197
+ }
198
+ /** Whether a tile should refine to children based on its projected screen radius. */
199
+ shouldRefine(tile, traversalWeight) {
200
+ return (tile.level < this.options.maxDepth &&
201
+ Number.isFinite(traversalWeight) &&
202
+ traversalWeight >= this.options.minimumNodePixelSize);
203
+ }
204
+ /**
205
+ * Build per-viewport traversal state once per traversal pass.
206
+ */
207
+ getTraversalContext(viewport) {
208
+ const cullingVolume = this.getCullingVolume(viewport);
209
+ return {
210
+ viewport,
211
+ cullingVolume: this.shouldUseCullingVolume(viewport, cullingVolume) ? cullingVolume : null
212
+ };
213
+ }
214
+ /**
215
+ * Check tile visibility against the viewport frustum when possible.
216
+ */
217
+ isVisible(tile, traversalContext) {
218
+ if (traversalContext.cullingVolume) {
219
+ const boundingSphere = this.getCommonSpaceBoundingSphere(tile.boundingVolume, traversalContext.viewport);
220
+ if (boundingSphere) {
221
+ return this.isBoundingSphereInsideCullingVolume(boundingSphere, traversalContext.cullingVolume);
222
+ }
223
+ }
224
+ const footprint = this.getProjectedFootprint(tile.boundingVolume, traversalContext.viewport);
225
+ if (!footprint) {
226
+ return false;
227
+ }
228
+ return this.isProjectedFootprintVisible(footprint, traversalContext.viewport);
229
+ }
230
+ /**
231
+ * Returns true when the viewport frustum appears usable for this tileset's coordinate space.
232
+ */
233
+ shouldUseCullingVolume(viewport, cullingVolume) {
234
+ if (!this.root || !cullingVolume) {
235
+ return false;
236
+ }
237
+ const rootBoundingSphere = this.getCommonSpaceBoundingSphere(this.root.boundingVolume, viewport);
238
+ if (!rootBoundingSphere) {
239
+ return false;
240
+ }
241
+ if (this.isBoundingSphereInsideCullingVolume(rootBoundingSphere, cullingVolume)) {
242
+ return true;
243
+ }
244
+ const projectedFootprint = this.getProjectedFootprint(this.root.boundingVolume, viewport);
245
+ return !projectedFootprint || !this.isProjectedFootprintVisible(projectedFootprint, viewport);
246
+ }
247
+ /**
248
+ * Checks whether a common-space bounding sphere intersects a culling volume.
249
+ */
250
+ isBoundingSphereInsideCullingVolume(boundingSphere, cullingVolume) {
251
+ return (cullingVolume.computeVisibilityWithPlaneMask(boundingSphere, CullingVolume.MASK_INDETERMINATE) !== CullingVolume.MASK_OUTSIDE);
252
+ }
253
+ /**
254
+ * Checks a projected screen-space footprint against the viewport rectangle.
255
+ */
256
+ isProjectedFootprintVisible(footprint, viewport) {
257
+ return !(footprint.x + footprint.radius < -VISIBILITY_MARGIN_PIXELS ||
258
+ footprint.x - footprint.radius > viewport.width + VISIBILITY_MARGIN_PIXELS ||
259
+ footprint.y + footprint.radius < -VISIBILITY_MARGIN_PIXELS ||
260
+ footprint.y - footprint.radius > viewport.height + VISIBILITY_MARGIN_PIXELS);
261
+ }
262
+ /** Estimate traversal priority from projected node radius in screen pixels. */
263
+ estimateScreenRadius(tile, viewport) {
264
+ const footprint = this.getProjectedFootprint(tile.boundingVolume, viewport);
265
+ return footprint ? footprint.radius : 0;
266
+ }
267
+ /**
268
+ * Project a tile AABB into screen space and return its 2D footprint.
269
+ */
270
+ projectBounds(boundingVolume, viewport) {
271
+ const corners = this.getBoundingVolumeCorners(boundingVolume);
272
+ let minX = Number.POSITIVE_INFINITY;
273
+ let minY = Number.POSITIVE_INFINITY;
274
+ let maxX = Number.NEGATIVE_INFINITY;
275
+ let maxY = Number.NEGATIVE_INFINITY;
276
+ try {
277
+ for (const corner of corners) {
278
+ const [x, y] = viewport.project(corner);
279
+ if (!Number.isFinite(x) || !Number.isFinite(y)) {
280
+ continue;
281
+ }
282
+ minX = Math.min(minX, x);
283
+ minY = Math.min(minY, y);
284
+ maxX = Math.max(maxX, x);
285
+ maxY = Math.max(maxY, y);
286
+ }
287
+ }
288
+ catch {
289
+ return null;
290
+ }
291
+ if (!Number.isFinite(minX) ||
292
+ !Number.isFinite(minY) ||
293
+ !Number.isFinite(maxX) ||
294
+ !Number.isFinite(maxY)) {
295
+ return null;
296
+ }
297
+ return { minX, minY, maxX, maxY };
298
+ }
299
+ /**
300
+ * Project a tile to a screen-space center/radius footprint.
301
+ */
302
+ getProjectedFootprint(boundingVolume, viewport) {
303
+ let centerX = Number.NaN;
304
+ let centerY = Number.NaN;
305
+ try {
306
+ [centerX, centerY] = viewport.project(boundingVolume.center);
307
+ }
308
+ catch {
309
+ return null;
310
+ }
311
+ if (!Number.isFinite(centerX) || !Number.isFinite(centerY)) {
312
+ return null;
313
+ }
314
+ const corners = this.getBoundingVolumeCorners(boundingVolume);
315
+ let projectedRadius = 0;
316
+ try {
317
+ for (const corner of corners) {
318
+ const [x, y] = viewport.project(corner);
319
+ if (!Number.isFinite(x) || !Number.isFinite(y)) {
320
+ continue;
321
+ }
322
+ projectedRadius = Math.max(projectedRadius, Math.hypot(x - centerX, y - centerY));
323
+ }
324
+ }
325
+ catch {
326
+ return null;
327
+ }
328
+ if (projectedRadius === 0) {
329
+ const fallbackBounds = this.projectBounds(boundingVolume, viewport);
330
+ if (fallbackBounds) {
331
+ projectedRadius =
332
+ Math.max(fallbackBounds.maxX - fallbackBounds.minX, fallbackBounds.maxY - fallbackBounds.minY) / 2;
333
+ }
334
+ }
335
+ return { x: centerX, y: centerY, radius: projectedRadius };
336
+ }
337
+ /**
338
+ * Returns visible children ordered by their projected importance.
339
+ */
340
+ async getVisibleChildren(tile, traversalContext) {
341
+ if (tile.level >= this.options.maxDepth) {
342
+ return [];
343
+ }
344
+ const children = await this.getChildren(tile);
345
+ return children
346
+ .map(child => ({
347
+ tile: child,
348
+ weight: this.estimateScreenRadius(child, traversalContext.viewport)
349
+ }))
350
+ .filter(candidate => this.isVisible(candidate.tile, traversalContext));
351
+ }
352
+ async getChildren(tile) {
353
+ if (tile.childrenLoaded) {
354
+ return tile.children;
355
+ }
356
+ if (!tile.childrenPromise) {
357
+ const childrenPromise = this.dataSource
358
+ .getChildren(tile.header)
359
+ .then(headers => headers.map(header => this.getOrCreateTile(header, tile)))
360
+ .then(children => {
361
+ tile.children = children;
362
+ tile.childrenLoaded = true;
363
+ return children;
364
+ });
365
+ tile.childrenPromise = childrenPromise.finally(() => {
366
+ if (tile.childrenPromise === childrenPromise) {
367
+ tile.childrenPromise = null;
368
+ }
369
+ });
370
+ }
371
+ return tile.childrenPromise;
372
+ }
373
+ getOrCreateTile(header, parent) {
374
+ const existingTile = this.tilesMap.get(header.id);
375
+ if (existingTile) {
376
+ existingTile.header = header;
377
+ if (parent && existingTile.parent !== parent) {
378
+ existingTile.parent = parent;
379
+ }
380
+ return existingTile;
381
+ }
382
+ const tile = new PointCloudTile(header, parent);
383
+ this.tilesMap.set(header.id, tile);
384
+ if (parent && !parent.children.find(child => child.id === tile.id)) {
385
+ parent.children.push(tile);
386
+ }
387
+ return tile;
388
+ }
389
+ async loadTile(tile) {
390
+ if (tile.contentAvailable || tile.isContentLoading || tile.contentFailed) {
391
+ return;
392
+ }
393
+ tile.isContentLoading = true;
394
+ this.pendingCount++;
395
+ try {
396
+ const content = await this.dataSource.loadTileContent(tile.header);
397
+ tile.content = content;
398
+ tile.contentAvailable = true;
399
+ if (content) {
400
+ this.options.onTileLoad(tile);
401
+ }
402
+ }
403
+ catch (error) {
404
+ tile.contentFailed = true;
405
+ this.options.onTileError(tile, error);
406
+ }
407
+ finally {
408
+ tile.isContentLoading = false;
409
+ this.pendingCount--;
410
+ }
411
+ }
412
+ estimateZoom(boundingVolume) {
413
+ if (!boundingVolume) {
414
+ return 1;
415
+ }
416
+ const [minBounds, maxBounds] = boundingVolume.cartographicBounds;
417
+ const longitudeSpan = Math.max(Math.abs(maxBounds[0] - minBounds[0]), 0.000001);
418
+ return Math.max(1, Math.round(Math.log2(360 / longitudeSpan)));
419
+ }
420
+ haveSameIds(idsA, idsB) {
421
+ if (idsA.size !== idsB.size) {
422
+ return false;
423
+ }
424
+ for (const id of idsA) {
425
+ if (!idsB.has(id)) {
426
+ return false;
427
+ }
428
+ }
429
+ return true;
430
+ }
431
+ /**
432
+ * Convert a tile bounding box into its eight corners.
433
+ */
434
+ getBoundingVolumeCorners(boundingVolume) {
435
+ const [minBounds, maxBounds] = boundingVolume.cartographicBounds;
436
+ return [
437
+ [minBounds[0], minBounds[1], minBounds[2] || 0],
438
+ [minBounds[0], minBounds[1], maxBounds[2] || 0],
439
+ [minBounds[0], maxBounds[1], minBounds[2] || 0],
440
+ [minBounds[0], maxBounds[1], maxBounds[2] || 0],
441
+ [maxBounds[0], minBounds[1], minBounds[2] || 0],
442
+ [maxBounds[0], minBounds[1], maxBounds[2] || 0],
443
+ [maxBounds[0], maxBounds[1], minBounds[2] || 0],
444
+ [maxBounds[0], maxBounds[1], maxBounds[2] || 0]
445
+ ];
446
+ }
447
+ /**
448
+ * Build a culling volume directly from the viewport frustum in common space.
449
+ */
450
+ getCullingVolume(viewport) {
451
+ const getFrustumPlanes = viewport.getFrustumPlanes?.bind(viewport);
452
+ if (!getFrustumPlanes) {
453
+ return null;
454
+ }
455
+ const frustumPlanes = getFrustumPlanes();
456
+ const directions = ['left', 'right', 'bottom', 'top', 'near', 'far'];
457
+ const planes = [];
458
+ for (const direction of directions) {
459
+ const plane = frustumPlanes[direction];
460
+ if (!plane) {
461
+ return null;
462
+ }
463
+ planes.push(new Plane(plane.normal, -plane.distance));
464
+ }
465
+ return new CullingVolume(planes);
466
+ }
467
+ /**
468
+ * Approximate a tile AABB by a common-space bounding sphere for frustum culling.
469
+ */
470
+ getCommonSpaceBoundingSphere(boundingVolume, viewport) {
471
+ const projectPosition = viewport.projectPosition?.bind(viewport);
472
+ if (!projectPosition) {
473
+ return null;
474
+ }
475
+ const corners = this.getBoundingVolumeCorners(boundingVolume);
476
+ let minX = Number.POSITIVE_INFINITY;
477
+ let minY = Number.POSITIVE_INFINITY;
478
+ let minZ = Number.POSITIVE_INFINITY;
479
+ let maxX = Number.NEGATIVE_INFINITY;
480
+ let maxY = Number.NEGATIVE_INFINITY;
481
+ let maxZ = Number.NEGATIVE_INFINITY;
482
+ try {
483
+ for (const corner of corners) {
484
+ const [x, y, z = 0] = projectPosition(corner);
485
+ if (!Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(z)) {
486
+ continue;
487
+ }
488
+ minX = Math.min(minX, x);
489
+ minY = Math.min(minY, y);
490
+ minZ = Math.min(minZ, z);
491
+ maxX = Math.max(maxX, x);
492
+ maxY = Math.max(maxY, y);
493
+ maxZ = Math.max(maxZ, z);
494
+ }
495
+ }
496
+ catch {
497
+ return null;
498
+ }
499
+ if (!Number.isFinite(minX) ||
500
+ !Number.isFinite(minY) ||
501
+ !Number.isFinite(minZ) ||
502
+ !Number.isFinite(maxX) ||
503
+ !Number.isFinite(maxY) ||
504
+ !Number.isFinite(maxZ)) {
505
+ return null;
506
+ }
507
+ return new BoundingSphere().fromCornerPoints([minX, minY, minZ], [maxX, maxY, maxZ]);
508
+ }
509
+ }
510
+ //# sourceMappingURL=point-cloud-tileset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"point-cloud-tileset.js","sourceRoot":"","sources":["../../src/point-cloud/point-cloud-tileset.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import type { DataSource, DataSourceOptions } from '@loaders.gl/loader-utils';
2
+ import type { MeshArrowTable } from '@loaders.gl/schema';
3
+ /**
4
+ * An accessor-like description for point cloud attributes.
5
+ */
6
+ export type PointCloudAttribute = {
7
+ value: ArrayBufferView;
8
+ size: number;
9
+ normalized?: boolean;
10
+ };
11
+ /**
12
+ * deck.gl coordinate system string values accepted by point cloud tile content.
13
+ */
14
+ export type PointCloudCoordinateSystem = 'default' | 'lnglat' | 'meter-offsets' | 'lnglat-offsets' | 'cartesian';
15
+ /**
16
+ * A normalized point cloud tile content payload.
17
+ */
18
+ export type PointCloudTileContent = {
19
+ data: MeshArrowTable;
20
+ pointCount: number;
21
+ cartographicOrigin: number[];
22
+ coordinateSystem: PointCloudCoordinateSystem;
23
+ constantRGBA?: number[];
24
+ modelMatrix?: number[] | Float32Array;
25
+ };
26
+ /**
27
+ * A cartographic bounding volume for a point cloud tile.
28
+ */
29
+ export type PointCloudBoundingVolume = {
30
+ cartographicBounds: [min: number[], max: number[]];
31
+ center: number[];
32
+ radius: number;
33
+ };
34
+ /**
35
+ * A source-owned tile header used by the point cloud tileset.
36
+ */
37
+ export type PointCloudTileHeader = {
38
+ id: string;
39
+ level: number;
40
+ pointCount: number;
41
+ geometricError: number;
42
+ boundingVolume: PointCloudBoundingVolume;
43
+ };
44
+ /**
45
+ * Optional tileset view metadata.
46
+ */
47
+ export type PointCloudTilesetViewState = {
48
+ cartographicCenter?: number[];
49
+ zoom?: number;
50
+ boundingVolume?: PointCloudBoundingVolume;
51
+ };
52
+ /**
53
+ * Structural contract for point cloud sources that can back a PointCloudTileset.
54
+ */
55
+ export type PointCloudTilesetSource<DataT = unknown, OptionsT extends DataSourceOptions = DataSourceOptions> = DataSource<DataT, OptionsT> & {
56
+ isReady: boolean;
57
+ initialize(): Promise<void>;
58
+ getMetadata?(): Promise<unknown>;
59
+ getRootTile(): Promise<PointCloudTileHeader>;
60
+ getChildren(tile: PointCloudTileHeader): Promise<PointCloudTileHeader[]>;
61
+ loadTileContent(tile: PointCloudTileHeader): Promise<PointCloudTileContent | null>;
62
+ getViewState?(): Promise<PointCloudTilesetViewState> | PointCloudTilesetViewState;
63
+ };
64
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/point-cloud/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,UAAU,EAAE,iBAAiB,EAAC,MAAM,0BAA0B,CAAC;AAC5E,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAEvD;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,eAAe,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAClC,SAAS,GACT,QAAQ,GACR,eAAe,GACf,gBAAgB,GAChB,WAAW,CAAC;AAEhB;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,cAAc,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,gBAAgB,EAAE,0BAA0B,CAAC;IAC7C,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC;CACvC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IACnD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,wBAAwB,CAAC;CAC1C,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,wBAAwB,CAAC;CAC3C,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,uBAAuB,CACjC,KAAK,GAAG,OAAO,EACf,QAAQ,SAAS,iBAAiB,GAAG,iBAAiB,IACpD,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,WAAW,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACjC,WAAW,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC7C,WAAW,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACzE,eAAe,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC;IACnF,YAAY,CAAC,IAAI,OAAO,CAAC,0BAA0B,CAAC,GAAG,0BAA0B,CAAC;CACnF,CAAC"}
@@ -0,0 +1,5 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/point-cloud/types.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,oCAAoC"}