@math.gl/geospatial 5.0.0-alpha.12 → 5.0.0-alpha.14

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.
@@ -1 +1 @@
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;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"}
@@ -4,8 +4,10 @@
4
4
  // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
5
5
  // SPDX-FileComment: Derived from Cesium. See the repository LICENSE for upstream attribution and Apache-2.0 terms.
6
6
  import { Vector3, assert, equals as equalsEpsilon } from '@math.gl/core';
7
+ import { createLocalFrameBasis, eastNorthUpBasisFromDirections, localFrameToMatrix } from '@math.gl/core/local-frame';
7
8
  const EPSILON14 = 1e-14;
8
9
  const scratchOrigin = new Vector3();
10
+ const scratchBasis = createLocalFrameBasis();
9
11
  // Caclulate third axis from given two axii
10
12
  const VECTOR_PRODUCT_LOCAL_FRAME = {
11
13
  up: {
@@ -77,6 +79,28 @@ export function localFrameToFixedFrame(ellipsoid, firstAxis, secondAxis, thirdAx
77
79
  const origin = scratchOrigin.copy(cartesianOrigin);
78
80
  // If x and y are zero, assume origin is at a pole, which is a special case.
79
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
+ }
80
104
  if (atPole) {
81
105
  // Look up axis value and adjust
82
106
  const sign = Math.sign(origin.z);
@@ -108,22 +132,27 @@ export function localFrameToFixedFrame(ellipsoid, firstAxis, secondAxis, thirdAx
108
132
  secondAxisVector = scratchAxisVectors[secondAxis];
109
133
  thirdAxisVector = scratchAxisVectors[thirdAxis];
110
134
  }
111
- // TODO - assuming the result is column-major
112
- result[0] = firstAxisVector.x;
113
- result[1] = firstAxisVector.y;
114
- 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;
115
144
  result[3] = 0.0;
116
- result[4] = secondAxisVector.x;
117
- result[5] = secondAxisVector.y;
118
- result[6] = secondAxisVector.z;
145
+ result[4] = bx;
146
+ result[5] = by;
147
+ result[6] = bz;
119
148
  result[7] = 0.0;
120
- result[8] = thirdAxisVector.x;
121
- result[9] = thirdAxisVector.y;
122
- result[10] = thirdAxisVector.z;
149
+ result[8] = cx;
150
+ result[9] = cy;
151
+ result[10] = cz;
123
152
  result[11] = 0.0;
124
- result[12] = origin.x;
125
- result[13] = origin.y;
126
- result[14] = origin.z;
153
+ result[12] = x;
154
+ result[13] = y;
155
+ result[14] = z;
127
156
  result[15] = 1.0;
128
157
  return result;
129
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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"}
@@ -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.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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"}
package/dist/ellipsoid.js CHANGED
@@ -109,14 +109,12 @@ export class Ellipsoid {
109
109
  const z = 'x' in cartesian ? object.z : cartesian[2];
110
110
  if (!Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(z))
111
111
  return undefined;
112
- // Shared inverse is qualified for the unambiguous surface/exterior domain.
113
- // Interior/radial-fallback and non-spheroid behavior retain the Cesium kernel.
114
- const a = this.radii.x, b = this.radii.z;
115
- const normSquared = (x / a) ** 2 + (y / a) ** 2 + (z / b) ** 2;
112
+ // Sphere/oblate conversion chooses the unique nearest normal, including interiors.
113
+ // Preserve legacy geometry magnitude limits; prolate/triaxial keep their own kernel.
116
114
  if (this.spheroidGeometry &&
117
- Number.isFinite(normSquared) &&
118
- normSquared >= 1 - 16 * Number.EPSILON &&
119
- Number.isFinite(x * x + y * y + z * z)) {
115
+ Number.isFinite(x * x + y * y + z * z) &&
116
+ Number.isFinite(this.oneOverRadiiSquared.x) &&
117
+ Number.isFinite(this.oneOverRadiiSquared.z)) {
120
118
  spheroidScratch.x = x;
121
119
  spheroidScratch.y = y;
122
120
  spheroidScratch.z = z;
@@ -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":"AAAA,UAAU;AACV,8CAA8C;AAC9C,oEAAoE;AACpE,4DAA4D;AAC5D,0MAA0M;AAE1M,2EAA2E;AAC3E,4FAA4F;AAE5F,oBAAoB;AACpB,OAAO,EAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAe,MAAM,eAAe,CAAC;AAEzF,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EAEpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAC,uBAAoB;AAC3E,OAAO,EAAC,yBAAyB,EAAE,mCAAmC,EAAC,wBAAqB;AAG5F,OAAO,EAAC,sBAAsB,EAAC,mDAAgD;AAC/E,OAAO,EAAC,sBAAsB,EAAE,WAAW,EAAC,yDAAsD;AAElG,MAAM,eAAe,GAAG,EAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAC,CAAC;AAC3C,MAAM,aAAa,GAAG,IAAI,OAAO,EAAE,CAAC;AACpC,MAAM,aAAa,GAAG,IAAI,OAAO,EAAE,CAAC;AACpC,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAE,CAAC;AAC/B,MAAM,eAAe,GAAG,IAAI,OAAO,EAAE,CAAC;AACtC,MAAM,aAAa,GAAG,IAAI,OAAO,EAAE,CAAC;AACpC,MAAM,gBAAgB,GAAG,IAAI,OAAO,EAAE,CAAC;AAEvC;;;;GAIG;AACH,MAAM,OAAO,SAAS;IAIpB;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,UAA8B;QAChD,MAAM,EAAC,aAAa,EAAE,aAAa,EAAC,GAAG,UAAU,CAAC;QAClD,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;QAC/C,OAAO,IAAI,SAAS,CAAC,aAAa,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IACpE,CAAC;IAiBD,YAAY,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG;QAR5B,2BAAsB,GAAW,UAAU,CAAC,QAAQ,CAAC;QAS5D,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QACjB,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QACjB,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QAEjB,IAAI,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAElC,IAAI,CAAC,YAAY,GAAG,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAErD,IAAI,CAAC,gBAAgB,GAAG,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAEjF,IAAI,CAAC,YAAY,GAAG,IAAI,OAAO,CAC7B,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,EACzB,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,EACzB,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAC1B,CAAC;QAEF,IAAI,CAAC,mBAAmB,GAAG,IAAI,OAAO,CACpC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAC/B,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAC/B,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAChC,CAAC;QAEF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAEvC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAEvC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QACxE,CAAC;QAED,yEAAyE;QACzE,IACE,CAAC,KAAK,CAAC;YACP,CAAC,GAAG,CAAC;YACL,CAAC,IAAI,CAAC;YACN,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YACpC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC;YAEvB,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC;gBACpC,aAAa,EAAE,CAAC;gBAChB,aAAa,EAAE,CAAC;gBAChB,mBAAmB,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;aACnE,CAAC,CAAC;QACL,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED;;;OAGG;IACH,UAAU;QACR,MAAM,EAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAClE,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAC,aAAa,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAC,CAAC,CAAC;IAC7D,CAAC;IAED,2EAA2E;IAC3E,MAAM,CAAC,KAAgB;QACrB,OAAO,IAAI,KAAK,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,gGAAgG;IAChG,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/B,CAAC;IASD,uBAAuB,CAAC,YAAoC,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9E,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,yBAAyB,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;YACtE,eAAe,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3B,eAAe,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3B,eAAe,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,mBAAmB,CAAC,eAAe,EAAE,IAAI,CAAC,gBAAgB,CAAC;gBAAE,OAAO,SAAS,CAAC;YACnF,OAAO,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;QACtF,CAAC;QACD,MAAM,MAAM,GAAG,aAAa,CAAC;QAC7B,MAAM,CAAC,GAAG,QAAQ,CAAC;QAEnB,MAAM,CAAC,EAAE,AAAD,EAAG,MAAM,CAAC,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,iCAAiC,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAC7D,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAExC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QAEnB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAErB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEd,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IASD,uBAAuB,CAAC,SAAiC,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,SAAyD,CAAC;QACzE,MAAM,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACxF,mFAAmF;QACnF,qFAAqF;QACrF,IACE,IAAI,CAAC,gBAAgB;YACrB,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAC3C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAC3C,CAAC;YACD,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC;YACtB,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC;YACtB,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,mBAAmB,CAAC,eAAe,EAAE,IAAI,CAAC,gBAAgB,CAAC;gBAAE,OAAO,SAAS,CAAC;YACnF,qFAAqF;YACrF,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;YAC5E,OAAO,mCAAmC,CACxC,SAAS,EACT,eAAe,CAAC,CAAC,EACjB,eAAe,CAAC,CAAC,EACjB,MAAM,CACP,CAAC;QACJ,CAAC;QACD,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;QAE7E,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAEhE,MAAM,CAAC,GAAG,aAAa,CAAC;QACxB,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAEzC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QACjD,uEAAuE;QACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAEzE,OAAO,mCAAmC,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAClF,CAAC;IAOD,uBAAuB,CAAC,MAA8B,EAAE,MAAM,GAAG,IAAI,OAAO,EAAE;QAC5E,OAAO,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7E,CAAC;IAoBD,0EAA0E;IAC1E,gEAAgE;IAChE,sBAAsB,CACpB,SAAwB,EACxB,UAAyB,EACzB,SAAwB,EACxB,MAA8B,EAC9B,MAAM,GAAG,IAAI,OAAO,EAAE;QAEtB,OAAO,sBAAsB,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACxF,CAAC;IAMD,uBAAuB,CAAC,SAAiC,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3E,OAAO,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAC9D,CAAC;IAUD,iCAAiC,CAAC,YAAoC,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACxF,MAAM,yBAAyB,GAAG,yBAAyB,CAAC,YAAY,CAAC,CAAC;QAE1E,MAAM,SAAS,GAAG,yBAAyB,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,yBAAyB,CAAC,CAAC,CAAC,CAAC;QAE9C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEvC,aAAa;aACV,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;aAC7F,SAAS,EAAE,CAAC;QAEf,OAAO,aAAa,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAKD,qBAAqB,CAAC,SAAiC,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACzE,OAAO,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAC9F,CAAC;IAED;;0EAEsE;IACtE,sBAAsB,CAAC,SAAmB,EAAE,MAAiB;QAC3D,OAAO,sBAAsB,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACzD,CAAC;IAED;yDACqD;IACrD,wBAAwB,CAAC,SAAmB,EAAE,SAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACxE,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEhC,MAAM,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC;QACpC,MAAM,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC;QACpC,MAAM,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC;QACpC,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC;QAErD,MAAM,IAAI,GACR,GAAG;YACH,IAAI,CAAC,IAAI,CACP,SAAS,GAAG,SAAS,GAAG,mBAAmB,CAAC,CAAC;gBAC3C,SAAS,GAAG,SAAS,GAAG,mBAAmB,CAAC,CAAC;gBAC7C,SAAS,GAAG,SAAS,GAAG,mBAAmB,CAAC,CAAC,CAChD,CAAC;QAEJ,OAAO,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAC3D,CAAC;IAED;kEAC8D;IAC9D,8BAA8B,CAAC,QAAkB,EAAE,SAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7E,OAAO,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAC5E,CAAC;IAED;4DACwD;IACxD,gCAAgC,CAAC,QAAkB,EAAE,SAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/E,OAAO,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IACrE,CAAC;IAED,wFAAwF;IACxF,qCAAqC,CACnC,QAAkB,EAClB,SAAiB,CAAC,EAClB,SAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAE5B,oEAAoE;QACpE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAEzB,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAE9D,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC;YACzC,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;;AA7TD,+DAA+D;AAC/C,eAAK,GAAc,IAAI,SAAS,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC,AAA3E,CAA4E;AA+TnG,8FAA8F;AAC9F,SAAS,gBAAgB,CAAC,CAAS,EAAE,CAAS;IAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACzE,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;AAClG,CAAC"}
@@ -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":"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"}
@@ -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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"}