@math.gl/dggs 5.0.0-alpha.2 → 5.0.0-alpha.20

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 (110) hide show
  1. package/LICENSE +54 -87
  2. package/README.md +6 -1
  3. package/THIRD-PARTY-NOTICES.md +18 -0
  4. package/dist/a5-decoder.d.ts +4 -4
  5. package/dist/a5-decoder.d.ts.map +1 -1
  6. package/dist/a5-decoder.js +4 -4
  7. package/dist/a5-decoder.js.map +1 -1
  8. package/dist/a5.cjs +59 -2
  9. package/dist/a5.cjs.map +3 -3
  10. package/dist/a5.js +1 -1
  11. package/dist/a5.js.map +1 -1
  12. package/dist/converters/s2-to-obb-points.js +1 -1
  13. package/dist/converters/s2-to-obb-points.js.map +1 -1
  14. package/dist/converters/s2-to-region.js +1 -1
  15. package/dist/converters/s2-to-region.js.map +1 -1
  16. package/dist/dggs-decoder.d.ts +13 -4
  17. package/dist/dggs-decoder.d.ts.map +1 -1
  18. package/dist/dggs-decoder.js +25 -1
  19. package/dist/dggs-decoder.js.map +1 -1
  20. package/dist/expressions.cjs +637 -0
  21. package/dist/expressions.cjs.map +6 -0
  22. package/dist/expressions.d.ts +7 -0
  23. package/dist/expressions.d.ts.map +1 -0
  24. package/dist/expressions.js +32 -0
  25. package/dist/expressions.js.map +1 -0
  26. package/dist/geohash-decoder.d.ts +4 -4
  27. package/dist/geohash-decoder.d.ts.map +1 -1
  28. package/dist/geohash-decoder.js +4 -4
  29. package/dist/geohash-decoder.js.map +1 -1
  30. package/dist/geohash.cjs +75 -2
  31. package/dist/geohash.cjs.map +2 -2
  32. package/dist/geohash.js +1 -1
  33. package/dist/geohash.js.map +1 -1
  34. package/dist/h3-decoder.d.ts +4 -4
  35. package/dist/h3-decoder.d.ts.map +1 -1
  36. package/dist/h3-decoder.js +4 -4
  37. package/dist/h3-decoder.js.map +1 -1
  38. package/dist/h3.cjs +59 -2
  39. package/dist/h3.cjs.map +3 -3
  40. package/dist/h3.js +1 -1
  41. package/dist/h3.js.map +1 -1
  42. package/dist/index.cjs +281 -33
  43. package/dist/index.cjs.map +3 -3
  44. package/dist/index.d.ts +6 -3
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +5 -3
  47. package/dist/index.js.map +1 -1
  48. package/dist/plus-code-decoder.d.ts +4 -4
  49. package/dist/plus-code-decoder.d.ts.map +1 -1
  50. package/dist/plus-code-decoder.js +4 -4
  51. package/dist/plus-code-decoder.js.map +1 -1
  52. package/dist/plus-code.cjs +75 -2
  53. package/dist/plus-code.cjs.map +2 -2
  54. package/dist/plus-code.js +1 -1
  55. package/dist/plus-code.js.map +1 -1
  56. package/dist/quadkey-decoder.d.ts +4 -4
  57. package/dist/quadkey-decoder.d.ts.map +1 -1
  58. package/dist/quadkey-decoder.js +4 -4
  59. package/dist/quadkey-decoder.js.map +1 -1
  60. package/dist/quadkey.cjs +75 -2
  61. package/dist/quadkey.cjs.map +2 -2
  62. package/dist/quadkey.js +1 -1
  63. package/dist/quadkey.js.map +1 -1
  64. package/dist/s2-decoder.d.ts +14 -4
  65. package/dist/s2-decoder.d.ts.map +1 -1
  66. package/dist/s2-decoder.js +90 -22
  67. package/dist/s2-decoder.js.map +1 -1
  68. package/dist/s2-geometry/s2-geometry.d.ts +20 -0
  69. package/dist/s2-geometry/s2-geometry.d.ts.map +1 -1
  70. package/dist/s2-geometry/s2-geometry.js +128 -2
  71. package/dist/s2-geometry/s2-geometry.js.map +1 -1
  72. package/dist/s2-geometry/s2-to-boundary.js +1 -1
  73. package/dist/s2-geometry/s2-to-boundary.js.map +1 -1
  74. package/dist/s2-geometry/s2-token.d.ts +30 -0
  75. package/dist/s2-geometry/s2-token.d.ts.map +1 -1
  76. package/dist/s2-geometry/s2-token.js +74 -6
  77. package/dist/s2-geometry/s2-token.js.map +1 -1
  78. package/dist/s2.cjs +288 -23
  79. package/dist/s2.cjs.map +2 -2
  80. package/dist/s2.d.ts +4 -2
  81. package/dist/s2.d.ts.map +1 -1
  82. package/dist/s2.js +4 -3
  83. package/dist/s2.js.map +1 -1
  84. package/dist/unwrap-dggs-boundary.d.ts +12 -0
  85. package/dist/unwrap-dggs-boundary.d.ts.map +1 -0
  86. package/dist/unwrap-dggs-boundary.js +49 -0
  87. package/dist/unwrap-dggs-boundary.js.map +1 -0
  88. package/package.json +13 -6
  89. package/src/a5-decoder.ts +10 -5
  90. package/src/a5.ts +1 -1
  91. package/src/converters/s2-to-obb-points.ts +2 -2
  92. package/src/converters/s2-to-region.ts +1 -1
  93. package/src/dggs-decoder.ts +42 -5
  94. package/src/expressions.ts +37 -0
  95. package/src/geohash-decoder.ts +10 -5
  96. package/src/geohash.ts +1 -1
  97. package/src/h3-decoder.ts +10 -5
  98. package/src/h3.ts +1 -1
  99. package/src/index.ts +14 -3
  100. package/src/open-location-code.d.ts +3 -0
  101. package/src/plus-code-decoder.ts +10 -5
  102. package/src/plus-code.ts +1 -1
  103. package/src/quadkey-decoder.ts +10 -5
  104. package/src/quadkey.ts +1 -1
  105. package/src/s2-decoder.ts +92 -22
  106. package/src/s2-geometry/s2-geometry.ts +142 -2
  107. package/src/s2-geometry/s2-to-boundary.ts +1 -1
  108. package/src/s2-geometry/s2-token.ts +77 -6
  109. package/src/s2.ts +12 -3
  110. package/src/unwrap-dggs-boundary.ts +54 -0
