@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/dist/ellipsoid.js CHANGED
@@ -1,15 +1,19 @@
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 uses stable atan2 latitude and numeric cartographic output.
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
  /* eslint-disable */
7
9
  import { Vector3, Matrix4, assert, equals, _MathUtils } from '@math.gl/core';
10
+ import { spheroidToCartesian, cartesianToSpheroid } from '@math.gl/core/spheroid';
8
11
  import * as vec3 from '@math.gl/core/vec3';
9
12
  import { WGS84_RADIUS_X, WGS84_RADIUS_Y, WGS84_RADIUS_Z } from "./constants.js";
10
- import { fromCartographicToRadians, toCartographicFromRadians } from "./type-utils.js";
13
+ import { fromCartographicToRadians, toCartographicFromRadiansComponents } from "./type-utils.js";
11
14
  import { localFrameToFixedFrame } from "./ellipsoid-helpers/ellipsoid-transform.js";
12
- import { scaleToGeodeticSurface } from "./ellipsoid-helpers/scale-to-geodetic-surface.js";
15
+ import { scaleToGeodeticSurface, writeResult } from "./ellipsoid-helpers/scale-to-geodetic-surface.js";
16
+ const spheroidScratch = { x: 0, y: 0, z: 0 };
13
17
  const scratchVector = new Vector3();
14
18
  const scratchNormal = new Vector3();
15
19
  const scratchK = new Vector3();
@@ -22,6 +26,14 @@ const scratchCartesian = new Vector3();
22
26
  * to represent the shape of planetary bodies.
23
27
  */
