@math.gl/geospatial 5.0.0-alpha.11 → 5.0.0-alpha.13

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 (59) hide show
  1. package/LICENSE +7 -0
  2. package/dist/constants.d.ts.map +1 -1
  3. package/dist/constants.js +4 -2
  4. package/dist/constants.js.map +1 -1
  5. package/dist/ellipsoid-helpers/ellipsoid-transform.d.ts.map +1 -1
  6. package/dist/ellipsoid-helpers/ellipsoid-transform.js +46 -15
  7. package/dist/ellipsoid-helpers/ellipsoid-transform.js.map +1 -1
  8. package/dist/ellipsoid-helpers/scale-to-geodetic-surface.d.ts +2 -0
  9. package/dist/ellipsoid-helpers/scale-to-geodetic-surface.d.ts.map +1 -1
  10. package/dist/ellipsoid-helpers/scale-to-geodetic-surface.js +46 -13
  11. package/dist/ellipsoid-helpers/scale-to-geodetic-surface.js.map +1 -1
  12. package/dist/ellipsoid-occluder.d.ts +28 -0
  13. package/dist/ellipsoid-occluder.d.ts.map +1 -0
  14. package/dist/ellipsoid-occluder.js +112 -0
  15. package/dist/ellipsoid-occluder.js.map +1 -0
  16. package/dist/ellipsoid-tangent-plane.d.ts.map +1 -1
  17. package/dist/ellipsoid-tangent-plane.js +4 -2
  18. package/dist/ellipsoid-tangent-plane.js.map +1 -1
  19. package/dist/ellipsoid.d.ts +11 -0
  20. package/dist/ellipsoid.d.ts.map +1 -1
  21. package/dist/ellipsoid.js +77 -7
  22. package/dist/ellipsoid.js.map +1 -1
  23. package/dist/geographic-tiles.d.ts +24 -0
  24. package/dist/geographic-tiles.d.ts.map +1 -0
  25. package/dist/geographic-tiles.js +72 -0
  26. package/dist/geographic-tiles.js.map +1 -0
  27. package/dist/globe-horizon-bounds.d.ts +13 -0
  28. package/dist/globe-horizon-bounds.d.ts.map +1 -0
  29. package/dist/globe-horizon-bounds.js +59 -0
  30. package/dist/globe-horizon-bounds.js.map +1 -0
  31. package/dist/index.cjs +557 -40
  32. package/dist/index.cjs.map +3 -3
  33. package/dist/index.d.ts +7 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +4 -1
  36. package/dist/index.js.map +1 -1
  37. package/dist/lng-lat-rectangle.d.ts.map +1 -1
  38. package/dist/lng-lat-rectangle.js +4 -2
  39. package/dist/lng-lat-rectangle.js.map +1 -1
  40. package/dist/make-obb-from-region.d.ts.map +1 -1
  41. package/dist/make-obb-from-region.js +4 -2
  42. package/dist/make-obb-from-region.js.map +1 -1
  43. package/dist/type-utils.d.ts +2 -0
  44. package/dist/type-utils.d.ts.map +1 -1
  45. package/dist/type-utils.js +25 -2
  46. package/dist/type-utils.js.map +1 -1
  47. package/package.json +5 -5
  48. package/src/constants.ts +4 -2
  49. package/src/ellipsoid-helpers/ellipsoid-transform.ts +62 -15
  50. package/src/ellipsoid-helpers/scale-to-geodetic-surface.ts +48 -14
  51. package/src/ellipsoid-occluder.ts +135 -0
  52. package/src/ellipsoid-tangent-plane.ts +4 -2
  53. package/src/ellipsoid.ts +91 -7
  54. package/src/geographic-tiles.ts +87 -0
  55. package/src/globe-horizon-bounds.ts +68 -0
  56. package/src/index.ts +15 -1
  57. package/src/lng-lat-rectangle.ts +4 -2
  58. package/src/make-obb-from-region.ts +4 -2
  59. package/src/type-utils.ts +30 -2
package/LICENSE CHANGED
@@ -138,3 +138,10 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
138
138
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
139
139
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
140
140
  THE SOFTWARE.
141
+
142
+ ---
143
+
144
+ The shared numeric spheroid entry in @math.gl/core retains the existing
145
+ proj4js-derived forward geocentric and Hannover inverse arithmetic. The core
146
+ package includes its full upstream MIT notice in modules/core/PROJ4-LICENSE.md;
147
+ the projection package retains its corresponding PROJ4-LICENSE.md.
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,cAAc,UAAY,CAAC;AACxC,eAAO,MAAM,cAAc,UAAY,CAAC;AACxC,eAAO,MAAM,cAAc,oBAAqB,CAAC;AAIjD,eAAO,MAAM,eAAe;;;;;;;CAe3B,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,cAAc,UAAY,CAAC;AACxC,eAAO,MAAM,cAAc,UAAY,CAAC;AACxC,eAAO,MAAM,cAAc,oBAAqB,CAAC;AAIjD,eAAO,MAAM,eAAe;;;;;;;CAe3B,CAAC"}
package/dist/constants.js CHANGED
@@ -1,6 +1,8 @@
1
1
  // math.gl