package/dist/s2.cjs CHANGED
@@ -20,22 +20,117 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  var s2_exports = {};
21
21
  __export(s2_exports, {
22
22
  S2Decoder: () => S2Decoder,
23
- getS2ChildIndex: () => getS2ChildIndex
23
+ getS2BoundaryFlat: () => getS2BoundaryFlat,
24
+ getS2Bounds: () => getS2Bounds,
25
+ getS2ChildIndex: () => getS2ChildIndex,
26
+ getS2DescendantIndex: () => getS2DescendantIndex,
27
+ getS2IndexFromCell: () => getS2IndexFromCell,
28
+ getS2IndexFromToken: () => getS2IndexFromToken,
29
+ getS2Level: () => getS2Level,
30
+ getS2LngLat: () => getS2LngLat,
31
+ getS2TokenFromIndex: () => getS2TokenFromIndex,
32
+ isS2IndexValid: () => isS2IndexValid,
33
+ isS2TokenValid: () => isS2TokenValid
24
34
  });
25
35
  module.exports = __toCommonJS(s2_exports);
26
36
 
37
+ // dist/unwrap-dggs-boundary.js
38
+ function unwrapDGGSBoundary(boundary, referenceLongitude) {
39
+ const result = boundary.map(([longitude, latitude]) => [longitude, latitude]);
40
+ if (result.length === 0) {
41
+ return result;
42
+ }
43
+ let west = Infinity;
44
+ let east = -Infinity;
45
+ for (const [longitude] of boundary) {
46
+ west = Math.min(west, longitude);
47
+ east = Math.max(east, longitude);
48
+ }
49
+ if (east - west >= 360) {
50
+ return result;
51
+ }
52
+ let previous = referenceLongitude ?? result[0][0];
53
+ for (const point of result) {
54
+ const delta = point[0] - previous;
55
+ if (delta > 180) {
56
+ point[0] -= 360 * Math.ceil((delta - 180) / 360);
57
+ } else if (delta < -180) {
58
+ point[0] += 360 * Math.ceil((-delta - 180) / 360);
59
+ }
60
+ previous = point[0];
61
+ }
62
+ const first = boundary[0];
63
+ const last = boundary[boundary.length - 1];
64
+ if (first[0] === last[0] && first[1] === last[1]) {
65
+ if (Math.abs(result[result.length - 1][0] - result[0][0]) > 180) {
66
+ return boundary.map(([longitude, latitude]) => [longitude, latitude]);
67
+ }
68
+ result[result.length - 1] = [...result[0]];
69
+ }
70
+ return result;
71
+ }
72
+
73
+ // dist/dggs-decoder.js
74
+ function getDGGSCellBounds(boundary) {
75
+ let west = Infinity;
76
+ let south = Infinity;
77
+ let east = -Infinity;
78
+ let north = -Infinity;
79
+ for (const [longitude, latitude] of boundary) {
80
+ west = Math.min(west, longitude);
81
+ south = Math.min(south, latitude);
82
+ east = Math.max(east, longitude);
83
+ north = Math.max(north, latitude);
84
+ }
85
+ return [
86
+ [west, south],
87
+ [east, north]
88
+ ];
89
+ }
90
+ function withDGGSBoundaryOptions(decoder) {
91
+ const cellToBoundary = (cell, options) => {
92
+ const boundary = decoder.cellToBoundary(cell);
93
+ return (options == null ? void 0 : options.unwrap) ? unwrapDGGSBoundary(boundary, options.referenceLongitude) : boundary;
94
+ };
95
+ return {
96
+ ...decoder,
97
+ cellToBoundary,
98
+ cellToBoundaryFlat: (cell, options) => (options == null ? void 0 : options.unwrap) ? cellToBoundary(cell, options).flat() : decoder.cellToBoundaryFlat(cell),
99
+ cellToBounds: (cell, options) => {
100
+ const bounds = decoder.cellToBounds(cell);
101
+ if (!(options == null ? void 0 : options.unwrap) || bounds[1][0] - bounds[0][0] >= 360) {
102
+ return bounds;
103
+ }
104
+ const unwrapped = getDGGSCellBounds(cellToBoundary(cell, options));
105
+ unwrapped[0][1] = bounds[0][1];
106
+ unwrapped[1][1] = bounds[1][1];
107
+ return unwrapped;
108
+ }
109
+ };
110
+ }
111
+
27
112
  // dist/s2-geometry/s2-token.js