24
28
  export class Ellipsoid {
29
+ /** Construct from two-axis geometry, including normalized projection ellipsoids.
30
+ * The equatorial X/Y radii are equal; no CRS or datum information is inferred.
31
+ */
32
+ static fromSpheroid(parameters) {
33
+ const { semiMajorAxis, semiMinorAxis } = parameters;
34
+ validateSpheroid(semiMajorAxis, semiMinorAxis);
35
+ return new Ellipsoid(semiMajorAxis, semiMajorAxis, semiMinorAxis);
36
+ }
25
37
  constructor(x = 0.0, y = 0.0, z = 0.0) {
26
38
  this.centerToleranceSquared = _MathUtils.EPSILON1;
27
39
  assert(x >= 0.0);
@@ -37,8 +49,30 @@ export class Ellipsoid {
37
49
  if (this.radiiSquared.z !== 0) {
38
50
  this.squaredXOverSquaredZ = this.radiiSquared.x / this.radiiSquared.z;
39
51
  }
52
+ // Setup only: retain the three-radius path for unsupported/lossy shapes.
53
+ if (x === y &&
54
+ z > 0 &&
55
+ z <= x &&
56
+ Number.isFinite(this.radiiSquared.x) &&
57
+ this.radiiSquared.z > 0)
58
+ this.spheroidGeometry = Object.freeze({
59
+ semiMajorAxis: x,
60
+ semiMinorAxis: z,
61
+ eccentricitySquared: 1 - this.radiiSquared.z / this.radiiSquared.x
62
+ });
40
63
  Object.freeze(this);
41
64
  }
65
+ /** Return an owned geometry snapshot for a sphere or oblate spheroid.
66
+ * Triaxial, prolate and degenerate ellipsoids cannot be represented by this contract.
67
+ * Call during setup, outside coordinate loops.
68
+ */
69
+ toSpheroid() {
70
+ const { x, y, z } = this.radii;
71
+ if (x !== y)
72
+ throw new Error('Spheroid requires equal X/Y radii');
73
+ validateSpheroid(x, z);
74
+ return Object.freeze({ semiMajorAxis: x, semiMinorAxis: z });
75
+ }
42
76
  /** Compares this Ellipsoid against the provided Ellipsoid componentwise */
43
77
  equals(right) {
44
78
  return this === right || Boolean(right && this.radii.equals(right.radii));
@@ -48,6 +82,15 @@ export class Ellipsoid {
48
82
  return this.radii.toString();
49
83
  }
50
84
  cartographicToCartesian(cartographic, result = [0, 0, 0]) {
85
+ if (this.spheroidGeometry) {
86
+ const llh = fromCartographicToRadians(cartographic, scratchCartesian);
87
+ spheroidScratch.x = llh[0];
88
+ spheroidScratch.y = llh[1];
89
+ spheroidScratch.z = llh[2];
90
+ if (!spheroidToCartesian(spheroidScratch, this.spheroidGeometry))
91
+ return undefined;
92
+ return writeResult(result, spheroidScratch.x, spheroidScratch.y, spheroidScratch.z);
93
+ }
51
94
  const normal = scratchNormal;
52
95
  const k = scratchK;
53
96
  const [, , height] = cartographic;
@@ -60,7 +103,28 @@ export class Ellipsoid {
60
103
  return k.to(result);
61
104
  }
62
105
  cartesianToCartographic(cartesian, result = [0, 0, 0]) {
63
- scratchCartesian.from(cartesian);
106
+ const object = cartesian;
107
+ const x = 'x' in cartesian ? object.x : cartesian[0];
108
+ const y = 'x' in cartesian ? object.y : cartesian[1];
109
+ const z = 'x' in cartesian ? object.z : cartesian[2];
110
+ if (!Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(z))
111
+ return undefined;
112
+ // Sphere/oblate conversion chooses the unique nearest normal, including interiors.
113
+ // Preserve legacy geometry magnitude limits; prolate/triaxial keep their own kernel.
114
+ if (this.spheroidGeometry &&
115
+ Number.isFinite(x * x + y * y + z * z) &&
116
+ Number.isFinite(this.oneOverRadiiSquared.x) &&
117
+ Number.isFinite(this.oneOverRadiiSquared.z)) {
118
+ spheroidScratch.x = x;
119
+ spheroidScratch.y = y;
120
+ spheroidScratch.z = z;
121
+ if (!cartesianToSpheroid(spheroidScratch, this.spheroidGeometry))
122
+ return undefined;
123
+ // Preserve signed-zero atan2 at exact poles rather than projection's canonical zero.
124
+ const longitude = x === 0 && y === 0 ? Math.atan2(y, x) : spheroidScratch.x;
125
+ return toCartographicFromRadiansComponents(longitude, spheroidScratch.y, spheroidScratch.z, result);
126
+ }
127
+ scratchCartesian.set(x, y, z);
64
128
  const point = this.scaleToGeodeticSurface(scratchCartesian, scratchPosition);
65
129
  if (!point) {
66
130
  return undefined;
@@ -69,9 +133,10 @@ export class Ellipsoid {
69
133
  const h = scratchHeight;
70
134
  h.copy(scratchCartesian).subtract(point);
71
135
  const longitude = Math.atan2(normal.y, normal.x);
72
- const latitude = Math.asin(normal.z);
136
+ // atan2 retains latitude precision when the normal is almost vertical.
137
+ const latitude = Math.atan2(normal.z, Math.hypot(normal.x, normal.y));
73
138
  const height = Math.sign(vec3.dot(h, scratchCartesian)) * vec3.length(h);
74
- return toCartographicFromRadians([longitude, latitude, height], result);
139
+ return toCartographicFromRadiansComponents(longitude, latitude, height, result);
75
140
  }
76
141
  eastNorthUpToFixedFrame(origin, result = new Matrix4()) {
77
142
  return localFrameToFixedFrame(this, 'east', 'north', 'up', origin, result);
@@ -142,4 +207,9 @@ export class Ellipsoid {
142
207
  }
143
208
  /** An Ellipsoid instance initialized to the WGS84 standard. */
144
209
  Ellipsoid.WGS84 = new Ellipsoid(WGS84_RADIUS_X, WGS84_RADIUS_Y, WGS84_RADIUS_Z);
210
+ // Original parameter adapter; conversion and surface kernels above retain Cesium attribution.
211
+ function validateSpheroid(a, b) {
212
+ if (!Number.isFinite(a) || !Number.isFinite(b) || a <= 0 || b <= 0 || b > a)
213
+ throw new Error('Spheroid requires finite positive axes with semiMinorAxis <= semiMajorAxis');
214
+ }
145
215
  //# sourceMappingURL=ellipsoid.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ellipsoid.js","sourceRoot":"","sources":["../src/ellipsoid.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ellipsoid.js","sourceRoot":"","sources":["../src/ellipsoid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { type GlobeBounds } from "./globe-horizon-bounds.js";
2
+ /** Equal-angle longitude/latitude grid: one world tile at level zero, north-origin Y. */
3
+ export type GeographicTile = {
4
+ x: number;
5
+ y: number;
6
+ level: number;
7
+ };
8
+ /** Inclusive integer tile ranges. Ranges are disjoint and ordered by minX. */
9
+ export type GeographicTileRange = {
10
+ minX: number;
11
+ maxX: number;
12
+ minY: number;
13
+ maxY: number;
14
+ };
15
+ /** Geographic degree bounds of an equal-angle tile, not Web Mercator XYZ. */
16
+ export declare function getGeographicTileBounds(tile: GeographicTile): GlobeBounds;
17
+ /** Address a point in degrees. Interior edges belong to the east/south tile. */
18
+ export declare function getGeographicTile(longitude: number, latitude: number, level: number): GeographicTile;
19
+ /** Cover a degree rectangle without enumerating tiles, including wrapped longitude.
20
+ * Positive-area queries exclude edge-only neighbors; zero-width/height queries use
21
+ * point-address edge ownership. Both +/-180 spellings of the seam stay explicit.
22
+ */
23
+ export declare function getGeographicTileRanges(bounds: GlobeBounds, level: number): GeographicTileRange[];
24
+ //# sourceMappingURL=geographic-tiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geographic-tiles.d.ts","sourceRoot":"","sources":["../src/geographic-tiles.ts"],"names":[],"mappings":"AAGA,OAAO,EAAmB,KAAK,WAAW,EAAC,kCAA+B;AAE1E,yFAAyF;AACzF,MAAM,MAAM,cAAc,GAAG;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAAC;AACnE,8EAA8E;AAC9E,MAAM,MAAM,mBAAmB,GAAG;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,CAAC;AAE3F,6EAA6E;AAC7E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,cAAc,GAAG,WAAW,CAUzE;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,cAAc,CAgBhB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,mBAAmB,EAAE,CA8BjG"}
@@ -0,0 +1,72 @@
1
+ // math.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
+ import { splitGlobeBounds } from "./globe-horizon-bounds.js";
5
+ /** Geographic degree bounds of an equal-angle tile, not Web Mercator XYZ. */
6
+ export function getGeographicTileBounds(tile) {
7
+ const size = gridSize(tile.level);
8
+ if (![tile.x, tile.y].every(v => Number.isInteger(v) && v >= 0 && v < size))
9
+ throw new RangeError('Tile coordinates must be integers inside the level grid');
10
+ return [
11
+ -180 + (360 * tile.x) / size,
12
+ 90 - (180 * (tile.y + 1)) / size,
13
+ -180 + (360 * (tile.x + 1)) / size,
14
+ 90 - (180 * tile.y) / size
15
+ ];
16
+ }
17
+ /** Address a point in degrees. Interior edges belong to the east/south tile. */
18
+ export function getGeographicTile(longitude, latitude, level) {
19
+ const size = gridSize(level);
20
+ if (!Number.isFinite(longitude) ||
21
+ longitude < -180 ||
22
+ longitude > 180 ||
23
+ !Number.isFinite(latitude) ||
24
+ latitude < -90 ||
25
+ latitude > 90)
26
+ throw new RangeError('Expected longitude in [-180, 180] and latitude in [-90, 90]');
27
+ return {
28
+ x: Math.min(size - 1, Math.floor(((longitude + 180) / 360) * size)),
29
+ y: Math.min(size - 1, Math.floor(((90 - latitude) / 180) * size)),
30
+ level
31
+ };
32
+ }
33
+ /** Cover a degree rectangle without enumerating tiles, including wrapped longitude.
34
+ * Positive-area queries exclude edge-only neighbors; zero-width/height queries use
35
+ * point-address edge ownership. Both +/-180 spellings of the seam stay explicit.
36
+ */
37
+ export function getGeographicTileRanges(bounds, level) {
38
+ const size = gridSize(level);
39
+ const split = splitGlobeBounds(bounds);
40
+ const positiveWidth = split.filter(([west, , east]) => east > west);
41
+ const rectangles = positiveWidth.length ? positiveWidth : split;
42
+ const intervals = rectangles
43
+ .map(([west, south, east, north]) => {
44
+ const start = getGeographicTile(west, north, level);
45
+ return {
46
+ minX: start.x,
47
+ maxX: west === east
48
+ ? start.x
49
+ : Math.max(start.x, Math.min(size - 1, Math.ceil(((east + 180) / 360) * size) - 1)),
50
+ minY: start.y,
51
+ maxY: south === north
52
+ ? start.y
53
+ : Math.max(start.y, Math.min(size - 1, Math.ceil(((90 - south) / 180) * size) - 1))
54
+ };
55
+ })
56
+ .sort((a, b) => a.minX - b.minX);
57
+ const result = [];
58
+ for (const range of intervals) {
59
+ const previous = result[result.length - 1];
60
+ if (previous && range.minX <= previous.maxX + 1)
61
+ previous.maxX = Math.max(previous.maxX, range.maxX);
62
+ else
63
+ result.push(range);
64
+ }
65
+ return result;
66
+ }
67
+ function gridSize(level) {
68
+ if (!Number.isInteger(level) || level < 0 || level > 30)
69
+ throw new RangeError('Level must be an integer from 0 through 30');
70
+ return 2 ** level;
71
+ }
72
+ //# sourceMappingURL=geographic-tiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geographic-tiles.js","sourceRoot":"","sources":["../src/geographic-tiles.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,4DAA4D;AAC5D,OAAO,EAAC,gBAAgB,EAAmB,kCAA+B;AAO1E,6EAA6E;AAC7E,MAAM,UAAU,uBAAuB,CAAC,IAAoB;IAC1D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACzE,MAAM,IAAI,UAAU,CAAC,yDAAyD,CAAC,CAAC;IAClF,OAAO;QACL,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;QAC5B,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI;QAChC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI;QAClC,EAAE,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;KAC3B,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,iBAAiB,CAC/B,SAAiB,EACjB,QAAgB,EAChB,KAAa;IAEb,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7B,IACE,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC3B,SAAS,GAAG,CAAC,GAAG;QAChB,SAAS,GAAG,GAAG;QACf,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC1B,QAAQ,GAAG,CAAC,EAAE;QACd,QAAQ,GAAG,EAAE;QAEb,MAAM,IAAI,UAAU,CAAC,6DAA6D,CAAC,CAAC;IACtF,OAAO;QACL,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QACnE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QACjE,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAmB,EAAE,KAAa;IACxE,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,AAAD,EAAG,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC;IAChE,MAAM,SAAS,GAAG,UAAU;SACzB,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;QAClC,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACpD,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,CAAC;YACb,IAAI,EACF,IAAI,KAAK,IAAI;gBACX,CAAC,CAAC,KAAK,CAAC,CAAC;gBACT,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACvF,IAAI,EAAE,KAAK,CAAC,CAAC;YACb,IAAI,EACF,KAAK,KAAK,KAAK;gBACb,CAAC,CAAC,KAAK,CAAC,CAAC;gBACT,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;SACxF,CAAC;IACJ,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,MAAM,GAA0B,EAAE,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC3C,IAAI,QAAQ,IAAI,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC;YAC7C,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;;YACjD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa;IAC7B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;QACrD,MAAM,IAAI,UAAU,CAAC,4CAA4C,CAAC,CAAC;IACrE,OAAO,CAAC,IAAI,KAAK,CAAC;AACpB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /** Degrees [west, south, east, north]; west > east means a dateline crossing. */
2
+ export type GlobeBounds = readonly [number, number, number, number];
3
+ /** Conservative geographic extent of every visible surface point on a sphere.
4
+ * Cartesian X points to longitude 0, Y to longitude 90, Z north. Covers the
5
+ * entire horizon cap, not just the screen: safe overfetch, not viewport-tight.
6
+ * Returns undefined on/inside the sphere. Radius and camera use matching units.
7
+ */
8
+ export declare function getGlobeHorizonBounds(camera: Readonly<ArrayLike<number>>, radius: number): GlobeBounds | undefined;
9
+ /** Split wrapped bounds into protocol-safe rectangles (e.g. EPSG:4326 WMS).
10
+ * No screen sampling, image caching or request policy is implied.
11
+ */
12
+ export declare function splitGlobeBounds(bounds: GlobeBounds): GlobeBounds[];
13
+ //# sourceMappingURL=globe-horizon-bounds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"globe-horizon-bounds.d.ts","sourceRoot":"","sources":["../src/globe-horizon-bounds.ts"],"names":[],"mappings":"AAKA,iFAAiF;AACjF,MAAM,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAEpE;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EACnC,MAAM,EAAE,MAAM,GACb,WAAW,GAAG,SAAS,CAsBzB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,EAAE,CAoBnE"}
@@ -0,0 +1,59 @@
1
+ // math.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
+ // SPDX-FileComment: Original spherical-cap extrema; requirements from https://github.com/keplergl/kepler.gl/pull/3557. No sampled viewport or upstream implementation copied.
5
+ /** Conservative geographic extent of every visible surface point on a sphere.
6
+ * Cartesian X points to longitude 0, Y to longitude 90, Z north. Covers the
7
+ * entire horizon cap, not just the screen: safe overfetch, not viewport-tight.
8
+ * Returns undefined on/inside the sphere. Radius and camera use matching units.
9
+ */
10
+ export function getGlobeHorizonBounds(camera, radius) {
11
+ if (camera.length !== 3 ||
12
+ !Array.from(camera).every(Number.isFinite) ||
13
+ !Number.isFinite(radius) ||
14
+ radius <= 0)
15
+ throw new RangeError('Expected a finite camera and positive sphere radius');
16
+ const distance = Math.hypot(camera[0], camera[1], camera[2]);
17
+ if (!Number.isFinite(distance))
18
+ throw new RangeError('Camera magnitude must be finite');
19
+ if (distance <= radius)
20
+ return undefined;
21
+ const latitude = Math.atan2(camera[2], Math.hypot(camera[0], camera[1]));
22
+ const longitude = Math.atan2(camera[1], camera[0]);
23
+ const angle = Math.acos(radius / distance);
24
+ const degrees = 180 / Math.PI;
25
+ // Outward padding protects tangent and near-pole limits from floating rounding.
26
+ const padding = 1e-10;
27
+ const south = Math.max(-90, (latitude - angle) * degrees - padding);
28
+ const north = Math.min(90, (latitude + angle) * degrees + padding);
29
+ if (Math.abs(latitude) + angle >= Math.PI / 2 - 1e-12)
30
+ return [-180, south, 180, north];
31
+ const extent = Math.asin(Math.min(1, Math.sin(angle) / Math.cos(latitude))) * degrees + padding;
32
+ return [wrap(longitude * degrees - extent), south, wrap(longitude * degrees + extent), north];
33
+ }
34
+ /** Split wrapped bounds into protocol-safe rectangles (e.g. EPSG:4326 WMS).
35
+ * No screen sampling, image caching or request policy is implied.
36
+ */
37
+ export function splitGlobeBounds(bounds) {
38
+ const [west, south, east, north] = bounds;
39
+ if (bounds.length !== 4 ||
40
+ !bounds.every(Number.isFinite) ||
41
+ west < -180 ||
42
+ west > 180 ||
43
+ east < -180 ||
44
+ east > 180 ||
45
+ south < -90 ||
46
+ north > 90 ||
47
+ south > north)
48
+ throw new RangeError('Invalid degree bounds');
49
+ return west <= east
50
+ ? [[west, south, east, north]]
51
+ : [
52
+ [west, south, 180, north],
53
+ [-180, south, east, north]
54
+ ];
55
+ }
56
+ function wrap(longitude) {
57
+ return ((((longitude + 180) % 360) + 360) % 360) - 180;
58
+ }
59
+ //# sourceMappingURL=globe-horizon-bounds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"globe-horizon-bounds.js","sourceRoot":"","sources":["../src/globe-horizon-bounds.ts"],"names":[],"mappings":"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"}