@loaders.gl/tiles 5.0.0-alpha.6 → 5.0.0-alpha.7

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 (96) hide show
  1. package/dist/dist.dev.js +5160 -2896
  2. package/dist/dist.min.js +4 -2
  3. package/dist/index.cjs +1509 -454
  4. package/dist/index.cjs.map +3 -3
  5. package/dist/index.d.ts +8 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +3 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/spatial/format-spatial-reference.d.ts +1 -0
  10. package/dist/spatial/format-spatial-reference.d.ts.map +1 -1
  11. package/dist/spatial/format-spatial-reference.js +104 -46
  12. package/dist/spatial/format-spatial-reference.js.map +1 -1
  13. package/dist/spatial/get-spatial-coordinate-frame.d.ts +12 -1
  14. package/dist/spatial/get-spatial-coordinate-frame.d.ts.map +1 -1
  15. package/dist/spatial/get-spatial-coordinate-frame.js +105 -24
  16. package/dist/spatial/get-spatial-coordinate-frame.js.map +1 -1
  17. package/dist/spatial/normalize-crs-identifier.d.ts +15 -0
  18. package/dist/spatial/normalize-crs-identifier.d.ts.map +1 -0
  19. package/dist/spatial/normalize-crs-identifier.js +22 -0
  20. package/dist/spatial/normalize-crs-identifier.js.map +1 -0
  21. package/dist/spatial/spatial-coordinate-transformer.d.ts +4 -0
  22. package/dist/spatial/spatial-coordinate-transformer.d.ts.map +1 -1
  23. package/dist/spatial/spatial-coordinate-transformer.js +89 -12
  24. package/dist/spatial/spatial-coordinate-transformer.js.map +1 -1
  25. package/dist/spatial/tiles-3d-spatial-transformer.d.ts +32 -0
  26. package/dist/spatial/tiles-3d-spatial-transformer.d.ts.map +1 -0
  27. package/dist/spatial/tiles-3d-spatial-transformer.js +175 -0
  28. package/dist/spatial/tiles-3d-spatial-transformer.js.map +1 -0
  29. package/dist/tileset-3d/common/tile-3d-contracts.d.ts +63 -0
  30. package/dist/tileset-3d/common/tile-3d-contracts.d.ts.map +1 -0
  31. package/dist/tileset-3d/common/tile-3d-contracts.js +51 -0
  32. package/dist/tileset-3d/common/tile-3d-contracts.js.map +1 -0
  33. package/dist/tileset-3d/common/tile-3d.d.ts +29 -5
  34. package/dist/tileset-3d/common/tile-3d.d.ts.map +1 -1
  35. package/dist/tileset-3d/common/tile-3d.js +147 -18
  36. package/dist/tileset-3d/common/tile-3d.js.map +1 -1
  37. package/dist/tileset-3d/common/tileset-3d.d.ts +14 -0
  38. package/dist/tileset-3d/common/tileset-3d.d.ts.map +1 -1
  39. package/dist/tileset-3d/common/tileset-3d.js +27 -1
  40. package/dist/tileset-3d/common/tileset-3d.js.map +1 -1
  41. package/dist/tileset-3d/common/tileset-observability.d.ts +60 -0
  42. package/dist/tileset-3d/common/tileset-observability.d.ts.map +1 -0
  43. package/dist/tileset-3d/common/tileset-observability.js +39 -0
  44. package/dist/tileset-3d/common/tileset-observability.js.map +1 -0
  45. package/dist/tileset-3d/common/tileset-source.d.ts +3 -0
  46. package/dist/tileset-3d/common/tileset-source.d.ts.map +1 -1
  47. package/dist/tileset-3d/common/tileset-source.js.map +1 -1
  48. package/dist/tileset-3d/common/tileset-traverser.d.ts.map +1 -1
  49. package/dist/tileset-3d/common/tileset-traverser.js +4 -3
  50. package/dist/tileset-3d/common/tileset-traverser.js.map +1 -1
  51. package/dist/tileset-3d/format-3d-tiles/implicit-tiling.d.ts +47 -1
  52. package/dist/tileset-3d/format-3d-tiles/implicit-tiling.d.ts.map +1 -1
  53. package/dist/tileset-3d/format-3d-tiles/implicit-tiling.js +327 -30
  54. package/dist/tileset-3d/format-3d-tiles/implicit-tiling.js.map +1 -1
  55. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.d.ts +32 -0
  56. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.d.ts.map +1 -1
  57. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.js +265 -14
  58. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.js.map +1 -1
  59. package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.d.ts +5 -3
  60. package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.d.ts.map +1 -1
  61. package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.js +7 -4
  62. package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.js.map +1 -1
  63. package/dist/tileset-3d/helpers/bounding-volume.d.ts +7 -3
  64. package/dist/tileset-3d/helpers/bounding-volume.d.ts.map +1 -1
  65. package/dist/tileset-3d/helpers/bounding-volume.js +19 -61
  66. package/dist/tileset-3d/helpers/bounding-volume.js.map +1 -1
  67. package/dist/tileset-3d/helpers/frame-state.d.ts +4 -0
  68. package/dist/tileset-3d/helpers/frame-state.d.ts.map +1 -1
  69. package/dist/tileset-3d/helpers/frame-state.js +6 -1
  70. package/dist/tileset-3d/helpers/frame-state.js.map +1 -1
  71. package/dist/tileset-3d/helpers/s2-bounding-volume.d.ts +17 -0
  72. package/dist/tileset-3d/helpers/s2-bounding-volume.d.ts.map +1 -0
  73. package/dist/tileset-3d/helpers/s2-bounding-volume.js +20 -0
  74. package/dist/tileset-3d/helpers/s2-bounding-volume.js.map +1 -0
  75. package/dist/types.d.ts +2 -0
  76. package/dist/types.d.ts.map +1 -1
  77. package/package.json +13 -12
  78. package/src/index.ts +13 -1
  79. package/src/spatial/format-spatial-reference.ts +127 -53
  80. package/src/spatial/get-spatial-coordinate-frame.ts +126 -31
  81. package/src/spatial/normalize-crs-identifier.ts +26 -0
  82. package/src/spatial/spatial-coordinate-transformer.ts +106 -15
  83. package/src/spatial/tiles-3d-spatial-transformer.ts +206 -0
  84. package/src/tileset-3d/common/tile-3d-contracts.ts +115 -0
  85. package/src/tileset-3d/common/tile-3d.ts +172 -18
  86. package/src/tileset-3d/common/tileset-3d.ts +29 -1
  87. package/src/tileset-3d/common/tileset-observability.ts +100 -0
  88. package/src/tileset-3d/common/tileset-source.ts +3 -0
  89. package/src/tileset-3d/common/tileset-traverser.ts +4 -3
  90. package/src/tileset-3d/format-3d-tiles/implicit-tiling.ts +481 -34
  91. package/src/tileset-3d/format-3d-tiles/tiles-3d-source.ts +387 -14
  92. package/src/tileset-3d/format-3d-tiles/tileset-3d-traverser.ts +7 -4
  93. package/src/tileset-3d/helpers/bounding-volume.ts +29 -62
  94. package/src/tileset-3d/helpers/frame-state.ts +6 -1
  95. package/src/tileset-3d/helpers/s2-bounding-volume.ts +35 -0
  96. package/src/types.ts +2 -0