113
+ var MAXIMUM_TOKEN_LENGTH = 16;
114
+ var MAXIMUM_S2_INDEX = (1n << 64n) - 1n;
115
+ var VALID_LOWEST_ON_BITS = 0x1555555555555555n;
116
+ var MAXIMUM_LEVEL = 30;
28
117
  function getS2IndexFromToken(token) {
29
118
  if (token === "X") {
30
- token = "";
119
+ return 0n;
31
120
  }
32
- const paddedToken = token.padEnd(16, "0");
121
+ if (!isS2TokenValid(token)) {
122
+ throw new Error(`Invalid S2 token: ${token}`);
123
+ }
124
+ const paddedToken = token.padEnd(MAXIMUM_TOKEN_LENGTH, "0");
33
125
  return BigInt(`0x${paddedToken}`);
34
126
  }
35
127
  function getS2TokenFromIndex(cellId) {
36
128
  if (cellId === 0n) {
37
129
  return "X";
38
130
  }
131
+ if (!isS2IndexValid(cellId)) {
132
+ throw new Error(`Invalid S2 index: ${cellId}`);
133
+ }
39
134
  let numZeroDigits = countTrailingZeros(cellId);
40
135
  const remainder = numZeroDigits % 4;
41
136
  numZeroDigits = (numZeroDigits - remainder) / 4;
@@ -46,13 +141,43 @@ function getS2TokenFromIndex(cellId) {
46
141
  const zeroString = Array(17 - trailingZeroHexChars - hexString.length).join("0");
47
142
  return zeroString + hexString;
48
143
  }
144
+ function isS2IndexValid(s2Index) {
145
+ if (typeof s2Index !== "bigint" || s2Index <= 0n || s2Index > MAXIMUM_S2_INDEX) {
146
+ return false;
147
+ }
148
+ const face = s2Index >> 61n;
149
+ const lowestOnBit = s2Index & -s2Index;
150
+ return face < 6n && (lowestOnBit & VALID_LOWEST_ON_BITS) !== 0n;
151
+ }
152
+ function isS2TokenValid(token) {
153
+ if (typeof token !== "string" || !/^[0-9a-fA-F]{1,16}$/.test(token) || token.endsWith("0")) {
154
+ return false;
155
+ }
156
+ const paddedToken = token.padEnd(MAXIMUM_TOKEN_LENGTH, "0");
157
+ return isS2IndexValid(BigInt(`0x${paddedToken}`));
158
+ }
159
+ function getS2Level(s2Index) {
160
+ if (!isS2IndexValid(s2Index)) {
161
+ throw new Error(`Invalid S2 index: ${s2Index}`);
162
+ }
163
+ return (60 - countTrailingZeros(s2Index)) / 2;
164
+ }
49
165
  function getS2ChildIndex(s2Index, index) {
166
+ if (!isS2IndexValid(s2Index)) {
167
+ throw new Error(`Invalid S2 index: ${s2Index}`);
168
+ }
169
+ if (!Number.isInteger(index) || index < 0 || index > 3) {
170
+ throw new Error(`Invalid S2 child index: ${index}`);
171
+ }
172
+ if (getS2Level(s2Index) === MAXIMUM_LEVEL) {
173
+ throw new Error("Cannot subdivide an S2 leaf cell");
174
+ }
50
175
  const newLsb = lsb(s2Index) >> 2n;
51
176
  const childCellId = s2Index + BigInt(2 * index + 1 - 4) * newLsb;
52
177
  return childCellId;
53
178
  }
54
179
  function lsb(cellId) {
55
- return cellId & cellId + 1n;
180
+ return cellId & -cellId;
56
181
  }
57
182
  function countTrailingZeros(n) {
58
183
  let count = 0;
@@ -65,6 +190,9 @@ function countTrailingZeros(n) {
65
190
 
66
191
  // dist/s2-geometry/s2-geometry.js
67
192
  function getS2Cell(s2Index) {
193
+ if (!isS2IndexValid(s2Index)) {
194
+ throw new Error(`Invalid S2 index: ${s2Index}`);
195
+ }
68
196
  const key = toHilbertQuadkey(s2Index);
69
197
  const s2cell = fromHilbertQuadKey(key);
70
198
  return s2cell;
@@ -73,7 +201,36 @@ var FACE_BITS = 3;
73
201
  var MAX_LEVEL = 30;
74
202
  var POS_BITS = 2 * MAX_LEVEL + 1;
75
203
  var RADIAN_TO_DEGREE = 180 / Math.PI;
204
+ var HILBERT_MAP = {
205
+ a: [
206
+ [0, "d"],
207
+ [1, "a"],
208
+ [3, "b"],
209
+ [2, "a"]
210
+ ],
211
+ b: [
212
+ [2, "b"],
213
+ [1, "b"],
214
+ [3, "a"],
215
+ [0, "c"]
216
+ ],
217
+ c: [
218
+ [2, "c"],
219
+ [3, "d"],
220
+ [1, "c"],
221
+ [0, "b"]
222
+ ],
223
+ d: [
224
+ [0, "a"],
225
+ [3, "c"],
226
+ [1, "d"],
227
+ [2, "d"]
228
+ ]
229
+ };
76
230
  function fromHilbertQuadKey(hilbertQuadkey) {
231
+ if (!/^[0-5]\/[0-3]{0,30}$/.test(hilbertQuadkey)) {
232
+ throw new Error(`Invalid S2 Hilbert quadkey: ${hilbertQuadkey}`);
233
+ }
77
234
  const parts = hilbertQuadkey.split("/");
78
235
  const face = parseInt(parts[0], 10);
79
236
  const position = parts[1] || "";
@@ -106,6 +263,9 @@ function fromHilbertQuadKey(hilbertQuadkey) {
106
263
  return { face, ij: point, level };
107
264
  }
108
265
  function toHilbertQuadkey(id) {
266
+ if (!isS2IndexValid(id)) {
267
+ throw new Error(`Invalid S2 index: ${id}`);
268
+ }
109
269
  let bin = id.toString(2);
110
270
  while (bin.length < FACE_BITS + POS_BITS) {
111
271
  bin = "0" + bin;
@@ -124,6 +284,42 @@ function toHilbertQuadkey(id) {
124
284
  }
125
285
  return `${faceS}/${posS}`;
126
286
  }
287
+ function getS2IndexFromCell(s2Cell) {
288
+ const { face, ij, level } = s2Cell;
289
+ if (!Number.isInteger(face) || face < 0 || face > 5) {
290
+ throw new Error(`Invalid S2 face: ${face}`);
291
+ }
292
+ if (!Number.isInteger(level) || level < 0 || level > MAX_LEVEL) {
293
+ throw new Error(`Invalid S2 level: ${level}`);
294
+ }
295
+ const maximumCoordinate = 2 ** level;
296
+ if (!Number.isInteger(ij[0]) || !Number.isInteger(ij[1]) || ij[0] < 0 || ij[1] < 0 || ij[0] >= maximumCoordinate || ij[1] >= maximumCoordinate) {
297
+ throw new Error(`Invalid S2 IJ coordinates: ${ij[0]}, ${ij[1]}`);
298
+ }
299
+ const positions = getHilbertQuadList(ij[0], ij[1], level, face);
300
+ let s2Index = BigInt(face) << 61n;
301
+ for (let positionIndex = 0; positionIndex < positions.length; positionIndex++) {
302
+ const bitOffset = 59 - positionIndex * 2;
303
+ s2Index |= BigInt(positions[positionIndex]) << BigInt(bitOffset);
304
+ }
305
+ s2Index |= 1n << BigInt(60 - level * 2);
306
+ return s2Index;
307
+ }
308
+ function getS2DescendantIndex(rootIndex, relativeLevel, x, y) {
309
+ const rootCell = getS2Cell(rootIndex);
310
+ if (!Number.isInteger(relativeLevel) || relativeLevel < 0 || rootCell.level + relativeLevel > MAX_LEVEL) {
311
+ throw new Error(`Invalid S2 relative level: ${relativeLevel}`);
312
+ }
313
+ const divisionCount = 2 ** relativeLevel;
314
+ if (!Number.isInteger(x) || !Number.isInteger(y) || x < 0 || y < 0 || x >= divisionCount || y >= divisionCount) {
315
+ throw new Error(`Invalid S2 descendant coordinates: ${x}, ${y}`);
316
+ }
317
+ return getS2IndexFromCell({
318
+ face: rootCell.face,
319
+ ij: [rootCell.ij[0] * divisionCount + x, rootCell.ij[1] * divisionCount + y],
320
+ level: rootCell.level + relativeLevel
321
+ });
322
+ }
127
323
  function IJToST(ij, order, offsets) {
128
324
  const maxSize = 1 << order;
129
325
  return [(ij[0] + offsets[0]) / maxSize, (ij[1] + offsets[1]) / maxSize];
@@ -171,6 +367,19 @@ function rotateAndFlipQuadrant(n, point, rx, ry) {
171
367
  point[1] = x;
172
368
  }
173
369
  }
370
+ function getHilbertQuadList(x, y, level, face) {
371
+ let orientation = face % 2 === 1 ? "d" : "a";
372
+ const positions = [];
373
+ for (let bit = level - 1; bit >= 0; bit--) {
374
+ const mask = 1 << bit;
375
+ const quadrantX = (x & mask) !== 0 ? 1 : 0;
376
+ const quadrantY = (y & mask) !== 0 ? 1 : 0;
377
+ const [position, nextOrientation] = HILBERT_MAP[orientation][quadrantX * 2 + quadrantY];
378
+ positions.push(position);
379
+ orientation = nextOrientation;
380
+ }
381
+ return positions;
382
+ }
174
383
 
175
384
  // dist/s2-geometry/s2-to-boundary.js
176
385
  var MAX_RESOLUTION = 100;
@@ -218,17 +427,17 @@ function getS2GeoBoundsFromCell({ face, ij, level }) {
218
427
  }
219
428
 
220
429
  // dist/s2-decoder.js
221
- var S2Decoder = {
430
+ var S2Decoder = withDGGSBoundaryOptions({
222
431
  name: "s2",
223
432
  hasNumericRepresentation: true,
224
433
  cellColumnNames: ["s2", "s2Token", "s2_token", "s2Cell", "s2_cell", "s2CellId", "s2_cell_id"],
225
434
  tokenToCell: (s2Token) => getS2IndexFromToken(s2Token),
226
- cellToToken: (cell) => typeof cell === "string" ? cell : getS2TokenFromIndex(cell),
435
+ cellToToken: (cell) => getS2TokenFromIndex(getS2CellIndex(cell)),
227
436
  cellToLngLat: (cell) => getS2LngLat(cell),
228
437
  cellToBoundary: (cell) => getS2Boundary(cell),
229
438
  cellToBoundaryFlat: (cell) => getS2BoundaryFlat(cell),
230
439
  cellToBounds: (cell) => getS2Bounds(cell)
231
- };
440
+ });
232
441
  function getS2LngLat(cell) {
233
442
  const s2Index = getS2CellIndex(cell);
234
443
  const s2Cell = getS2Cell(s2Index);
@@ -252,27 +461,83 @@ function getS2Boundary(cell) {
252
461
  return boundary;
253
462
  }
254
463
  function getS2Bounds(cell) {
255
- const flatBoundary = getS2Boundary(cell);
256
- let xmin = Infinity;
257
- let ymin = Infinity;
258
- let xmax = -Infinity;
259
- let ymax = -Infinity;
260
- for (const [x, y] of flatBoundary) {
261
- if (x < xmin)
262
- xmin = x;
263
- if (x > xmax)
264
- xmax = x;
265
- if (y < ymin)
266
- ymin = y;
267
- if (y > ymax)
268
- ymax = y;
464
+ const s2Cell = getS2Cell(getS2CellIndex(cell));
465
+ if (s2Cell.level === 0) {
466
+ return getS2RootBounds(s2Cell.face);
269
467
  }
468
+ const offsets = [
469
+ [0, 0],
470
+ [0, 1],
471
+ [1, 1],
472
+ [1, 0]
473
+ ];
474
+ let west = Infinity;
475
+ let south = Infinity;
476
+ let east = -Infinity;
477
+ let north = -Infinity;
478
+ let previousLongitude;
479
+ for (const offset of offsets) {
480
+ const st = IJToST(s2Cell.ij, s2Cell.level, offset);
481
+ const uv = STToUV(st);
482
+ const [x, y, z] = FaceUVToXYZ(s2Cell.face, uv);
483
+ let [longitude, latitude] = XYZToLngLat([x, y, z]);
484
+ if (x === 0 && y === 0 && previousLongitude !== void 0) {
485
+ longitude = previousLongitude;
486
+ }
487
+ if (previousLongitude !== void 0) {
488
+ const longitudeDelta = longitude - previousLongitude;
489
+ longitude += longitudeDelta > 180 ? -360 : longitudeDelta < -180 ? 360 : 0;
490
+ }
491
+ previousLongitude = longitude;
492
+ west = Math.min(west, longitude);
493
+ south = Math.min(south, latitude);
494
+ east = Math.max(east, longitude);
495
+ north = Math.max(north, latitude);
496
+ }
497
+ const angularEpsilon = 2 * Number.EPSILON * 180 / Math.PI;
270
498
  return [
271
- [xmin, ymin],
272
- [xmax, ymax]
499
+ [west - angularEpsilon, Math.max(-90, south - angularEpsilon)],
500
+ [east + angularEpsilon, Math.min(90, north + angularEpsilon)]
273
501
  ];
274
502
  }
275
503
  function getS2CellIndex(cell) {
276
504
  return typeof cell === "bigint" ? cell : getS2IndexFromToken(cell);
277
505
  }
506
+ function getS2RootBounds(face) {
507
+ const polarLatitude = Math.asin(Math.sqrt(1 / 3)) * 180 / Math.PI;
508
+ switch (face) {
509
+ case 0:
510
+ return [
511
+ [-45, -45],
512
+ [45, 45]
513
+ ];
514
+ case 1:
515
+ return [
516
+ [45, -45],
517
+ [135, 45]
518
+ ];
519
+ case 2:
520
+ return [
521
+ [-180, polarLatitude],
522
+ [180, 90]
523
+ ];
524
+ case 3:
525
+ return [
526
+ [135, -45],
527
+ [225, 45]
528
+ ];
529
+ case 4:
530
+ return [
531
+ [-135, -45],
532
+ [-45, 45]
533
+ ];
534
+ case 5:
535
+ return [
536
+ [-180, -90],
537
+ [180, -polarLatitude]
538
+ ];
539
+ default:
540
+ throw new Error(`Invalid S2 face: ${face}`);
541
+ }
542
+ }
278
543
  //# sourceMappingURL=s2.cjs.map
package/dist/s2.cjs.map CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/s2.ts", "../src/s2-geometry/s2-token.ts", "../src/s2-geometry/s2-geometry.ts", "../src/s2-geometry/s2-to-boundary.ts", "../src/s2-decoder.ts"],
4
- "mappings": "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",
3
+ "sources": ["../src/s2.ts", "../src/unwrap-dggs-boundary.ts", "../src/dggs-decoder.ts", "../src/s2-geometry/s2-token.ts", "../src/s2-geometry/s2-geometry.ts", "../src/s2-geometry/s2-to-boundary.ts", "../src/s2-decoder.ts"],
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
package/dist/s2.d.ts CHANGED
@@ -1,3 +1,5 @@
1
- export { S2Decoder } from "./s2-decoder.js";
2
- export { getS2ChildIndex } from "./s2-geometry/s2-token.js";
1
+ export { S2Decoder, getS2Bounds, getS2LngLat, getS2BoundaryFlat } from "./s2-decoder.js";
2
+ export { getS2ChildIndex, getS2IndexFromToken, getS2Level, getS2TokenFromIndex, isS2IndexValid, isS2TokenValid } from "./s2-geometry/s2-token.js";
3
+ export { getS2DescendantIndex, getS2IndexFromCell } from "./s2-geometry/s2-geometry.js";
4
+ export type { S2Cell } from "./s2-geometry/s2-geometry.js";
3
5
  //# sourceMappingURL=s2.d.ts.map
package/dist/s2.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"s2.d.ts","sourceRoot":"","sources":["../src/s2.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,SAAS,EAAC,wBAAqB;AACvC,OAAO,EAAC,eAAe,EAAC,kCAA+B"}
1
+ {"version":3,"file":"s2.d.ts","sourceRoot":"","sources":["../src/s2.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAC,wBAAqB;AACpF,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,UAAU,EACV,mBAAmB,EACnB,cAAc,EACd,cAAc,EACf,kCAA+B;AAChC,OAAO,EAAC,oBAAoB,EAAE,kBAAkB,EAAC,qCAAkC;AACnF,YAAY,EAAC,MAAM,EAAC,qCAAkC"}
package/dist/s2.js CHANGED
@@ -1,6 +1,7 @@
1
1
  // math.gl
2
2
  // SPDX-License-Identifier: MIT
3
- // Copyright (c) vis.gl contributors
4
- export { S2Decoder } from "./s2-decoder.js";
5
- export { getS2ChildIndex } from "./s2-geometry/s2-token.js";
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
+ export { S2Decoder, getS2Bounds, getS2LngLat, getS2BoundaryFlat } from "./s2-decoder.js";
5
+ export { getS2ChildIndex, getS2IndexFromToken, getS2Level, getS2TokenFromIndex, isS2IndexValid, isS2TokenValid } from "./s2-geometry/s2-token.js";
6
+ export { getS2DescendantIndex, getS2IndexFromCell } from "./s2-geometry/s2-geometry.js";
6
7
  //# sourceMappingURL=s2.js.map
package/dist/s2.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"s2.js","sourceRoot":"","sources":["../src/s2.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,SAAS,EAAC,wBAAqB;AACvC,OAAO,EAAC,eAAe,EAAC,kCAA+B"}
1
+ {"version":3,"file":"s2.js","sourceRoot":"","sources":["../src/s2.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,4DAA4D;AAE5D,OAAO,EAAC,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAC,wBAAqB;AACpF,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,UAAU,EACV,mBAAmB,EACnB,cAAc,EACd,cAAc,EACf,kCAA+B;AAChC,OAAO,EAAC,oBAAoB,EAAE,kBAAkB,EAAC,qCAAkC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Copy a cell boundary, unwrapping longitudes across the antimeridian.
3
+ * @param boundary Open or closed longitude/latitude pairs in degrees.
4
+ * @param referenceLongitude Optional longitude near which to place the first vertex.
5
+ * @returns Fresh pairs with each longitude nearest the preceding longitude. Exact
6
+ * 180-degree ties retain their direction. Latitudes and vertex order are preserved.
7
+ * @remarks Explicit boundaries spanning at least 360 degrees and closed rings with
8
+ * net longitude winding are copied unchanged. Polar cells need additional topology
9
+ * handling. This helper neither splits polygons nor calculates geodesic edges.
10
+ */
11
+ export declare function unwrapDGGSBoundary(boundary: ReadonlyArray<readonly [number, number]>, referenceLongitude?: number): [number, number][];
12
+ //# sourceMappingURL=unwrap-dggs-boundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unwrap-dggs-boundary.d.ts","sourceRoot":"","sources":["../src/unwrap-dggs-boundary.ts"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAClD,kBAAkB,CAAC,EAAE,MAAM,GAC1B,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAoCpB"}
@@ -0,0 +1,49 @@
1
+ // math.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
+ /**
5
+ * Copy a cell boundary, unwrapping longitudes across the antimeridian.
6
+ * @param boundary Open or closed longitude/latitude pairs in degrees.
7
+ * @param referenceLongitude Optional longitude near which to place the first vertex.
8
+ * @returns Fresh pairs with each longitude nearest the preceding longitude. Exact
9
+ * 180-degree ties retain their direction. Latitudes and vertex order are preserved.
10
+ * @remarks Explicit boundaries spanning at least 360 degrees and closed rings with
11
+ * net longitude winding are copied unchanged. Polar cells need additional topology
12
+ * handling. This helper neither splits polygons nor calculates geodesic edges.
13
+ */
14
+ export function unwrapDGGSBoundary(boundary, referenceLongitude) {
15
+ const result = boundary.map(([longitude, latitude]) => [longitude, latitude]);
16
+ if (result.length === 0) {
17
+ return result;
18
+ }
19
+ let west = Infinity;
20
+ let east = -Infinity;
21
+ for (const [longitude] of boundary) {
22
+ west = Math.min(west, longitude);
23
+ east = Math.max(east, longitude);
24
+ }
25
+ if (east - west >= 360) {
26
+ return result;
27
+ }
28
+ let previous = referenceLongitude ?? result[0][0];
29
+ for (const point of result) {
30
+ const delta = point[0] - previous;
31
+ if (delta > 180) {
32
+ point[0] -= 360 * Math.ceil((delta - 180) / 360);
33
+ }
34
+ else if (delta < -180) {
35
+ point[0] += 360 * Math.ceil((-delta - 180) / 360);
36
+ }
37
+ previous = point[0];
38
+ }
39
+ const first = boundary[0];
40
+ const last = boundary[boundary.length - 1];
41
+ if (first[0] === last[0] && first[1] === last[1]) {
42
+ if (Math.abs(result[result.length - 1][0] - result[0][0]) > 180) {
43
+ return boundary.map(([longitude, latitude]) => [longitude, latitude]);
44
+ }
45
+ result[result.length - 1] = [...result[0]];
46
+ }
47
+ return result;
48
+ }
49
+ //# sourceMappingURL=unwrap-dggs-boundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unwrap-dggs-boundary.js","sourceRoot":"","sources":["../src/unwrap-dggs-boundary.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,4DAA4D;AAE5D;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAkD,EAClD,kBAA2B;IAE3B,MAAM,MAAM,GAAuB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClG,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,IAAI,GAAG,QAAQ,CAAC;IACpB,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC;IACrB,KAAK,MAAM,CAAC,SAAS,CAAC,IAAI,QAAQ,EAAE,CAAC;QACnC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACjC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,QAAQ,GAAG,kBAAkB,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;QAClC,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;YAChB,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QACnD,CAAC;aAAM,IAAI,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC;YACxB,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QACpD,CAAC;QACD,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3C,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;YAChE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;QACxE,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "publishConfig": {
7
7
  "access": "public"
8
8
  },
9
- "version": "5.0.0-alpha.2",
9
+ "version": "5.0.0-alpha.20",
10
10
  "keywords": [
11
11
  "javascript",
12
12
  "math",
@@ -61,20 +61,27 @@
61
61
  "types": "./dist/s2.d.ts",
62
62
  "import": "./dist/s2.js",
63
63
  "require": "./dist/s2.cjs"
64
+ },
65
+ "./expressions": {
66
+ "types": "./dist/expressions.d.ts",
67
+ "import": "./dist/expressions.js",
68
+ "require": "./dist/expressions.cjs"
64
69
  }
65
70
  },
66
71
  "files": [
67
72
  "dist",
68
- "src"
73
+ "src",
74
+ "LICENSE",
75
+ "THIRD-PARTY-NOTICES.md"
69
76
  ],
70
77
  "dependencies": {
71
- "@math.gl/types": "5.0.0-alpha.2",
72
- "a5-js": "^0.5.0",
73
- "h3-js": "^4.2.1",
78
+ "@math.gl/core": "5.0.0-alpha.20",
79
+ "a5-js": "^0.10.0",
80
+ "h3-js": "^4.5.0",
74
81
  "open-location-code": "^1.0.3"
75
82
  },
76
83
  "devDependencies": {
77
84
  "s2-geometry": "^1.2.10"
78
85
  },
79
- "gitHead": "1b21ecbe8872e604b1b362fe09ab59240bd5b41e"
86
+ "gitHead": "ad8c205a98e5e057d9055300b1a71f422b275c73"
80
87
  }
package/src/a5-decoder.ts CHANGED
@@ -1,13 +1,18 @@
1
1
  // math.gl
2
2
  // SPDX-License-Identifier: MIT
3
- // Copyright (c) vis.gl contributors
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
4
 
5
5
  import {cellToBoundary, cellToLonLat, hexToU64, u64ToHex} from 'a5-js';
6
- import {type Bounds2D} from '@math.gl/types';
7
- import {type DGGSCell, type DGGSDecoder, getDGGSCellBounds} from './dggs-decoder';
6
+ import {type Bounds2D} from '@math.gl/core/types';
7
+ import {
8
+ withDGGSBoundaryOptions,
9
+ type DGGSCell,
10
+ type DGGSDecoder,
11
+ getDGGSCellBounds
12
+ } from './dggs-decoder';
8
13
 
9
14
  /** Lightweight cell geometry decoder for the A5 pentagonal DGGS. */
10
- export const A5Decoder = {
15
+ export const A5Decoder = withDGGSBoundaryOptions({
11
16
  name: 'a5',
12
17
  hasNumericRepresentation: true,
13
18
  cellColumnNames: [
@@ -27,7 +32,7 @@ export const A5Decoder = {
27
32
  cellToBoundary: (cell: DGGSCell): [number, number][] => getA5Boundary(cell),
28
33
  cellToBoundaryFlat: (cell: DGGSCell): number[] => getA5Boundary(cell).flat(),
29
34
  cellToBounds: (cell: DGGSCell): Bounds2D => getDGGSCellBounds(getA5Boundary(cell))
30
- } as const satisfies DGGSDecoder;
35
+ } as const satisfies DGGSDecoder);
31
36
 
32
37
  function getA5CellIndex(cell: DGGSCell): bigint {
33
38
  return typeof cell === 'bigint' ? cell : hexToU64(removeHexPrefix(cell));
package/src/a5.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  // math.gl
2
2
  // SPDX-License-Identifier: MIT
3
- // Copyright (c) vis.gl contributors
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
4
 
5
5
  export {A5Decoder} from './a5-decoder';
@@ -1,12 +1,12 @@
1
1
  // math.gl
2
2
  // SPDX-License-Identifier: MIT
3
- // Copyright (c) vis.gl contributors
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
4
 
5
5
  import {getS2Cell} from '../s2-geometry/s2-geometry';
6
6
  import {getS2Region} from './s2-to-region';
7
7
  import {getS2IndexFromToken} from '../s2-geometry/s2-token';
8
8
 
9
- // import {OrientedBoundingBox, makeOrientedBoundingBoxFromPoints} from '@math.gl/culling';
9
+ // import {OrientedBoundingBox, makeOrientedBoundingBoxFromPoints} from '@math.gl/geometry/culling';
10
10
  // import {Ellipsoid} from '@math.gl/geospatial';
11
11
 
12
12
  export type S2HeightInfo = {
@@ -1,6 +1,6 @@
1
1
  // math.gl
2
2
  // SPDX-License-Identifier: MIT
3
- // Copyright (c) vis.gl contributors
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
4
 
5
5
  import {getS2GeoBoundsFromCell} from '../s2-geometry/s2-to-boundary';
6
6