2
- // SPDX-License-Identifier: MIT and Apache-2.0
3
- // Copyright (c) vis.gl contributors
2
+ // SPDX-License-Identifier: MIT AND Apache-2.0
3
+ // SPDX-FileCopyrightText: Copyright 2011-2018 CesiumJS Contributors
4
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
5
+ // SPDX-FileComment: Derived from Cesium. See the repository LICENSE for upstream attribution and Apache-2.0 terms.
4
6
  // This file is derived from the Cesium math library under Apache 2 license
5
7
  // See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md
6
8
  export const WGS84_RADIUS_X = 6378137.0;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,8CAA8C;AAC9C,oCAAoC;AAEpC,2EAA2E;AAC3E,4FAA4F;AAE5F,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAEjD,+EAA+E;AAE/E,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,KAAK,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC;IACvD,YAAY,EAAE;QACZ,cAAc,GAAG,cAAc;QAC/B,cAAc,GAAG,cAAc;QAC/B,cAAc,GAAG,cAAc;KAChC;IACD,YAAY,EAAE,CAAC,GAAG,GAAG,cAAc,EAAE,GAAG,GAAG,cAAc,EAAE,GAAG,GAAG,cAAc,CAAC;IAChF,mBAAmB,EAAE;QACnB,GAAG,GAAG,CAAC,cAAc,GAAG,cAAc,CAAC;QACvC,GAAG,GAAG,CAAC,cAAc,GAAG,cAAc,CAAC;QACvC,GAAG,GAAG,CAAC,cAAc,GAAG,cAAc,CAAC;KACxC;IACD,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC;IACvE,sBAAsB,EAAE,IAAI,CAAC,YAAY;CAC1C,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,8CAA8C;AAC9C,oEAAoE;AACpE,4DAA4D;AAC5D,mHAAmH;AAEnH,2EAA2E;AAC3E,4FAA4F;AAE5F,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAEjD,+EAA+E;AAE/E,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,KAAK,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC;IACvD,YAAY,EAAE;QACZ,cAAc,GAAG,cAAc;QAC/B,cAAc,GAAG,cAAc;QAC/B,cAAc,GAAG,cAAc;KAChC;IACD,YAAY,EAAE,CAAC,GAAG,GAAG,cAAc,EAAE,GAAG,GAAG,cAAc,EAAE,GAAG,GAAG,cAAc,CAAC;IAChF,mBAAmB,EAAE;QACnB,GAAG,GAAG,CAAC,cAAc,GAAG,cAAc,CAAC;QACvC,GAAG,GAAG,CAAC,cAAc,GAAG,cAAc,CAAC;QACvC,GAAG,GAAG,CAAC,cAAc,GAAG,cAAc,CAAC;KACxC;IACD,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC;IACvE,sBAAsB,EAAE,IAAI,CAAC,YAAY;CAC1C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ellipsoid-transform.d.ts","sourceRoot":"","sources":["../../src/ellipsoid-helpers/ellipsoid-transform.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAG5C,OAAO,KAAK,EAAC,SAAS,EAAC,wBAAqB;AAM5C,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAsEhF,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,aAAa,EACzB,SAAS,EAAE,aAAa,EACxB,eAAe,EAAE,QAAQ,CAAC,YAAY,CAAC,EACvC,MAAM,EAAE,MAAM,EAAE,GACf,MAAM,EAAE,CAuEV"}