@@ -5,9 +5,8 @@ import { Vector3 } from '@math.gl/core';
5
5
  import { Ellipsoid } from '@math.gl/geospatial';
6
6
  import { Proj4Projection, toProj4CRSDefinition } from '@math.gl/proj4';
7
7
  import { getGeoidModel } from "./spatial-resource-registry.js";
8
+ import { normalizeCrsIdentifier, WGS84_GEOCENTRIC_CRS, WGS84_GEOGRAPHIC_CRS } from "./normalize-crs-identifier.js";
8
9
  export { getSpatialCoordinateFrame } from "./get-spatial-coordinate-frame.js";
9
- const GEOGRAPHIC_CRS = 'EPSG:4326';
10
- const GEOCENTRIC_CRS = 'EPSG:4978';
11
10
  /**
12
11
  * Deterministic coordinate transformer used by 3D tile format adapters.
13
12
  *
@@ -64,13 +63,13 @@ export class SpatialCoordinateTransformer {
64
63
  if (!this.sourceIsGeographic && !this.sourceIsGeocentric) {
65
64
  this.geographicProjection = new Proj4Projection({
66
65
  from: getHorizontalProj4Definition(spatialReference.sourceCrs),
67
- to: GEOGRAPHIC_CRS,
66
+ to: WGS84_GEOGRAPHIC_CRS,
68
67
  enforceAxis: false
69
68
  });
70
69
  }
71
70
  if (!this.outputIsGeographic && !this.outputIsGeocentric) {
72
71
  this.heightOutputProjection = new Proj4Projection({
73
- from: GEOGRAPHIC_CRS,
72
+ from: WGS84_GEOGRAPHIC_CRS,
74
73
  to: getHorizontalProj4Definition(outputCrs),
75
74
  enforceAxis: false
76
75
  });
@@ -117,6 +116,58 @@ export class SpatialCoordinateTransformer {
117
116
  }
118
117
  return result;
119
118
  }
119
+ /** Transform a packed sequence of xyz positions, preserving the input array type only when safe. */
120
+ transformPositions(positions) {
121
+ if (positions.length % 3 !== 0) {
122
+ throw new Error('Packed spatial positions must contain a multiple of three components');
123
+ }
124
+ const transformedPositions = new Float64Array(positions.length);
125
+ for (let index = 0; index < positions.length; index += 3) {
126
+ const transformed = this.transformPosition([
127
+ Number(positions[index]),
128
+ Number(positions[index + 1]),
129
+ Number(positions[index + 2])
130
+ ]);
131
+ transformedPositions[index] = transformed[0];
132
+ transformedPositions[index + 1] = transformed[1];
133
+ transformedPositions[index + 2] = transformed[2];
134
+ }
135
+ return transformedPositions;
136
+ }
137
+ /** Transform packed xyz normals using a local finite-difference tangent approximation. */
138
+ transformNormals(normals, positions) {
139
+ if (normals.length !== positions.length || normals.length % 3 !== 0) {
140
+ throw new Error('Spatial normals and positions must have matching xyz component counts');
141
+ }
142
+ const transformedNormals = new Float32Array(normals.length);
143
+ const epsilon = 1e-5;
144
+ for (let index = 0; index < normals.length; index += 3) {
145
+ const position = [
146
+ Number(positions[index]),
147
+ Number(positions[index + 1]),
148
+ Number(positions[index + 2])
149
+ ];
150
+ const normal = [
151
+ Number(normals[index]),
152
+ Number(normals[index + 1]),
153
+ Number(normals[index + 2])
154
+ ];
155
+ const jacobian = getFiniteDifferenceJacobian(this, position, epsilon);
156
+ const transformedNormal = inverseTransposeMultiply(jacobian, normal);
157
+ const length = Math.hypot(...transformedNormal);
158
+ if (length > 0 && Number.isFinite(length)) {
159
+ transformedNormals[index] = transformedNormal[0] / length;
160
+ transformedNormals[index + 1] = transformedNormal[1] / length;
161
+ transformedNormals[index + 2] = transformedNormal[2] / length;
162
+ }
163
+ else {
164
+ transformedNormals[index] = normal[0];
165
+ transformedNormals[index + 1] = normal[1];
166
+ transformedNormals[index + 2] = normal[2];
167
+ }
168
+ }
169
+ return transformedNormals;
170
+ }
120
171
  /** Convert one source coordinate to conventional WGS84 longitude, latitude, and height. */