1
+ {"version":3,"file":"ellipsoid-transform.d.ts","sourceRoot":"","sources":["../../src/ellipsoid-helpers/ellipsoid-transform.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAQ5C,OAAO,KAAK,EAAC,SAAS,EAAC,wBAAqB;AAO5C,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAsEhF,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,aAAa,EACzB,SAAS,EAAE,aAAa,EACxB,eAAe,EAAE,QAAQ,CAAC,YAAY,CAAC,EACvC,MAAM,EAAE,MAAM,EAAE,GACf,MAAM,EAAE,CA8GV"}
@@ -1,9 +1,13 @@
1
1
  // math.gl
2
- // SPDX-License-Identifier: MIT and Apache-2.0
3
- // Copyright (c) vis.gl contributors
2
+ // SPDX-License-Identifier: MIT AND Apache-2.0
3
+ // SPDX-FileCopyrightText: Copyright 2011-2018 CesiumJS Contributors
4
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
5
+ // SPDX-FileComment: Derived from Cesium. See the repository LICENSE for upstream attribution and Apache-2.0 terms.
4
6
  import { Vector3, assert, equals as equalsEpsilon } from '@math.gl/core';
7
+ import { createLocalFrameBasis, eastNorthUpBasisFromDirections, localFrameToMatrix } from '@math.gl/core/local-frame';
5
8
  const EPSILON14 = 1e-14;
6
9
  const scratchOrigin = new Vector3();
10
+ const scratchBasis = createLocalFrameBasis();
7
11
  // Caclulate third axis from given two axii
8
12
  const VECTOR_PRODUCT_LOCAL_FRAME = {
9
13
  up: {
@@ -75,6 +79,28 @@ export function localFrameToFixedFrame(ellipsoid, firstAxis, secondAxis, thirdAx
75
79
  const origin = scratchOrigin.copy(cartesianOrigin);
76
80
  // If x and y are zero, assume origin is at a pole, which is a special case.
77
81
  const atPole = equalsEpsilon(origin.x, 0.0, EPSILON14) && equalsEpsilon(origin.y, 0.0, EPSILON14);
82
+ // Only the qualified sphere/oblate basis is shared. Three-radius and center
83
+ // conventions keep the retained Cesium path, without changing its normal choice.
84
+ const radii = ellipsoid.radii;
85
+ if (radii.x === radii.y &&
86
+ radii.x > 0 &&
87
+ radii.z > 0 &&
88
+ radii.z <= radii.x &&
89
+ (!atPole || origin.z !== 0)) {
90
+ const { east, up } = scratchAxisVectors;
91
+ if (atPole) {
92
+ east.set(0, 1, 0);
93
+ up.set(0, 0, Math.sign(origin.z));
94
+ }
95
+ else {
96
+ east.set(-origin.y, origin.x, 0).normalize();
97
+ ellipsoid.geodeticSurfaceNormal(origin, up);
98
+ }
99
+ if (!eastNorthUpBasisFromDirections(east, up, scratchBasis) ||
100
+ !localFrameToMatrix(scratchBasis, origin, firstAxis, secondAxis, thirdAxis, result))
101
+ throw new Error('Unsupported local frame');
102
+ return result;
103
+ }
78
104
  if (atPole) {
79
105
  // Look up axis value and adjust
80
106
  const sign = Math.sign(origin.z);
@@ -106,22 +132,27 @@ export function localFrameToFixedFrame(ellipsoid, firstAxis, secondAxis, thirdAx
106
132
  secondAxisVector = scratchAxisVectors[secondAxis];
107
133
  thirdAxisVector = scratchAxisVectors[thirdAxis];
108
134
  }
109
- // TODO - assuming the result is column-major
110
- result[0] = firstAxisVector.x;
111
- result[1] = firstAxisVector.y;
112
- result[2] = firstAxisVector.z;
135
+ // Snapshot the retained three-radius/center path too: application result setters
136
+ // can recursively invoke either path and overwrite all module scratch vectors.
137
+ const ax = firstAxisVector.x, ay = firstAxisVector.y, az = firstAxisVector.z;
138
+ const bx = secondAxisVector.x, by = secondAxisVector.y, bz = secondAxisVector.z;
139
+ const cx = thirdAxisVector.x, cy = thirdAxisVector.y, cz = thirdAxisVector.z;
140
+ const x = origin.x, y = origin.y, z = origin.z;
141
+ result[0] = ax;
142
+ result[1] = ay;
143
+ result[2] = az;
113
144
  result[3] = 0.0;
114
- result[4] = secondAxisVector.x;
115
- result[5] = secondAxisVector.y;
116
- result[6] = secondAxisVector.z;
145
+ result[4] = bx;
146
+ result[5] = by;
147
+ result[6] = bz;
117
148
  result[7] = 0.0;
118
- result[8] = thirdAxisVector.x;
119
- result[9] = thirdAxisVector.y;
120
- result[10] = thirdAxisVector.z;
149
+ result[8] = cx;
150
+ result[9] = cy;
151
+ result[10] = cz;
121
152
  result[11] = 0.0;
122
- result[12] = origin.x;
123
- result[13] = origin.y;
124
- result[14] = origin.z;
153
+ result[12] = x;
154
+ result[13] = y;
155
+ result[14] = z;
125
156
  result[15] = 1.0;
126
157
  return result;
127
158
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ellipsoid-transform.js","sourceRoot":"","sources":["../../src/ellipsoid-helpers/ellipsoid-transform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ellipsoid-transform.js","sourceRoot":"","sources":["../../src/ellipsoid-helpers/ellipsoid-transform.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
1
  import type { Ellipsoid } from "../ellipsoid.js";
2
2
  export declare function scaleToGeodeticSurface(cartesian: number[], ellipsoid: Ellipsoid, result?: number[]): number[];
3
+ /** Original numeric commit: application setters cannot overwrite remaining scratch ordinates. */
4
+ export declare function writeResult(result: number[], x: number, y: number, z: number): number[];
3
5
  //# sourceMappingURL=scale-to-geodetic-surface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scale-to-geodetic-surface.d.ts","sourceRoot":"","sources":["../../src/ellipsoid-helpers/scale-to-geodetic-surface.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,SAAS,EAAC,wBAAqB;AAS5C,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EAAE,EACnB,SAAS,EAAE,SAAS,EACpB,MAAM,GAAE,MAAM,EAAO,GACpB,MAAM,EAAE,CAuFV"}
1
+ {"version":3,"file":"scale-to-geodetic-surface.d.ts","sourceRoot":"","sources":["../../src/ellipsoid-helpers/scale-to-geodetic-surface.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAC,SAAS,EAAC,wBAAqB;AAS5C,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EAAE,EACnB,SAAS,EAAE,SAAS,EACpB,MAAM,GAAE,MAAM,EAAO,GACpB,MAAM,EAAE,CAwGV;AAED,iGAAiG;AACjG,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAYvF"}
@@ -1,8 +1,10 @@
1
1
  // math.gl
2
- // SPDX-License-Identifier: MIT and Apache-2.0
3
- // Copyright (c) vis.gl contributors
2
+ // SPDX-License-Identifier: MIT AND Apache-2.0
3
+ // SPDX-FileCopyrightText: Copyright 2011-2018 CesiumJS Contributors
4
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
5
+ // SPDX-FileComment: Derived from Cesium. See the repository LICENSE for upstream attribution and Apache-2.0 terms. Original math.gl follow-up bounds Newton iteration and commits numeric components without a temporary array.
4
6
  /* eslint-disable */
5
- import { Vector3, _MathUtils } from '@math.gl/core';
7
+ import { Vector3, _MathUtils, isArray } from '@math.gl/core';
6
8
  const scratchVector = new Vector3();
7
9
  const scaleToGeodeticSurfaceIntersection = new Vector3();
8
10
  const scaleToGeodeticSurfaceGradient = new Vector3();
@@ -11,10 +13,15 @@ const scaleToGeodeticSurfaceGradient = new Vector3();
11
13
  // at the center of the ellipsoid, this function returns undefined.
12
14
  export function scaleToGeodeticSurface(cartesian, ellipsoid, result = []) {
13
15
  const { oneOverRadii, oneOverRadiiSquared, centerToleranceSquared } = ellipsoid;
14
- scratchVector.from(cartesian);
15
- const positionX = scratchVector.x;
16
- const positionY = scratchVector.y;
17
- const positionZ = scratchVector.z;
16
+ // Snapshot numeric inputs before touching scratch or debug-mode vectors.
17
+ const object = cartesian;
18
+ const positionX = 'x' in cartesian ? object.x : cartesian[0];
19
+ const positionY = 'x' in cartesian ? object.y : cartesian[1];
20
+ const positionZ = 'x' in cartesian ? object.z : cartesian[2];
21
+ if (!Number.isFinite(positionX) || !Number.isFinite(positionY) || !Number.isFinite(positionZ)) {
22
+ return undefined;
23
+ }
24
+ scratchVector.set(positionX, positionY, positionZ);
18
25
  const oneOverRadiiX = oneOverRadii.x;
19
26
  const oneOverRadiiY = oneOverRadii.y;
20
27
  const oneOverRadiiZ = oneOverRadii.z;
@@ -25,15 +32,15 @@ export function scaleToGeodeticSurface(cartesian, ellipsoid, result = []) {
25
32
  const squaredNorm = x2 + y2 + z2;
26
33
  const ratio = Math.sqrt(1.0 / squaredNorm);
27
34
  // When very close to center or at center
28
- if (!Number.isFinite(ratio)) {
35
+ if (!Number.isFinite(ratio) || !Number.isFinite(squaredNorm)) {
29
36
  return undefined;
30
37
  }
31
38
  // As an initial approximation, assume that the radial intersection is the projection point.
32
39
  const intersection = scaleToGeodeticSurfaceIntersection;
33
- intersection.copy(cartesian).scale(ratio);
40
+ intersection.set(positionX, positionY, positionZ).scale(ratio);
34
41
  // If the position is near the center, the iteration will not converge.
35
42
  if (squaredNorm < centerToleranceSquared) {
36
- return intersection.to(result);
43
+ return writeResult(result, intersection.x, intersection.y, intersection.z);
37
44
  }
38
45
  const oneOverRadiiSquaredX = oneOverRadiiSquared.x;
39
46
  const oneOverRadiiSquaredY = oneOverRadiiSquared.y;
@@ -49,7 +56,8 @@ export function scaleToGeodeticSurface(cartesian, ellipsoid, result = []) {
49
56
  let yMultiplier;
50
57
  let zMultiplier;
51
58
  let func;
52
- do {
59
+ // Bound the original Newton iteration; unsupported inputs leave caller output untouched.
60
+ for (let iteration = 0; iteration < 64; iteration++) {
53
61
  lambda -= correction;
54
62
  xMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredX);
55
63
  yMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredY);
@@ -61,14 +69,39 @@ export function scaleToGeodeticSurface(cartesian, ellipsoid, result = []) {
61
69
  const yMultiplier3 = yMultiplier2 * yMultiplier;
62
70
  const zMultiplier3 = zMultiplier2 * zMultiplier;
63
71
  func = x2 * xMultiplier2 + y2 * yMultiplier2 + z2 * zMultiplier2 - 1.0;
72
+ if (!Number.isFinite(func))
73
+ return undefined;
74
+ if (Math.abs(func) <= _MathUtils.EPSILON12) {
75
+ // Numeric components avoid the former temporary multiplier array.
76
+ return writeResult(result, positionX * xMultiplier, positionY * yMultiplier, positionZ * zMultiplier);
77
+ }
64
78
  // "denominator" here refers to the use of this expression in the velocity and acceleration
65
79
  // computations in the sections to follow.
66
80
  const denominator = x2 * xMultiplier3 * oneOverRadiiSquaredX +
67
81
  y2 * yMultiplier3 * oneOverRadiiSquaredY +
68
82
  z2 * zMultiplier3 * oneOverRadiiSquaredZ;
69
83
  const derivative = -2.0 * denominator;
84
+ if (!Number.isFinite(derivative) || derivative === 0)
85
+ return undefined;
70
86
  correction = func / derivative;
71
- } while (Math.abs(func) > _MathUtils.EPSILON12);
72
- return scratchVector.scale([xMultiplier, yMultiplier, zMultiplier]).to(result);
87
+ if (!Number.isFinite(correction))
88
+ return undefined;
89
+ }
90
+ return undefined;
91
+ }
92
+ /** Original numeric commit: application setters cannot overwrite remaining scratch ordinates. */
93
+ export function writeResult(result, x, y, z) {
94
+ if (isArray(result)) {
95
+ result[0] = x;
96
+ result[1] = y;
97
+ result[2] = z;
98
+ }
99
+ else {
100
+ const point = result;
101
+ point.x = x;
102
+ point.y = y;
103
+ point.z = z;
104
+ }
105
+ return result;
73
106
  }
74
107
  //# sourceMappingURL=scale-to-geodetic-surface.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scale-to-geodetic-surface.js","sourceRoot":"","sources":["../../src/ellipsoid-helpers/scale-to-geodetic-surface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scale-to-geodetic-surface.js","sourceRoot":"","sources":["../../src/ellipsoid-helpers/scale-to-geodetic-surface.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /** The limb is center + axis1*cos(t) + axis2*sin(t), in input Cartesian units. */
2
+ export type EllipsoidHorizon = {
3
+ center: number[];
4
+ axis1: number[];
5
+ axis2: number[];
6
+ };
7
+ /** Axis-aligned ellipsoid queries, independent of viewport and vector classes. */
8
+ export declare class EllipsoidOccluder {
9
+ readonly radii: readonly number[];
10
+ readonly center: readonly number[];
11
+ constructor(radii: Readonly<ArrayLike<number>>, center?: Readonly<ArrayLike<number>>);
12
+ /** Nonnegative ray parameter interval, including tangency and inside-origin rays.
13
+ * Direction need not be normalized. Undefined is a true miss; never clamps a miss
14
+ * to the limb. Result is untouched on miss. Distances equal parameters only for
15
+ * unit directions. Zero direction is a miss.
16
+ */
17
+ intersectRay(origin: Readonly<ArrayLike<number>>, direction: Readonly<ArrayLike<number>>, result?: number[]): number[] | undefined;
18
+ /** True if the finite camera-to-point segment enters the solid interior.
19
+ * Surface contact/tangency alone is not occlusion. Works for elevated points;
20
+ * unlike a facing-normal test it does not discard visible points beyond the
21
+ * surface horizon. tolerance is a nonnegative scaled-space squared-radius margin.
22
+ */
23
+ isPointOccluded(camera: Readonly<ArrayLike<number>>, point: Readonly<ArrayLike<number>>, tolerance?: number): boolean;
24
+ /** Exact apparent limb ellipse for an exterior camera; undefined on/inside surface. */
25
+ getHorizon(camera: Readonly<ArrayLike<number>>): EllipsoidHorizon | undefined;
26
+ private scalePoint;
27
+ }
28
+ //# sourceMappingURL=ellipsoid-occluder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ellipsoid-occluder.d.ts","sourceRoot":"","sources":["../src/ellipsoid-occluder.ts"],"names":[],"mappings":"AAKA,kFAAkF;AAClF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,kFAAkF;AAClF,qBAAa,iBAAiB;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;gBAEvB,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,GAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAa;IAQ/F;;;;OAIG;IACH,YAAY,CACV,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EACnC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EACtC,MAAM,GAAE,MAAM,EAAW,GACxB,MAAM,EAAE,GAAG,SAAS;IA8BvB;;;;OAIG;IACH,eAAe,CACb,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EACnC,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAClC,SAAS,SAAQ,GAChB,OAAO;IAuBV,uFAAuF;IACvF,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,gBAAgB,GAAG,SAAS;IAuB7E,OAAO,CAAC,UAAU;CAKnB"}
@@ -0,0 +1,112 @@
1
+ // math.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
+ // SPDX-FileComment: Original scaled-space analytic geometry. Consumer requirements: https://github.com/keplergl/kepler.gl/pull/3557 and https://github.com/keplergl/kepler.gl/pull/3593. No implementation code copied.
5
+ /** Axis-aligned ellipsoid queries, independent of viewport and vector classes. */
6
+ export class EllipsoidOccluder {
7
+ constructor(radii, center = [0, 0, 0]) {
8
+ validateVector(radii);
9
+ validateVector(center);
10
+ if (Array.from(radii).some(value => value <= 0))
11
+ throw new RangeError('Radii must be positive');
12
+ this.radii = Object.freeze(Array.from(radii));
13
+ this.center = Object.freeze(Array.from(center));
14
+ }
15
+ /** Nonnegative ray parameter interval, including tangency and inside-origin rays.
16
+ * Direction need not be normalized. Undefined is a true miss; never clamps a miss
17
+ * to the limb. Result is untouched on miss. Distances equal parameters only for
18
+ * unit directions. Zero direction is a miss.
19
+ */
20
+ intersectRay(origin, direction, result = [0, 0]) {
21
+ validateVector(origin);
22
+ validateVector(direction);
23
+ const [x, y, z] = this.scalePoint(origin);
24
+ const dx = direction[0] / this.radii[0];
25
+ const dy = direction[1] / this.radii[1];
26
+ const dz = direction[2] / this.radii[2];
27
+ // Normalize in scaled space: avoid a tiny quadratic coefficient for ECEF rays.
28
+ const length = Math.hypot(dx, dy, dz);
29
+ if (length === 0 || !Number.isFinite(length))
30
+ return undefined;
31
+ const ux = dx / length, uy = dy / length, uz = dz / length;
32
+ const along = -(x * ux + y * uy + z * uz);
33
+ const perpendicular = Math.hypot(y * uz - z * uy, z * ux - x * uz, x * uy - y * ux);
34
+ if (perpendicular > 1)
35
+ return undefined;
36
+ const half = Math.sqrt((1 - perpendicular) * (1 + perpendicular));
37
+ let near = along - half;
38
+ let far = along + half;
39
+ // Recover the small root by the root product rather than subtracting large terms.
40
+ const radius = Math.hypot(x, y, z);
41
+ if (!Number.isFinite(radius))
42
+ throw new RangeError('Scaled origin magnitude must be finite');
43
+ if (half > 0 && along > 0 && far !== 0)
44
+ near = ((radius - 1) / far) * (radius + 1);
45
+ if (half > 0 && along < 0 && near !== 0)
46
+ far = ((radius - 1) / near) * (radius + 1);
47
+ if (far < 0)
48
+ return undefined;
49
+ result[0] = Math.max(0, Math.min(near, far)) / length;
50
+ result[1] = Math.max(0, far) / length;
51
+ return result;
52
+ }
53
+ /** True if the finite camera-to-point segment enters the solid interior.
54
+ * Surface contact/tangency alone is not occlusion. Works for elevated points;
55
+ * unlike a facing-normal test it does not discard visible points beyond the
56
+ * surface horizon. tolerance is a nonnegative scaled-space squared-radius margin.
57
+ */
58
+ isPointOccluded(camera, point, tolerance = 1e-12) {
59
+ validateVector(camera);
60
+ validateVector(point);
61
+ if (!Number.isFinite(tolerance) || tolerance < 0 || tolerance >= 1)
62
+ throw new RangeError('Tolerance must be in [0, 1)');
63
+ const a = this.scalePoint(camera);
64
+ const b = this.scalePoint(point);
65
+ const dx = b[0] - a[0], dy = b[1] - a[1], dz = b[2] - a[2];
66
+ const length = Math.hypot(dx, dy, dz);
67
+ if (!Number.isFinite(length))
68
+ throw new RangeError('Segment magnitude must be finite');
69
+ if (length === 0)
70
+ return Math.hypot(...a) ** 2 < 1 - tolerance;
71
+ const ux = dx / length, uy = dy / length, uz = dz / length;
72
+ const distance = Math.max(0, Math.min(length, -(a[0] * ux + a[1] * uy + a[2] * uz)));
73
+ return (Math.hypot(a[0] + distance * ux, a[1] + distance * uy, a[2] + distance * uz) ** 2 <
74
+ 1 - tolerance);
75
+ }
76
+ /** Exact apparent limb ellipse for an exterior camera; undefined on/inside surface. */
77
+ getHorizon(camera) {
78
+ validateVector(camera);
79
+ const scaled = this.scalePoint(camera);
80
+ const distance = Math.hypot(...scaled);
81
+ if (!Number.isFinite(distance))
82
+ throw new RangeError('Camera magnitude must be finite');
83
+ if (distance <= 1)
84
+ return undefined;
85
+ const normal = scaled.map(value => value / distance);
86
+ // Choose a basis away from parallel to the normal, including polar views.
87
+ const reference = Math.abs(normal[2]) < 0.9 ? [0, 0, 1] : [0, 1, 0];
88
+ const u = cross(normal, reference);
89
+ const uLength = Math.hypot(...u);
90
+ const v = cross(normal, u.map(value => value / uLength));
91
+ const radius = Math.sqrt((1 - 1 / distance) * (1 + 1 / distance));
92
+ return {
93
+ center: normal.map((value, i) => this.center[i] + (this.radii[i] * value) / distance),
94
+ axis1: u.map((value, i) => (this.radii[i] * radius * value) / uLength),
95
+ axis2: v.map((value, i) => this.radii[i] * radius * value)
96
+ };
97
+ }
98
+ scalePoint(point) {
99
+ const result = this.radii.map((radius, i) => (point[i] - this.center[i]) / radius);
100
+ if (!result.every(Number.isFinite))
101
+ throw new RangeError('Scaled coordinates must be finite');
102
+ return result;
103
+ }
104
+ }
105
+ function validateVector(vector) {
106
+ if (vector.length !== 3 || !Array.from(vector).every(Number.isFinite))
107
+ throw new RangeError('Expected three finite Cartesian components');
108
+ }
109
+ function cross(a, b) {
110
+ return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];
111
+ }
112
+ //# sourceMappingURL=ellipsoid-occluder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ellipsoid-occluder.js","sourceRoot":"","sources":["../src/ellipsoid-occluder.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ellipsoid-tangent-plane.d.ts","sourceRoot":"","sources":["../src/ellipsoid-tangent-plane.ts"],"names":[],"mappings":"AAOA,OAAO,EAAC,OAAO,EAAE,OAAO,EAAU,MAAM,eAAe,CAAC;AACxD,OAAO,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAC,SAAS,EAAC,uBAAoB;AAOtC,kEAAkE;AAClE,qBAAa,qBAAqB;IAChC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,MAAM,CAAQ;IAEtB;;;;;;OAMG;gBACS,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,GAAE,SAA2B;IAapE;;;;;;OAMG;IACH,4BAA4B,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAiB3E,IAAI,KAAK,IAAI,KAAK,CAEjB;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;CACF"}
1
+ {"version":3,"file":"ellipsoid-tangent-plane.d.ts","sourceRoot":"","sources":["../src/ellipsoid-tangent-plane.ts"],"names":[],"mappings":"AASA,OAAO,EAAC,OAAO,EAAE,OAAO,EAAU,MAAM,eAAe,CAAC;AACxD,OAAO,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAC,SAAS,EAAC,uBAAoB;AAOtC,kEAAkE;AAClE,qBAAa,qBAAqB;IAChC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,MAAM,CAAQ;IAEtB;;;;;;OAMG;gBACS,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,GAAE,SAA2B;IAapE;;;;;;OAMG;IACH,4BAA4B,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAiB3E,IAAI,KAAK,IAAI,KAAK,CAEjB;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;CACF"}
@@ -1,6 +1,8 @@
1
1
  // math.gl
2
- // SPDX-License-Identifier: MIT and Apache-2.0
3
- // Copyright (c) vis.gl contributors
2
+ // SPDX-License-Identifier: MIT AND Apache-2.0
3
+ // SPDX-FileCopyrightText: Copyright 2011-2018 CesiumJS Contributors
4
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
5
+ // SPDX-FileComment: Derived from Cesium. See the repository LICENSE for upstream attribution and Apache-2.0 terms.
4
6
  // This file is derived from the Cesium library under Apache 2 license
5
7
  // See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md
6
8
  import { Vector2, Vector3, Matrix4 } from '@math.gl/core';
@@ -1 +1 @@
1
- {"version":3,"file":"ellipsoid-tangent-plane.js","sourceRoot":"","sources":["../src/ellipsoid-tangent-plane.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,8CAA8C;AAC9C,oCAAoC;AAEpC,sEAAsE;AACtE,4FAA4F;AAE5F,OAAO,EAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AACxD,OAAO,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAC,SAAS,EAAC,uBAAoB;AAEtC,MAAM,aAAa,GAAG,IAAI,OAAO,EAAE,CAAC;AACpC,MAAM,YAAY,GAAG,IAAI,OAAO,EAAE,CAAC;AACnC,MAAM,kBAAkB,GAAG,IAAI,OAAO,EAAE,CAAC;AACzC,MAAM,sCAAsC,GAAG,IAAI,OAAO,EAAE,CAAC;AAE7D,kEAAkE;AAClE,MAAM,OAAO,qBAAqB;IAMhC;;;;;;OAMG;IACH,YAAY,MAAgB,EAAE,YAAuB,SAAS,CAAC,KAAK;QAClE,MAAM,eAAe,GAAG,SAAS,CAAC,sBAAsB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAEhF,MAAM,WAAW,GAAG,SAAS,CAAC,uBAAuB,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;QAE3F,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,MAAM,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAExE,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAClE,CAAC;IAED;;;;;;OAMG;IACH,4BAA4B,CAAC,SAAkB,EAAE,MAAgB;QAC/D,IAAI,CAAC,MAAM;YAAE,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAEpC,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,CACzD,SAAS,EACT,sCAAsC,CACvC,CAAC;QAEF,MAAM,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAE7B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;QACb,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;QACb,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;CACF"}
1
+ {"version":3,"file":"ellipsoid-tangent-plane.js","sourceRoot":"","sources":["../src/ellipsoid-tangent-plane.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,8CAA8C;AAC9C,oEAAoE;AACpE,4DAA4D;AAC5D,mHAAmH;AAEnH,sEAAsE;AACtE,4FAA4F;AAE5F,OAAO,EAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AACxD,OAAO,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAC,SAAS,EAAC,uBAAoB;AAEtC,MAAM,aAAa,GAAG,IAAI,OAAO,EAAE,CAAC;AACpC,MAAM,YAAY,GAAG,IAAI,OAAO,EAAE,CAAC;AACnC,MAAM,kBAAkB,GAAG,IAAI,OAAO,EAAE,CAAC;AACzC,MAAM,sCAAsC,GAAG,IAAI,OAAO,EAAE,CAAC;AAE7D,kEAAkE;AAClE,MAAM,OAAO,qBAAqB;IAMhC;;;;;;OAMG;IACH,YAAY,MAAgB,EAAE,YAAuB,SAAS,CAAC,KAAK;QAClE,MAAM,eAAe,GAAG,SAAS,CAAC,sBAAsB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAEhF,MAAM,WAAW,GAAG,SAAS,CAAC,uBAAuB,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;QAE3F,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,MAAM,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAExE,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAClE,CAAC;IAED;;;;;;OAMG;IACH,4BAA4B,CAAC,SAAkB,EAAE,MAAgB;QAC/D,IAAI,CAAC,MAAM;YAAE,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAEpC,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,CACzD,SAAS,EACT,sCAAsC,CACvC,CAAC;QAEF,MAAM,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAE7B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;QACb,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;QACb,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;CACF"}
@@ -1,4 +1,5 @@
1
1
  import { Vector3, Matrix4, NumericArray } from '@math.gl/core';
2
+ import type { SpheroidParameters } from '@math.gl/types';
2
3
  import type { AxisDirection } from "./ellipsoid-helpers/ellipsoid-transform.js";
3
4
  /**
4
5
  * A quadratic surface defined in Cartesian coordinates by the equation
@@ -8,6 +9,10 @@ import type { AxisDirection } from "./ellipsoid-helpers/ellipsoid-transform.js";
8
9
  export declare class Ellipsoid {
9
10
  /** An Ellipsoid instance initialized to the WGS84 standard. */
10
11
  static readonly WGS84: Ellipsoid;
12
+ /** Construct from two-axis geometry, including normalized projection ellipsoids.
13
+ * The equatorial X/Y radii are equal; no CRS or datum information is inferred.
14
+ */
15
+ static fromSpheroid(parameters: SpheroidParameters): Ellipsoid;
11
16
  readonly radii: Vector3;
12
17
  readonly radiiSquared: Vector3;
13
18
  readonly radiiToTheFourth: Vector3;
@@ -17,9 +22,15 @@ export declare class Ellipsoid {
17
22
  readonly maximumRadius: number;
18
23
  readonly centerToleranceSquared: number;
19
24
  readonly squaredXOverSquaredZ: number;
25
+ private readonly spheroidGeometry?;
20
26
  /** Creates an Ellipsoid from a Cartesian specifying the radii in x, y, and z directions. */
21
27
  constructor(x: number, y: number, z: number);
22
28
  constructor();
29
+ /** Return an owned geometry snapshot for a sphere or oblate spheroid.
30
+ * Triaxial, prolate and degenerate ellipsoids cannot be represented by this contract.
31
+ * Call during setup, outside coordinate loops.
32
+ */
33
+ toSpheroid(): SpheroidParameters;
23
34
  /** Compares this Ellipsoid against the provided Ellipsoid componentwise */
24
35
  equals(right: Ellipsoid): boolean;
25
36
  /** Creates a string representing this Ellipsoid in the format '(radii.x, radii.y, radii.z)'. */
@@ -1 +1 @@
1
- {"version":3,"file":"ellipsoid.d.ts","sourceRoot":"","sources":["../src/ellipsoid.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ellipsoid.d.ts","sourceRoot":"","sources":["../src/ellipsoid.ts"],"names":[],"mappings":"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"}