121
172
  toGeographic(coordinate) {
122
173
  if (this.sourceIsGeocentric) {
@@ -138,6 +189,38 @@ export class SpatialCoordinateTransformer {
138
189
  return this.heightOutputProjection.project(coordinate.slice(0, 3));
139
190
  }
140
191
  }
192
+ function getFiniteDifferenceJacobian(transformer, position, epsilon) {
193
+ const columns = [];
194
+ for (let axis = 0; axis < 3; axis++) {
195
+ const plus = position.slice();
196
+ const minus = position.slice();
197
+ plus[axis] += epsilon;
198
+ minus[axis] -= epsilon;
199
+ const plusPosition = transformer.transformPosition(plus);
200
+ const minusPosition = transformer.transformPosition(minus);
201
+ columns.push([
202
+ (plusPosition[0] - minusPosition[0]) / (2 * epsilon),
203
+ (plusPosition[1] - minusPosition[1]) / (2 * epsilon),
204
+ (plusPosition[2] - minusPosition[2]) / (2 * epsilon)
205
+ ]);
206
+ }
207
+ return columns;
208
+ }
209
+ function inverseTransposeMultiply(jacobianColumns, vector) {
210
+ const [a, b, c] = jacobianColumns;
211
+ const determinant = a[0] * (b[1] * c[2] - b[2] * c[1]) -
212
+ b[0] * (a[1] * c[2] - a[2] * c[1]) +
213
+ c[0] * (a[1] * b[2] - a[2] * b[1]);
214
+ if (!Number.isFinite(determinant) || Math.abs(determinant) < 1e-15) {
215
+ return vector;
216
+ }
217
+ const inverseTranspose = [
218
+ [b[1] * c[2] - b[2] * c[1], a[2] * c[1] - a[1] * c[2], a[1] * b[2] - a[2] * b[1]],
219
+ [b[2] * c[0] - b[0] * c[2], a[0] * c[2] - a[2] * c[0], a[2] * b[0] - a[0] * b[2]],
220
+ [b[0] * c[1] - b[1] * c[0], a[1] * c[0] - a[0] * c[1], a[0] * b[1] - a[1] * b[0]]
221
+ ];
222
+ return inverseTranspose.map(row => (row[0] * vector[0] + row[1] * vector[1] + row[2] * vector[2]) / determinant);
223
+ }
141
224
  /** Select the horizontal component that the proj4js runtime can execute. */
142
225
  function getHorizontalProj4Definition(definition) {
143
226
  if (!definition) {
@@ -170,7 +253,7 @@ function validateTransformRequest(spatialReference) {
170
253
  }
171
254
  /** Return whether a CRS definition identifies the WGS84 geocentric frame. */
172
255
  function isWgs84Geocentric(definition) {
173
- return typeof definition === 'string' && normalizeCrsIdentifier(definition) === GEOCENTRIC_CRS;
256
+ return (typeof definition === 'string' && normalizeCrsIdentifier(definition) === WGS84_GEOCENTRIC_CRS);
174
257
  }
175
258
  /** Return whether a CRS definition uses conventional WGS84 longitude/latitude coordinates. */
176
259
  function isWgs84Geographic(definition) {
@@ -178,13 +261,7 @@ function isWgs84Geographic(definition) {
178
261
  return false;
179
262
  }
180
263
  const identifier = normalizeCrsIdentifier(definition);
181
- return identifier === GEOGRAPHIC_CRS || identifier === 'EPSG:4979' || identifier === 'OGC:CRS84';
182
- }
183
- /** Normalize common OGC URL and URN CRS spellings to authority identifiers. */
184
- function normalizeCrsIdentifier(identifier) {
185
- const normalizedIdentifier = identifier.trim().toUpperCase();
186
- const ogcMatch = normalizedIdentifier.match(/(?:\/DEF\/CRS\/|URN:OGC:DEF:CRS:)([A-Z0-9_-]+)(?:\/|::)(?:[^/:]*[/:])?([A-Z0-9_.-]+)$/);
187
- return ogcMatch ? `${ogcMatch[1]}:${ogcMatch[2]}` : normalizedIdentifier;
264
+ return (identifier === WGS84_GEOGRAPHIC_CRS || identifier === 'EPSG:4979' || identifier === 'OGC:CRS84');
188
265
  }
189
266
  /** Return whether source and target height interpretations differ. */
190
267
  function requiresHeightTransformation(spatialReference) {
@@ -1 +1 @@
1
- {"version":3,"file":"spatial-coordinate-transformer.js","sourceRoot":"","sources":["../../src/spatial/spatial-coordinate-transformer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spatial-coordinate-transformer.js","sourceRoot":"","sources":["../../src/spatial/spatial-coordinate-transformer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { TilesetSpatialOptions, TilesetSpatialReference } from "./spatial-types.js";
2
+ /** Structural 3D Tiles volume shape used by the source adapter. */
3
+ export type Tiles3DSpatialBoundingVolume = {
4
+ box?: number[];
5
+ sphere?: number[];
6
+ region?: number[];
7
+ [key: string]: unknown;
8
+ };
9
+ /**
10
+ * Applies nonlinear CRS operations to 3D Tiles geometry bounds.
11
+ *
12
+ * Bounds are rebuilt from conservative samples. This intentionally produces an axis-aligned box
13
+ * in the target frame; it is safe for culling and screen-space-error calculations even when the
14
+ * source volume is rotated or the projection is nonlinear.
15
+ */
16
+ export declare class Tiles3DSpatialTransformer {
17
+ /** Normalized reference describing the completed operation. */
18
+ readonly spatialReference: TilesetSpatialReference;
19
+ private readonly coordinateTransformer;
20
+ private readonly geographicCoordinateTransformer;
21
+ /** Creates a 3D Tiles transformer for a requested target CRS. */
22
+ constructor(spatialReference: TilesetSpatialReference, options?: TilesetSpatialOptions);
23
+ /** Transform packed POSITION values into the target CRS. */
24
+ transformPositions(positions: ArrayLike<number>): Float64Array;
25
+ /** Transform packed NORMAL values using the corresponding source positions. */
26
+ transformNormals(normals: ArrayLike<number>, positions: ArrayLike<number>): Float32Array;
27
+ /** Rebuild a conservative target-frame volume from a source volume. */
28
+ transformBoundingVolume(volume: Tiles3DSpatialBoundingVolume, sourceTransform?: ArrayLike<number>): Tiles3DSpatialBoundingVolume;
29
+ /** Transforms one WGS84 region sample into the selected output frame. */
30
+ private transformRegionSample;
31
+ }
32
+ //# sourceMappingURL=tiles-3d-spatial-transformer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiles-3d-spatial-transformer.d.ts","sourceRoot":"","sources":["../../src/spatial/tiles-3d-spatial-transformer.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAC,qBAAqB,EAAE,uBAAuB,EAAC,2BAAwB;AAEpF,mEAAmE;AACnE,MAAM,MAAM,4BAA4B,GAAG;IACzC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF;;;;;;GAMG;AACH,qBAAa,yBAAyB;IACpC,+DAA+D;IAC/D,QAAQ,CAAC,gBAAgB,EAAE,uBAAuB,CAAC;IACnD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA+B;IACrE,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAA+B;IAE/E,iEAAiE;gBACrD,gBAAgB,EAAE,uBAAuB,EAAE,OAAO,GAAE,qBAA0B;IAkB1F,4DAA4D;IAC5D,kBAAkB,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,YAAY;IAI9D,+EAA+E;IAC/E,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,YAAY;IAIxF,uEAAuE;IACvE,uBAAuB,CACrB,MAAM,EAAE,4BAA4B,EACpC,eAAe,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,GAClC,4BAA4B;IAgB/B,yEAAyE;IACzE,OAAO,CAAC,qBAAqB;CAa9B"}
@@ -0,0 +1,175 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { SpatialCoordinateTransformer } from "./spatial-coordinate-transformer.js";
5
+ import { getSpatialCoordinateFrame } from "./get-spatial-coordinate-frame.js";
6
+ import { Matrix4 } from '@math.gl/core';
7
+ import { Ellipsoid } from '@math.gl/geospatial';
8
+ /**
9
+ * Applies nonlinear CRS operations to 3D Tiles geometry bounds.
10
+ *
11
+ * Bounds are rebuilt from conservative samples. This intentionally produces an axis-aligned box
12
+ * in the target frame; it is safe for culling and screen-space-error calculations even when the
13
+ * source volume is rotated or the projection is nonlinear.
14
+ */
15
+ export class Tiles3DSpatialTransformer {
16
+ /** Normalized reference describing the completed operation. */
17
+ spatialReference;
18
+ coordinateTransformer;
19
+ geographicCoordinateTransformer;
20
+ /** Creates a 3D Tiles transformer for a requested target CRS. */
21
+ constructor(spatialReference, options = {}) {
22
+ this.coordinateTransformer = new SpatialCoordinateTransformer(spatialReference, options);
23
+ // 3D Tiles regions are always encoded as WGS84 longitude/latitude radians, independently
24
+ // of the tileset's local CRS. Build a second pipeline for that fixed source frame.
25
+ const geographicSpatialReference = {
26
+ ...spatialReference,
27
+ sourceCrs: 'EPSG:4326',
28
+ targetCrs: spatialReference.targetCrs || spatialReference.sourceCrs,
29
+ coordinateFrame: 'geographic',
30
+ axisOrder: 'xy'
31
+ };
32
+ this.geographicCoordinateTransformer = new SpatialCoordinateTransformer(geographicSpatialReference, options);
33
+ this.spatialReference = spatialReference;
34
+ }
35
+ /** Transform packed POSITION values into the target CRS. */
36
+ transformPositions(positions) {
37
+ return this.coordinateTransformer.transformPositions(positions);
38
+ }
39
+ /** Transform packed NORMAL values using the corresponding source positions. */
40
+ transformNormals(normals, positions) {
41
+ return this.coordinateTransformer.transformNormals(normals, positions);
42
+ }
43
+ /** Rebuild a conservative target-frame volume from a source volume. */
44
+ transformBoundingVolume(volume, sourceTransform) {
45
+ const transform = sourceTransform ? new Matrix4(Array.from(sourceTransform)) : undefined;
46
+ const samples = volume.region
47
+ ? getRegionSamples(volume.region)
48
+ : getVolumeSamples(volume).map(sample => transform ? Array.from(transform.transformAsPoint(sample)) : sample);
49
+ if (!samples.length) {
50
+ return volume;
51
+ }
52
+ const transformed = volume.region
53
+ ? samples.map(sample => this.transformRegionSample(sample))
54
+ : samples.map(sample => this.coordinateTransformer.transformPosition(sample));
55
+ return { box: createAxisAlignedBox(transformed) };
56
+ }
57
+ /** Transforms one WGS84 region sample into the selected output frame. */
58
+ transformRegionSample(sample) {
59
+ const [longitudeDegrees, latitudeDegrees, height] = sample;
60
+ const targetCrs = this.spatialReference.targetCrs || this.spatialReference.sourceCrs;
61
+ if (targetCrs && getSpatialCoordinateFrame(targetCrs) === 'geocentric') {
62
+ const cartesian = Ellipsoid.WGS84.cartographicToCartesian([
63
+ longitudeDegrees,
64
+ latitudeDegrees,
65
+ height
66
+ ]);
67
+ return Array.from(cartesian);
68
+ }
69
+ return this.geographicCoordinateTransformer.transformPosition(sample);
70
+ }
71
+ }
72
+ /** Samples region corners, center lines, and both height planes in degrees/meters. */
73
+ function getRegionSamples(region) {
74
+ if (region.length < 6 || region.some(value => !Number.isFinite(value))) {
75
+ return [];
76
+ }
77
+ const [west, south, east, north, minimumHeight, maximumHeight] = region;
78
+ const longitudeEnd = east < west ? east + Math.PI * 2 : east;
79
+ const longitudes = getIntervalSamples(west, longitudeEnd);
80
+ const latitudes = getIntervalSamples(south, north);
81
+ const samples = [];
82
+ for (const longitude of longitudes) {
83
+ for (const latitude of latitudes) {
84
+ for (const height of [minimumHeight, maximumHeight]) {
85
+ samples.push([(longitude * 180) / Math.PI, (latitude * 180) / Math.PI, height]);
86
+ }
87
+ }
88
+ }
89
+ return samples;
90
+ }
91
+ /** Includes interval endpoints and every quarter-turn where ECEF axes reach an extremum. */
92
+ function getIntervalSamples(start, end) {
93
+ const samples = [start, (start + end) / 2, end];
94
+ const angularStep = Math.PI / 2;
95
+ const firstCriticalIndex = Math.ceil(start / angularStep);
96
+ const lastCriticalIndex = Math.floor(end / angularStep);
97
+ for (let criticalIndex = firstCriticalIndex; criticalIndex <= lastCriticalIndex; criticalIndex++) {
98
+ samples.push(criticalIndex * angularStep);
99
+ }
100
+ return samples;
101
+ }
102
+ function getVolumeSamples(volume) {
103
+ if (volume.box && volume.box.length >= 12) {
104
+ const center = volume.box.slice(0, 3);
105
+ const axes = [volume.box.slice(3, 6), volume.box.slice(6, 9), volume.box.slice(9, 12)];
106
+ const samples = [];
107
+ for (let firstIndex = 0; firstIndex <= 4; firstIndex++) {
108
+ for (let secondIndex = 0; secondIndex <= 4; secondIndex++) {
109
+ for (let thirdIndex = 0; thirdIndex <= 4; thirdIndex++) {
110
+ const first = firstIndex / 2 - 1;
111
+ const second = secondIndex / 2 - 1;
112
+ const third = thirdIndex / 2 - 1;
113
+ samples.push([
114
+ center[0] + first * axes[0][0] + second * axes[1][0] + third * axes[2][0],
115
+ center[1] + first * axes[0][1] + second * axes[1][1] + third * axes[2][1],
116
+ center[2] + first * axes[0][2] + second * axes[1][2] + third * axes[2][2]
117
+ ]);
118
+ }
119
+ }
120
+ }
121
+ return samples;
122
+ }
123
+ if (volume.sphere && volume.sphere.length >= 4) {
124
+ const [x, y, z, radius] = volume.sphere;
125
+ const samples = [
126
+ [x - radius, y, z],
127
+ [x + radius, y, z],
128
+ [x, y - radius, z],
129
+ [x, y + radius, z],
130
+ [x, y, z - radius],
131
+ [x, y, z + radius]
132
+ ];
133
+ for (let longitudeIndex = 0; longitudeIndex < 16; longitudeIndex++) {
134
+ const longitude = (longitudeIndex * Math.PI * 2) / 16;
135
+ samples.push([x + radius * Math.cos(longitude), y + radius * Math.sin(longitude), z]);
136
+ }
137
+ return samples;
138
+ }
139
+ // Regions are already WGS84 geographic volumes. Keep them unchanged until a dedicated
140
+ // geographic-region adapter can account for longitude wrapping and datum semantics.
141
+ return [];
142
+ }
143
+ function createAxisAlignedBox(samples) {
144
+ const minimum = [Infinity, Infinity, Infinity];
145
+ const maximum = [-Infinity, -Infinity, -Infinity];
146
+ for (const sample of samples) {
147
+ for (let axis = 0; axis < 3; axis++) {
148
+ minimum[axis] = Math.min(minimum[axis], sample[axis]);
149
+ maximum[axis] = Math.max(maximum[axis], sample[axis]);
150
+ }
151
+ }
152
+ const padding = [
153
+ Math.max((maximum[0] - minimum[0]) * 0.01, 1e-9),
154
+ Math.max((maximum[1] - minimum[1]) * 0.01, 1e-9),
155
+ Math.max((maximum[2] - minimum[2]) * 0.01, 1e-9)
156
+ ];
157
+ const center = [
158
+ (minimum[0] + maximum[0]) / 2,
159
+ (minimum[1] + maximum[1]) / 2,
160
+ (minimum[2] + maximum[2]) / 2
161
+ ];
162
+ return [
163
+ ...center,
164
+ (maximum[0] - minimum[0]) / 2 + padding[0],
165
+ 0,
166
+ 0,
167
+ 0,
168
+ (maximum[1] - minimum[1]) / 2 + padding[1],
169
+ 0,
170
+ 0,
171
+ 0,
172
+ (maximum[2] - minimum[2]) / 2 + padding[2]
173
+ ];
174
+ }
175
+ //# sourceMappingURL=tiles-3d-spatial-transformer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiles-3d-spatial-transformer.js","sourceRoot":"","sources":["../../src/spatial/tiles-3d-spatial-transformer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /** Structural subset implemented by math.gl bounding volumes used by tile renderers. */
2
+ export type Tile3DBoundingVolume = {
3
+ distanceSquaredTo?(point: unknown): number;
4
+ intersectPlane?(plane: unknown): number;
5
+ };
6
+ /** Renderer-neutral description of one ordered tile content entry. */
7
+ export type Tile3DContent = {
8
+ /** Zero-based source order, stable across loading and unloading. */
9
+ index: number;
10
+ /** Resolved content URI when declared by the tileset. */
11
+ uri?: string;
12
+ /** Tileset group index declared by this content entry. */
13
+ group?: number;
14
+ /** Normalized tile content kind, when detected. */
15
+ type?: string;
16
+ /** Decoded payload, or null while unloaded/failed. */
17
+ payload: unknown;
18
+ /** Raw content metadata reference. */
19
+ metadata: Record<string, unknown> | null;
20
+ /** Transformed content volume, with tile-volume fallback. */
21
+ boundingVolume: Tile3DBoundingVolume | null;
22
+ /** Normalized feature-id declarations for this content. */
23
+ featureIds: Tile3DFeatureIdSet[];
24
+ /** Whether the payload can currently be rendered. */
25
+ renderable: boolean;
26
+ };
27
+ /** Renderer-neutral feature-id declaration from a tile content payload. */
28
+ export type Tile3DFeatureIdSet = {
29
+ /** Source of the feature identifiers. */
30
+ source: 'attribute' | 'property-table' | 'constant' | 'texture' | 'implicit';
31
+ /** glTF attribute name for attribute-backed identifiers. */
32
+ attribute?: string;
33
+ /** Structural-metadata property-table index. */
34
+ propertyTable?: number;
35
+ /** Constant feature identifier. */
36
+ constant?: number;
37
+ /** Texture-backed identifier declaration, when present. */
38
+ texture?: Record<string, unknown>;
39
+ /** Implicit identifier declaration, when present. */
40
+ implicit?: Record<string, unknown>;
41
+ /** Decoded identifier values, when supplied by a content loader. */
42
+ values?: Uint32Array | Uint16Array | Uint8Array;
43
+ /** Unrecognized source fields preserved for forward compatibility. */
44
+ details?: Record<string, unknown>;
45
+ };
46
+ /** Raw metadata references inherited by a tile and its contents. */
47
+ export type Tile3DMetadataContext = {
48
+ /** Tileset-level metadata entity. */
49
+ tileset?: Record<string, unknown> | null;
50
+ /** Group metadata entity selected for the tile's primary content. */
51
+ group?: Record<string, unknown> | null;
52
+ /** All tileset groups, used to resolve a selected content entry's group. */
53
+ groups?: readonly (Record<string, unknown> | null)[];
54
+ /** Tile metadata entity. */
55
+ tile?: Record<string, unknown> | null;
56
+ /** Content metadata entity. */
57
+ content?: Record<string, unknown> | null;
58
+ /** Implicit-subtree metadata entity. */
59
+ subtree?: Record<string, unknown> | null;
60
+ };
61
+ /** Extracts mesh-feature declarations from a decoded glTF-like payload. */
62
+ export declare function getTile3DFeatureIdSets(payload: unknown): Tile3DFeatureIdSet[];
63
+ //# sourceMappingURL=tile-3d-contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tile-3d-contracts.d.ts","sourceRoot":"","sources":["../../../src/tileset-3d/common/tile-3d-contracts.ts"],"names":[],"mappings":"AAIA,wFAAwF;AACxF,MAAM,MAAM,oBAAoB,GAAG;IACjC,iBAAiB,CAAC,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3C,cAAc,CAAC,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;CACzC,CAAC;AAEF,sEAAsE;AACtE,MAAM,MAAM,aAAa,GAAG;IAC1B,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,OAAO,EAAE,OAAO,CAAC;IACjB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzC,6DAA6D;IAC7D,cAAc,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC5C,2DAA2D;IAC3D,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC,qDAAqD;IACrD,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,2EAA2E;AAC3E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,yCAAyC;IACzC,MAAM,EAAE,WAAW,GAAG,gBAAgB,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;IAC7E,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,oEAAoE;IACpE,MAAM,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC;IAChD,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAAC;AAEF,oEAAoE;AACpE,MAAM,MAAM,qBAAqB,GAAG;IAClC,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzC,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACvC,4EAA4E;IAC5E,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IACrD,4BAA4B;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACtC,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzC,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC1C,CAAC;AAEF,2EAA2E;AAC3E,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,kBAAkB,EAAE,CA6C7E"}
@@ -0,0 +1,51 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ /** Extracts mesh-feature declarations from a decoded glTF-like payload. */
5
+ export function getTile3DFeatureIdSets(payload) {
6
+ const featureIdSets = [];
7
+ const visited = new Set();
8
+ const visit = (value) => {
9
+ if (!value || typeof value !== 'object') {
10
+ return;
11
+ }
12
+ if (visited.has(value)) {
13
+ return;
14
+ }
15
+ visited.add(value);
16
+ const record = value;
17
+ const declarations = record.extensions?.EXT_mesh_features?.featureIds;
18
+ if (Array.isArray(declarations)) {
19
+ for (const declaration of declarations) {
20
+ if (!declaration || typeof declaration !== 'object') {
21
+ continue;
22
+ }
23
+ const source = declaration.texture
24
+ ? 'texture'
25
+ : declaration.implicit
26
+ ? 'implicit'
27
+ : declaration.attribute !== undefined
28
+ ? 'attribute'
29
+ : declaration.propertyTable !== undefined
30
+ ? 'property-table'
31
+ : 'constant';
32
+ featureIdSets.push({
33
+ source,
34
+ attribute: declaration.attribute,
35
+ propertyTable: declaration.propertyTable,
36
+ constant: declaration.constant,
37
+ texture: declaration.texture,
38
+ implicit: declaration.implicit,
39
+ values: declaration.values,
40
+ details: declaration
41
+ });
42
+ }
43
+ }
44
+ for (const child of Object.values(record)) {
45
+ visit(child);
46
+ }
47
+ };
48
+ visit(payload);
49
+ return featureIdSets;
50
+ }
51
+ //# sourceMappingURL=tile-3d-contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tile-3d-contracts.js","sourceRoot":"","sources":["../../../src/tileset-3d/common/tile-3d-contracts.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,oCAAoC;AAkEpC,2EAA2E;AAC3E,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,MAAM,aAAa,GAAyB,EAAE,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,KAAK,GAAG,CAAC,KAAc,EAAQ,EAAE;QACrC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACxC,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,KAAe,CAAC,EAAE,CAAC;YACjC,OAAO;QACT,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAe,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAG,KAA4B,CAAC;QAC5C,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,EAAE,iBAAiB,EAAE,UAAU,CAAC;QACtE,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;gBACvC,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;oBACpD,SAAS;gBACX,CAAC;gBACD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO;oBAChC,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,WAAW,CAAC,QAAQ;wBACpB,CAAC,CAAC,UAAU;wBACZ,CAAC,CAAC,WAAW,CAAC,SAAS,KAAK,SAAS;4BACnC,CAAC,CAAC,WAAW;4BACb,CAAC,CAAC,WAAW,CAAC,aAAa,KAAK,SAAS;gCACvC,CAAC,CAAC,gBAAgB;gCAClB,CAAC,CAAC,UAAU,CAAC;gBACrB,aAAa,CAAC,IAAI,CAAC;oBACjB,MAAM;oBACN,SAAS,EAAE,WAAW,CAAC,SAAS;oBAChC,aAAa,EAAE,WAAW,CAAC,aAAa;oBACxC,QAAQ,EAAE,WAAW,CAAC,QAAQ;oBAC9B,OAAO,EAAE,WAAW,CAAC,OAAO;oBAC5B,QAAQ,EAAE,WAAW,CAAC,QAAQ;oBAC9B,MAAM,EAAE,WAAW,CAAC,MAAM;oBAC1B,OAAO,EAAE,WAAW;iBACrB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1C,KAAK,CAAC,KAAK,CAAC,CAAC;QACf,CAAC;IACH,CAAC,CAAC;IACF,KAAK,CAAC,OAAO,CAAC,CAAC;IACf,OAAO,aAAa,CAAC;AACvB,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { Matrix4 } from '@math.gl/core';
2
2
  import { CullingVolume } from '@math.gl/culling';
3
3
  import type { CullingResult } from '@math.gl/culling';
4
+ import type { Tile3DContent, Tile3DFeatureIdSet, Tile3DMetadataContext } from "./tile-3d-contracts.js";
4
5
  import type { Tileset3D } from "./tileset-3d.js";
5
6
  import type { DoublyLinkedListNode } from "../../utils/doubly-linked-list-node.js";
6
7
  import { TILE_REFINEMENT } from "../../constants.js";
@@ -67,6 +68,8 @@ export declare class Tile3D {
67
68
  * separate ensures transform updates never compound an already-scaled geometric error.
68
69
  */
69
70
  private _unscaledLodMetricValue;
71
+ /** Whether the source format defines geometric error in transform-local units. */
72
+ private _scaleGeometricError;
70
73
  /** @todo math.gl is not exporting BoundingVolume base type? */
71
74
  boundingVolume: any;
72
75
  /**
@@ -76,6 +79,14 @@ export declare class Tile3D {
76
79
  content: any;
77
80
  /** Loaded payloads in the same order as {@link contentUrls}; `content` remains the primary payload. */
78
81
  contents: any[];
82
+ /** Ordered renderer-neutral descriptors for each source content entry. */
83
+ contentEntries: Tile3DContent[];
84
+ /** Raw metadata references inherited by this tile and its content. */
85
+ metadataContext: Tile3DMetadataContext;
86
+ /** Feature-id declarations normalized from supported content extensions. */
87
+ featureIdSets: Tile3DFeatureIdSet[];
88
+ /** Decoded 3D Tiles vector topology for the primary loaded content, when present. */
89
+ vectorContent: unknown;
79
90
  /**
80
91
  * Metadata entity attached to this tile in the source tileset, if present.
81
92
  *
@@ -135,6 +146,7 @@ export declare class Tile3D {
135
146
  get contentBoundingVolumes(): any[];
136
147
  /** Bounding volume that limits when this tile may be requested, when declared. */
137
148
  get viewerRequestVolume(): any;
149
+ /** Accumulated tile transforms from the source JSON, excluding the tileset model matrix. */
138
150
  _initialTransform: Matrix4;
139
151
  _priority: number;
140
152
  _selectedFrame: number;
@@ -211,7 +223,7 @@ export declare class Tile3D {
211
223
  */
212
224
  get screenSpaceError(): number;
213
225
  /**
214
- * Get bounding box in cartographic coordinates
226
+ * Get the current world-space bounding volume in cartographic coordinates.
215
227
  * @returns [min, max] each in [longitude, latitude, altitude]
216
228
  */
217
229
  get boundingBox(): CartographicBounds;
@@ -285,13 +297,25 @@ export declare class Tile3D {
285
297
  /**
286
298
  * Replaces a contentless implicit placeholder with its materialized subtree-root header.
287
299
  *
288
- * Transform state is intentionally preserved: the placeholder already owns the composed
289
- * transform, and reapplying the root transform here would double-transform bounds and geometric
290
- * error. Content and raw geometric error are reinitialized from the newly available header.
300
+ * The placeholder transform is preserved when the subtree omits a root transform. An explicit
301
+ * subtree-root transform replaces it and is recomposed against the runtime parent. Content,
302
+ * metadata, bounds, and raw geometric error are reinitialized from the available header.
291
303
  *
292
304
  * @param materializedHeader - Available root header produced from one subtree resource.
293
305
  */
294
306
  applyImplicitSubtreeHeader(materializedHeader: Record<string, any>): void;
307
+ /** Refreshes tile and content metadata from a source or materialized tile header. */
308
+ private _initializeMetadata;
309
+ /** Updates payload and renderability while retaining immutable metadata descriptors. */
310
+ private _updateContentEntriesAfterLoad;
311
+ /** Returns one ordered content descriptor, or null when the index is out of range. */
312
+ getContentEntry(index: number): Tile3DContent | null;
313
+ /** Returns whether an ordered content entry currently has renderable payload. */
314
+ isContentRenderable(index: number): boolean;
315
+ /** Initializes additive renderer-neutral descriptors from a normalized tile header. */
316
+ private _initializeContentEntries;
317
+ /** Extracts renderer-neutral feature-id declarations without decoding property values. */
318
+ private _getFeatureIdSets;
295
319
  unloadContent(): boolean;
296
320
  /**
297
321
  * Update the tile's visibility
@@ -319,7 +343,7 @@ export declare class Tile3D {
319
343
  * @param frameState Current camera, culling, and optional clipping-plane state.
320
344
  * @returns The content visibility classification.
321
345
  */
322
- contentVisibility(frameState: FrameState): CullingResult;
346
+ contentVisibility(frameState: FrameState, contentIndex?: number): CullingResult;
323
347
  /**
324
348
  * Computes the (potentially approximate) distance from the closest point of the tile's bounding volume to the camera.
325
349
  * @param frameState The frame state.