@math.gl/dggs 5.0.0-alpha.2
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.
- package/LICENSE +140 -0
- package/README.md +7 -0
- package/dist/a5-decoder.d.ts +15 -0
- package/dist/a5-decoder.d.ts.map +1 -0
- package/dist/a5-decoder.js +36 -0
- package/dist/a5-decoder.js.map +1 -0
- package/dist/a5.cjs +77 -0
- package/dist/a5.cjs.map +6 -0
- package/dist/a5.d.ts +2 -0
- package/dist/a5.d.ts.map +1 -0
- package/dist/a5.js +5 -0
- package/dist/a5.js.map +1 -0
- package/dist/converters/s2-to-obb-points.d.ts +15 -0
- package/dist/converters/s2-to-obb-points.d.ts.map +1 -0
- package/dist/converters/s2-to-obb-points.js +60 -0
- package/dist/converters/s2-to-obb-points.js.map +1 -0
- package/dist/converters/s2-to-region.d.ts +6 -0
- package/dist/converters/s2-to-region.d.ts.map +1 -0
- package/dist/converters/s2-to-region.js +27 -0
- package/dist/converters/s2-to-region.js.map +1 -0
- package/dist/dggs-decoder.d.ts +37 -0
- package/dist/dggs-decoder.d.ts.map +1 -0
- package/dist/dggs-decoder.js +28 -0
- package/dist/dggs-decoder.js.map +1 -0
- package/dist/geohash-decoder.d.ts +17 -0
- package/dist/geohash-decoder.d.ts.map +1 -0
- package/dist/geohash-decoder.js +88 -0
- package/dist/geohash-decoder.js.map +1 -0
- package/dist/geohash.cjs +108 -0
- package/dist/geohash.cjs.map +6 -0
- package/dist/geohash.d.ts +2 -0
- package/dist/geohash.d.ts.map +1 -0
- package/dist/geohash.js +5 -0
- package/dist/geohash.js.map +1 -0
- package/dist/h3-decoder.d.ts +15 -0
- package/dist/h3-decoder.d.ts.map +1 -0
- package/dist/h3-decoder.js +46 -0
- package/dist/h3-decoder.js.map +1 -0
- package/dist/h3.cjs +87 -0
- package/dist/h3.cjs.map +6 -0
- package/dist/h3.d.ts +2 -0
- package/dist/h3.d.ts.map +1 -0
- package/dist/h3.js +5 -0
- package/dist/h3.js.map +1 -0
- package/dist/index.cjs +615 -0
- package/dist/index.cjs.map +6 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +52 -0
- package/dist/index.js.map +1 -0
- package/dist/plus-code-decoder.d.ts +16 -0
- package/dist/plus-code-decoder.d.ts.map +1 -0
- package/dist/plus-code-decoder.js +50 -0
- package/dist/plus-code-decoder.js.map +1 -0
- package/dist/plus-code.cjs +88 -0
- package/dist/plus-code.cjs.map +6 -0
- package/dist/plus-code.d.ts +2 -0
- package/dist/plus-code.d.ts.map +1 -0
- package/dist/plus-code.js +5 -0
- package/dist/plus-code.js.map +1 -0
- package/dist/quadkey-decoder.d.ts +14 -0
- package/dist/quadkey-decoder.d.ts.map +1 -0
- package/dist/quadkey-decoder.js +86 -0
- package/dist/quadkey-decoder.js.map +1 -0
- package/dist/quadkey.cjs +106 -0
- package/dist/quadkey.cjs.map +6 -0
- package/dist/quadkey.d.ts +2 -0
- package/dist/quadkey.d.ts.map +1 -0
- package/dist/quadkey.js +5 -0
- package/dist/quadkey.js.map +1 -0
- package/dist/s2-decoder.d.ts +26 -0
- package/dist/s2-decoder.d.ts.map +1 -0
- package/dist/s2-decoder.js +76 -0
- package/dist/s2-decoder.js.map +1 -0
- package/dist/s2-geometry/s2-geometry.d.ts +13 -0
- package/dist/s2-geometry/s2-geometry.d.ts.map +1 -0
- package/dist/s2-geometry/s2-geometry.js +126 -0
- package/dist/s2-geometry/s2-geometry.js.map +1 -0
- package/dist/s2-geometry/s2-to-boundary.d.ts +14 -0
- package/dist/s2-geometry/s2-to-boundary.d.ts.map +1 -0
- package/dist/s2-geometry/s2-to-boundary.js +60 -0
- package/dist/s2-geometry/s2-to-boundary.js.map +1 -0
- package/dist/s2-geometry/s2-token.d.ts +13 -0
- package/dist/s2-geometry/s2-token.d.ts.map +1 -0
- package/dist/s2-geometry/s2-token.js +61 -0
- package/dist/s2-geometry/s2-token.js.map +1 -0
- package/dist/s2.cjs +278 -0
- package/dist/s2.cjs.map +6 -0
- package/dist/s2.d.ts +3 -0
- package/dist/s2.d.ts.map +1 -0
- package/dist/s2.js +6 -0
- package/dist/s2.js.map +1 -0
- package/package.json +80 -0
- package/src/a5-decoder.ts +42 -0
- package/src/a5.ts +5 -0
- package/src/converters/s2-to-obb-points.ts +78 -0
- package/src/converters/s2-to-region.ts +30 -0
- package/src/dggs-decoder.ts +71 -0
- package/src/geohash-decoder.ts +99 -0
- package/src/geohash.ts +5 -0
- package/src/h3-decoder.ts +53 -0
- package/src/h3.ts +5 -0
- package/src/index.ts +61 -0
- package/src/open-location-code.d.ts +19 -0
- package/src/plus-code-decoder.ts +56 -0
- package/src/plus-code.ts +5 -0
- package/src/quadkey-decoder.ts +98 -0
- package/src/quadkey.ts +5 -0
- package/src/s2-decoder.ts +87 -0
- package/src/s2-geometry/s2-geometry.ts +166 -0
- package/src/s2-geometry/s2-to-boundary.ts +76 -0
- package/src/s2-geometry/s2-token.ts +70 -0
- package/src/s2.ts +6 -0
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
// math.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT and ISC
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
export function getS2Cell(s2Index) {
|
|
5
|
+
const key = toHilbertQuadkey(s2Index);
|
|
6
|
+
const s2cell = fromHilbertQuadKey(key);
|
|
7
|
+
return s2cell;
|
|
8
|
+
}
|
|
9
|
+
//
|
|
10
|
+
// Functional Style
|
|
11
|
+
//
|
|
12
|
+
const FACE_BITS = 3;
|
|
13
|
+
const MAX_LEVEL = 30;
|
|
14
|
+
const POS_BITS = 2 * MAX_LEVEL + 1; // 61 (60 bits of data, 1 bit lsb marker)
|
|
15
|
+
const RADIAN_TO_DEGREE = 180 / Math.PI;
|
|
16
|
+
/*
|
|
17
|
+
Original function taken from deck.gl doesn't support the case of (face <= 5)
|
|
18
|
+
It's fixed here.
|
|
19
|
+
*/
|
|
20
|
+
export function fromHilbertQuadKey(hilbertQuadkey) {
|
|
21
|
+
const parts = hilbertQuadkey.split('/');
|
|
22
|
+
const face = parseInt(parts[0], 10);
|
|
23
|
+
const position = parts[1] || '';
|
|
24
|
+
const maxLevel = position.length;
|
|
25
|
+
let level = 0;
|
|
26
|
+
const point = [0, 0];
|
|
27
|
+
for (let i = maxLevel - 1; i >= 0; i--) {
|
|
28
|
+
level = maxLevel - i;
|
|
29
|
+
const bit = position[i];
|
|
30
|
+
let rx = 0;
|
|
31
|
+
let ry = 0;
|
|
32
|
+
if (bit === '1') {
|
|
33
|
+
ry = 1;
|
|
34
|
+
}
|
|
35
|
+
else if (bit === '2') {
|
|
36
|
+
rx = 1;
|
|
37
|
+
ry = 1;
|
|
38
|
+
}
|
|
39
|
+
else if (bit === '3') {
|
|
40
|
+
rx = 1;
|
|
41
|
+
}
|
|
42
|
+
const val = Math.pow(2, level - 1);
|
|
43
|
+
rotateAndFlipQuadrant(val, point, rx, ry);
|
|
44
|
+
point[0] += val * rx;
|
|
45
|
+
point[1] += val * ry;
|
|
46
|
+
}
|
|
47
|
+
if (face % 2 === 1) {
|
|
48
|
+
const t = point[0];
|
|
49
|
+
point[0] = point[1];
|
|
50
|
+
point[1] = t;
|
|
51
|
+
}
|
|
52
|
+
return { face, ij: point, level };
|
|
53
|
+
}
|
|
54
|
+
export function toHilbertQuadkey(id) {
|
|
55
|
+
let bin = id.toString(2);
|
|
56
|
+
while (bin.length < FACE_BITS + POS_BITS) {
|
|
57
|
+
// eslint-disable-next-line prefer-template
|
|
58
|
+
bin = '0' + bin;
|
|
59
|
+
}
|
|
60
|
+
// MUST come AFTER binstr has been left-padded with '0's
|
|
61
|
+
const lsbIndex = bin.lastIndexOf('1');
|
|
62
|
+
// substr(start, len)
|
|
63
|
+
// substring(start, end) // includes start, does not include end
|
|
64
|
+
const faceB = bin.substring(0, 3);
|
|
65
|
+
// posB will always be a multiple of 2 (or it's invalid)
|
|
66
|
+
const posB = bin.substring(3, lsbIndex);
|
|
67
|
+
const levelN = posB.length / 2;
|
|
68
|
+
const faceS = BigInt(`0b${faceB}`).toString(10);
|
|
69
|
+
let posS = '';
|
|
70
|
+
if (levelN !== 0) {
|
|
71
|
+
posS = BigInt(`0b${posB}`).toString(4);
|
|
72
|
+
while (posS.length < levelN) {
|
|
73
|
+
// eslint-disable-next-line prefer-template
|
|
74
|
+
posS = '0' + posS;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return `${faceS}/${posS}`;
|
|
78
|
+
}
|
|
79
|
+
export function IJToST(ij, order, offsets) {
|
|
80
|
+
const maxSize = 1 << order;
|
|
81
|
+
return [(ij[0] + offsets[0]) / maxSize, (ij[1] + offsets[1]) / maxSize];
|
|
82
|
+
}
|
|
83
|
+
function singleSTtoUV(st) {
|
|
84
|
+
if (st >= 0.5) {
|
|
85
|
+
return (1 / 3.0) * (4 * st * st - 1);
|
|
86
|
+
}
|
|
87
|
+
return (1 / 3.0) * (1 - 4 * (1 - st) * (1 - st));
|
|
88
|
+
}
|
|
89
|
+
export function STToUV(st) {
|
|
90
|
+
return [singleSTtoUV(st[0]), singleSTtoUV(st[1])];
|
|
91
|
+
}
|
|
92
|
+
export function FaceUVToXYZ(face, [u, v]) {
|
|
93
|
+
switch (face) {
|
|
94
|
+
case 0:
|
|
95
|
+
return [1, u, v];
|
|
96
|
+
case 1:
|
|
97
|
+
return [-u, 1, v];
|
|
98
|
+
case 2:
|
|
99
|
+
return [-u, -v, 1];
|
|
100
|
+
case 3:
|
|
101
|
+
return [-1, -v, -u];
|
|
102
|
+
case 4:
|
|
103
|
+
return [v, -1, -u];
|
|
104
|
+
case 5:
|
|
105
|
+
return [v, u, -1];
|
|
106
|
+
default:
|
|
107
|
+
throw new Error('Invalid face');
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
export function XYZToLngLat([x, y, z]) {
|
|
111
|
+
const lat = Math.atan2(z, Math.sqrt(x * x + y * y));
|
|
112
|
+
const lng = Math.atan2(y, x);
|
|
113
|
+
return [lng * RADIAN_TO_DEGREE, lat * RADIAN_TO_DEGREE];
|
|
114
|
+
}
|
|
115
|
+
function rotateAndFlipQuadrant(n, point, rx, ry) {
|
|
116
|
+
if (ry === 0) {
|
|
117
|
+
if (rx === 1) {
|
|
118
|
+
point[0] = n - 1 - point[0];
|
|
119
|
+
point[1] = n - 1 - point[1];
|
|
120
|
+
}
|
|
121
|
+
const x = point[0];
|
|
122
|
+
point[0] = point[1];
|
|
123
|
+
point[1] = x;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=s2-geometry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s2-geometry.js","sourceRoot":"","sources":["../../src/s2-geometry/s2-geometry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare function getS2GeoBounds(s2Index: bigint): Float64Array;
|
|
2
|
+
/**
|
|
3
|
+
* The S2 cell edge is curved: http://s2geometry.io/
|
|
4
|
+
* This is more prominent at lower levels
|
|
5
|
+
* resolution is the number of segments to generate per edge.
|
|
6
|
+
* We exponentially reduce resolution as level increases so it doesn't affect perf
|
|
7
|
+
* when there are a large number of cells
|
|
8
|
+
*/
|
|
9
|
+
export declare function getS2GeoBoundsFromCell({ face, ij, level }: {
|
|
10
|
+
face: number;
|
|
11
|
+
ij: [number, number];
|
|
12
|
+
level: number;
|
|
13
|
+
}): Float64Array;
|
|
14
|
+
//# sourceMappingURL=s2-to-boundary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s2-to-boundary.d.ts","sourceRoot":"","sources":["../../src/s2-geometry/s2-to-boundary.ts"],"names":[],"mappings":"AAQA,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAG5D;AAED;;;;;;GAMG;AAEH,wBAAgB,sBAAsB,CAAC,EACrC,IAAI,EACJ,EAAE,EACF,KAAK,EACN,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,YAAY,CA8Cf"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// math.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
import { IJToST, STToUV, FaceUVToXYZ, XYZToLngLat, getS2Cell } from "./s2-geometry.js";
|
|
5
|
+
const MAX_RESOLUTION = 100;
|
|
6
|
+
export function getS2GeoBounds(s2Index) {
|
|
7
|
+
const s2Cell = getS2Cell(s2Index);
|
|
8
|
+
return getS2GeoBoundsFromCell(s2Cell);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* The S2 cell edge is curved: http://s2geometry.io/
|
|
12
|
+
* This is more prominent at lower levels
|
|
13
|
+
* resolution is the number of segments to generate per edge.
|
|
14
|
+
* We exponentially reduce resolution as level increases so it doesn't affect perf
|
|
15
|
+
* when there are a large number of cells
|
|
16
|
+
*/
|
|
17
|
+
// eslint-disable-next-line max-statements
|
|
18
|
+
export function getS2GeoBoundsFromCell({ face, ij, level }) {
|
|
19
|
+
const offsets = [
|
|
20
|
+
[0, 0],
|
|
21
|
+
[0, 1],
|
|
22
|
+
[1, 1],
|
|
23
|
+
[1, 0],
|
|
24
|
+
[0, 0]
|
|
25
|
+
];
|
|
26
|
+
const resolution = Math.max(1, Math.ceil(MAX_RESOLUTION * Math.pow(2, -level)));
|
|
27
|
+
const result = new Float64Array(4 * resolution * 2 + 2);
|
|
28
|
+
let ptIndex = 0;
|
|
29
|
+
let prevLng = 0;
|
|
30
|
+
for (let i = 0; i < 4; i++) {
|
|
31
|
+
const offset = offsets[i].slice(0);
|
|
32
|
+
const nextOffset = offsets[i + 1];
|
|
33
|
+
const stepI = (nextOffset[0] - offset[0]) / resolution;
|
|
34
|
+
const stepJ = (nextOffset[1] - offset[1]) / resolution;
|
|
35
|
+
for (let j = 0; j < resolution; j++) {
|
|
36
|
+
offset[0] += stepI;
|
|
37
|
+
offset[1] += stepJ;
|
|
38
|
+
// Cell can be represented by coordinates IJ, ST, UV, XYZ
|
|
39
|
+
// http://s2geometry.io/devguide/s2cell_hierarchy#coordinate-systems
|
|
40
|
+
const st = IJToST(ij, level, offset);
|
|
41
|
+
const uv = STToUV(st);
|
|
42
|
+
const xyz = FaceUVToXYZ(face, uv);
|
|
43
|
+
const lngLat = XYZToLngLat(xyz);
|
|
44
|
+
// Adjust longitude for Web Mercator projection
|
|
45
|
+
if (Math.abs(lngLat[1]) > 89.999) {
|
|
46
|
+
lngLat[0] = prevLng;
|
|
47
|
+
}
|
|
48
|
+
const deltaLng = lngLat[0] - prevLng;
|
|
49
|
+
lngLat[0] += deltaLng > 180 ? -360 : deltaLng < -180 ? 360 : 0;
|
|
50
|
+
result[ptIndex++] = lngLat[0];
|
|
51
|
+
result[ptIndex++] = lngLat[1];
|
|
52
|
+
prevLng = lngLat[0];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// close the loop
|
|
56
|
+
result[ptIndex++] = result[0];
|
|
57
|
+
result[ptIndex++] = result[1];
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=s2-to-boundary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s2-to-boundary.js","sourceRoot":"","sources":["../../src/s2-geometry/s2-to-boundary.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Given an S2 token (String) this function convert the token to 64 bit id (Index)
|
|
3
|
+
* 'X' is the empty cell
|
|
4
|
+
* https://github.com/google/s2-geometry-library-java/blob/c04b68bf3197a9c34082327eeb3aec7ab7c85da1/src/com/google/common/geometry/S2CellId.java#L439
|
|
5
|
+
*/
|
|
6
|
+
export declare function getS2IndexFromToken(token: string): bigint;
|
|
7
|
+
/**
|
|
8
|
+
* Convert a 64 bit number to a string token
|
|
9
|
+
* 'X' is the empty cell
|
|
10
|
+
*/
|
|
11
|
+
export declare function getS2TokenFromIndex(cellId: bigint): string;
|
|
12
|
+
export declare function getS2ChildIndex(s2Index: bigint, index: number): bigint;
|
|
13
|
+
//# sourceMappingURL=s2-token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s2-token.d.ts","sourceRoot":"","sources":["../../src/s2-geometry/s2-token.ts"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOzD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAe1D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAMtE"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// math.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT and Apache-2.0
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
// s2-geometry is a pure JavaScript port of Google/Niantic's S2 Geometry library
|
|
5
|
+
// which is perfect since it works in the browser.
|
|
6
|
+
// const MAXIMUM_TOKEN_LENGTH = 16;
|
|
7
|
+
// INDEX CALCULATIONS
|
|
8
|
+
/**
|
|
9
|
+
* Given an S2 token (String) this function convert the token to 64 bit id (Index)
|
|
10
|
+
* 'X' is the empty cell
|
|
11
|
+
* https://github.com/google/s2-geometry-library-java/blob/c04b68bf3197a9c34082327eeb3aec7ab7c85da1/src/com/google/common/geometry/S2CellId.java#L439
|
|
12
|
+
*/
|
|
13
|
+
export function getS2IndexFromToken(token) {
|
|
14
|
+
if (token === 'X') {
|
|
15
|
+
token = '';
|
|
16
|
+
}
|
|
17
|
+
// pad token with zeros to make the length 16
|
|
18
|
+
const paddedToken = token.padEnd(16, '0');
|
|
19
|
+
return BigInt(`0x${paddedToken}`);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Convert a 64 bit number to a string token
|
|
23
|
+
* 'X' is the empty cell
|
|
24
|
+
*/
|
|
25
|
+
export function getS2TokenFromIndex(cellId) {
|
|
26
|
+
if (cellId === 0n) {
|
|
27
|
+
return 'X';
|
|
28
|
+
}
|
|
29
|
+
let numZeroDigits = countTrailingZeros(cellId);
|
|
30
|
+
const remainder = numZeroDigits % 4;
|
|
31
|
+
numZeroDigits = (numZeroDigits - remainder) / 4;
|
|
32
|
+
const trailingZeroHexChars = numZeroDigits;
|
|
33
|
+
numZeroDigits *= 4;
|
|
34
|
+
const x = cellId >> BigInt(numZeroDigits);
|
|
35
|
+
const hexString = x.toString(16).replace(/0+$/, '');
|
|
36
|
+
const zeroString = Array(17 - trailingZeroHexChars - hexString.length).join('0');
|
|
37
|
+
return zeroString + hexString;
|
|
38
|
+
}
|
|
39
|
+
export function getS2ChildIndex(s2Index, index) {
|
|
40
|
+
// Shift sentinel bit 2 positions to the right.
|
|
41
|
+
const newLsb = lsb(s2Index) >> 2n;
|
|
42
|
+
// Insert child index before the sentinel bit.
|
|
43
|
+
const childCellId = s2Index + BigInt(2 * index + 1 - 4) * newLsb;
|
|
44
|
+
return childCellId;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Return the lowest-numbered bit that is on for this cell id
|
|
48
|
+
* @private
|
|
49
|
+
*/
|
|
50
|
+
function lsb(cellId) {
|
|
51
|
+
return cellId & (cellId + 1n); // eslint-disable-line
|
|
52
|
+
}
|
|
53
|
+
function countTrailingZeros(n) {
|
|
54
|
+
let count = 0;
|
|
55
|
+
while (n % 2n === 0n) {
|
|
56
|
+
n /= 2n;
|
|
57
|
+
count++;
|
|
58
|
+
}
|
|
59
|
+
return count;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=s2-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s2-token.js","sourceRoot":"","sources":["../../src/s2-geometry/s2-token.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,8CAA8C;AAC9C,oCAAoC;AAEpC,gFAAgF;AAChF,kDAAkD;AAElD,mCAAmC;AAEnC,qBAAqB;AAErB;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;QAClB,KAAK,GAAG,EAAE,CAAC;IACb,CAAC;IACD,6CAA6C;IAC7C,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC,KAAK,WAAW,EAAE,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAClB,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,aAAa,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE/C,MAAM,SAAS,GAAG,aAAa,GAAG,CAAC,CAAC;IACpC,aAAa,GAAG,CAAC,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,oBAAoB,GAAG,aAAa,CAAC;IAC3C,aAAa,IAAI,CAAC,CAAC;IAEnB,MAAM,CAAC,GAAG,MAAM,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,KAAK,CAAC,EAAE,GAAG,oBAAoB,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjF,OAAO,UAAU,GAAG,SAAS,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,KAAa;IAC5D,+CAA+C;IAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAClC,8CAA8C;IAC9C,MAAM,WAAW,GAAW,OAAO,GAAG,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;IACzE,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,SAAS,GAAG,CAAC,MAAc;IACzB,OAAO,MAAM,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,sBAAsB;AACvD,CAAC;AAED,SAAS,kBAAkB,CAAC,CAAS;IACnC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;QACrB,CAAC,IAAI,EAAE,CAAC;QACR,KAAK,EAAE,CAAC;IACV,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/s2.cjs
ADDED
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// dist/s2.js
|
|
20
|
+
var s2_exports = {};
|
|
21
|
+
__export(s2_exports, {
|
|
22
|
+
S2Decoder: () => S2Decoder,
|
|
23
|
+
getS2ChildIndex: () => getS2ChildIndex
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(s2_exports);
|
|
26
|
+
|
|
27
|
+
// dist/s2-geometry/s2-token.js
|
|
28
|
+
function getS2IndexFromToken(token) {
|
|
29
|
+
if (token === "X") {
|
|
30
|
+
token = "";
|
|
31
|
+
}
|
|
32
|
+
const paddedToken = token.padEnd(16, "0");
|
|
33
|
+
return BigInt(`0x${paddedToken}`);
|
|
34
|
+
}
|
|
35
|
+
function getS2TokenFromIndex(cellId) {
|
|
36
|
+
if (cellId === 0n) {
|
|
37
|
+
return "X";
|
|
38
|
+
}
|
|
39
|
+
let numZeroDigits = countTrailingZeros(cellId);
|
|
40
|
+
const remainder = numZeroDigits % 4;
|
|
41
|
+
numZeroDigits = (numZeroDigits - remainder) / 4;
|
|
42
|
+
const trailingZeroHexChars = numZeroDigits;
|
|
43
|
+
numZeroDigits *= 4;
|
|
44
|
+
const x = cellId >> BigInt(numZeroDigits);
|
|
45
|
+
const hexString = x.toString(16).replace(/0+$/, "");
|
|
46
|
+
const zeroString = Array(17 - trailingZeroHexChars - hexString.length).join("0");
|
|
47
|
+
return zeroString + hexString;
|
|
48
|
+
}
|
|
49
|
+
function getS2ChildIndex(s2Index, index) {
|
|
50
|
+
const newLsb = lsb(s2Index) >> 2n;
|
|
51
|
+
const childCellId = s2Index + BigInt(2 * index + 1 - 4) * newLsb;
|
|
52
|
+
return childCellId;
|
|
53
|
+
}
|
|
54
|
+
function lsb(cellId) {
|
|
55
|
+
return cellId & cellId + 1n;
|
|
56
|
+
}
|
|
57
|
+
function countTrailingZeros(n) {
|
|
58
|
+
let count = 0;
|
|
59
|
+
while (n % 2n === 0n) {
|
|
60
|
+
n /= 2n;
|
|
61
|
+
count++;
|
|
62
|
+
}
|
|
63
|
+
return count;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// dist/s2-geometry/s2-geometry.js
|
|
67
|
+
function getS2Cell(s2Index) {
|
|
68
|
+
const key = toHilbertQuadkey(s2Index);
|
|
69
|
+
const s2cell = fromHilbertQuadKey(key);
|
|
70
|
+
return s2cell;
|
|
71
|
+
}
|
|
72
|
+
var FACE_BITS = 3;
|
|
73
|
+
var MAX_LEVEL = 30;
|
|
74
|
+
var POS_BITS = 2 * MAX_LEVEL + 1;
|
|
75
|
+
var RADIAN_TO_DEGREE = 180 / Math.PI;
|
|
76
|
+
function fromHilbertQuadKey(hilbertQuadkey) {
|
|
77
|
+
const parts = hilbertQuadkey.split("/");
|
|
78
|
+
const face = parseInt(parts[0], 10);
|
|
79
|
+
const position = parts[1] || "";
|
|
80
|
+
const maxLevel = position.length;
|
|
81
|
+
let level = 0;
|
|
82
|
+
const point = [0, 0];
|
|
83
|
+
for (let i = maxLevel - 1; i >= 0; i--) {
|
|
84
|
+
level = maxLevel - i;
|
|
85
|
+
const bit = position[i];
|
|
86
|
+
let rx = 0;
|
|
87
|
+
let ry = 0;
|
|
88
|
+
if (bit === "1") {
|
|
89
|
+
ry = 1;
|
|
90
|
+
} else if (bit === "2") {
|
|
91
|
+
rx = 1;
|
|
92
|
+
ry = 1;
|
|
93
|
+
} else if (bit === "3") {
|
|
94
|
+
rx = 1;
|
|
95
|
+
}
|
|
96
|
+
const val = Math.pow(2, level - 1);
|
|
97
|
+
rotateAndFlipQuadrant(val, point, rx, ry);
|
|
98
|
+
point[0] += val * rx;
|
|
99
|
+
point[1] += val * ry;
|
|
100
|
+
}
|
|
101
|
+
if (face % 2 === 1) {
|
|
102
|
+
const t = point[0];
|
|
103
|
+
point[0] = point[1];
|
|
104
|
+
point[1] = t;
|
|
105
|
+
}
|
|
106
|
+
return { face, ij: point, level };
|
|
107
|
+
}
|
|
108
|
+
function toHilbertQuadkey(id) {
|
|
109
|
+
let bin = id.toString(2);
|
|
110
|
+
while (bin.length < FACE_BITS + POS_BITS) {
|
|
111
|
+
bin = "0" + bin;
|
|
112
|
+
}
|
|
113
|
+
const lsbIndex = bin.lastIndexOf("1");
|
|
114
|
+
const faceB = bin.substring(0, 3);
|
|
115
|
+
const posB = bin.substring(3, lsbIndex);
|
|
116
|
+
const levelN = posB.length / 2;
|
|
117
|
+
const faceS = BigInt(`0b${faceB}`).toString(10);
|
|
118
|
+
let posS = "";
|
|
119
|
+
if (levelN !== 0) {
|
|
120
|
+
posS = BigInt(`0b${posB}`).toString(4);
|
|
121
|
+
while (posS.length < levelN) {
|
|
122
|
+
posS = "0" + posS;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return `${faceS}/${posS}`;
|
|
126
|
+
}
|
|
127
|
+
function IJToST(ij, order, offsets) {
|
|
128
|
+
const maxSize = 1 << order;
|
|
129
|
+
return [(ij[0] + offsets[0]) / maxSize, (ij[1] + offsets[1]) / maxSize];
|
|
130
|
+
}
|
|
131
|
+
function singleSTtoUV(st) {
|
|
132
|
+
if (st >= 0.5) {
|
|
133
|
+
return 1 / 3 * (4 * st * st - 1);
|
|
134
|
+
}
|
|
135
|
+
return 1 / 3 * (1 - 4 * (1 - st) * (1 - st));
|
|
136
|
+
}
|
|
137
|
+
function STToUV(st) {
|
|
138
|
+
return [singleSTtoUV(st[0]), singleSTtoUV(st[1])];
|
|
139
|
+
}
|
|
140
|
+
function FaceUVToXYZ(face, [u, v]) {
|
|
141
|
+
switch (face) {
|
|
142
|
+
case 0:
|
|
143
|
+
return [1, u, v];
|
|
144
|
+
case 1:
|
|
145
|
+
return [-u, 1, v];
|
|
146
|
+
case 2:
|
|
147
|
+
return [-u, -v, 1];
|
|
148
|
+
case 3:
|
|
149
|
+
return [-1, -v, -u];
|
|
150
|
+
case 4:
|
|
151
|
+
return [v, -1, -u];
|
|
152
|
+
case 5:
|
|
153
|
+
return [v, u, -1];
|
|
154
|
+
default:
|
|
155
|
+
throw new Error("Invalid face");
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
function XYZToLngLat([x, y, z]) {
|
|
159
|
+
const lat = Math.atan2(z, Math.sqrt(x * x + y * y));
|
|
160
|
+
const lng = Math.atan2(y, x);
|
|
161
|
+
return [lng * RADIAN_TO_DEGREE, lat * RADIAN_TO_DEGREE];
|
|
162
|
+
}
|
|
163
|
+
function rotateAndFlipQuadrant(n, point, rx, ry) {
|
|
164
|
+
if (ry === 0) {
|
|
165
|
+
if (rx === 1) {
|
|
166
|
+
point[0] = n - 1 - point[0];
|
|
167
|
+
point[1] = n - 1 - point[1];
|
|
168
|
+
}
|
|
169
|
+
const x = point[0];
|
|
170
|
+
point[0] = point[1];
|
|
171
|
+
point[1] = x;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// dist/s2-geometry/s2-to-boundary.js
|
|
176
|
+
var MAX_RESOLUTION = 100;
|
|
177
|
+
function getS2GeoBounds(s2Index) {
|
|
178
|
+
const s2Cell = getS2Cell(s2Index);
|
|
179
|
+
return getS2GeoBoundsFromCell(s2Cell);
|
|
180
|
+
}
|
|
181
|
+
function getS2GeoBoundsFromCell({ face, ij, level }) {
|
|
182
|
+
const offsets = [
|
|
183
|
+
[0, 0],
|
|
184
|
+
[0, 1],
|
|
185
|
+
[1, 1],
|
|
186
|
+
[1, 0],
|
|
187
|
+
[0, 0]
|
|
188
|
+
];
|
|
189
|
+
const resolution = Math.max(1, Math.ceil(MAX_RESOLUTION * Math.pow(2, -level)));
|
|
190
|
+
const result = new Float64Array(4 * resolution * 2 + 2);
|
|
191
|
+
let ptIndex = 0;
|
|
192
|
+
let prevLng = 0;
|
|
193
|
+
for (let i = 0; i < 4; i++) {
|
|
194
|
+
const offset = offsets[i].slice(0);
|
|
195
|
+
const nextOffset = offsets[i + 1];
|
|
196
|
+
const stepI = (nextOffset[0] - offset[0]) / resolution;
|
|
197
|
+
const stepJ = (nextOffset[1] - offset[1]) / resolution;
|
|
198
|
+
for (let j = 0; j < resolution; j++) {
|
|
199
|
+
offset[0] += stepI;
|
|
200
|
+
offset[1] += stepJ;
|
|
201
|
+
const st = IJToST(ij, level, offset);
|
|
202
|
+
const uv = STToUV(st);
|
|
203
|
+
const xyz = FaceUVToXYZ(face, uv);
|
|
204
|
+
const lngLat = XYZToLngLat(xyz);
|
|
205
|
+
if (Math.abs(lngLat[1]) > 89.999) {
|
|
206
|
+
lngLat[0] = prevLng;
|
|
207
|
+
}
|
|
208
|
+
const deltaLng = lngLat[0] - prevLng;
|
|
209
|
+
lngLat[0] += deltaLng > 180 ? -360 : deltaLng < -180 ? 360 : 0;
|
|
210
|
+
result[ptIndex++] = lngLat[0];
|
|
211
|
+
result[ptIndex++] = lngLat[1];
|
|
212
|
+
prevLng = lngLat[0];
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
result[ptIndex++] = result[0];
|
|
216
|
+
result[ptIndex++] = result[1];
|
|
217
|
+
return result;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// dist/s2-decoder.js
|
|
221
|
+
var S2Decoder = {
|
|
222
|
+
name: "s2",
|
|
223
|
+
hasNumericRepresentation: true,
|
|
224
|
+
cellColumnNames: ["s2", "s2Token", "s2_token", "s2Cell", "s2_cell", "s2CellId", "s2_cell_id"],
|
|
225
|
+
tokenToCell: (s2Token) => getS2IndexFromToken(s2Token),
|
|
226
|
+
cellToToken: (cell) => typeof cell === "string" ? cell : getS2TokenFromIndex(cell),
|
|
227
|
+
cellToLngLat: (cell) => getS2LngLat(cell),
|
|
228
|
+
cellToBoundary: (cell) => getS2Boundary(cell),
|
|
229
|
+
cellToBoundaryFlat: (cell) => getS2BoundaryFlat(cell),
|
|
230
|
+
cellToBounds: (cell) => getS2Bounds(cell)
|
|
231
|
+
};
|
|
232
|
+
function getS2LngLat(cell) {
|
|
233
|
+
const s2Index = getS2CellIndex(cell);
|
|
234
|
+
const s2Cell = getS2Cell(s2Index);
|
|
235
|
+
const st = IJToST(s2Cell.ij, s2Cell.level, [0.5, 0.5]);
|
|
236
|
+
const uv = STToUV(st);
|
|
237
|
+
const xyz = FaceUVToXYZ(s2Cell.face, uv);
|
|
238
|
+
const lngLat = XYZToLngLat(xyz);
|
|
239
|
+
return lngLat;
|
|
240
|
+
}
|
|
241
|
+
function getS2BoundaryFlat(cell) {
|
|
242
|
+
const s2Index = getS2CellIndex(cell);
|
|
243
|
+
const float64Array = getS2GeoBounds(s2Index);
|
|
244
|
+
return Array.from(float64Array);
|
|
245
|
+
}
|
|
246
|
+
function getS2Boundary(cell) {
|
|
247
|
+
const flatBoundary = getS2BoundaryFlat(cell);
|
|
248
|
+
const boundary = [];
|
|
249
|
+
for (let i = 0; i < flatBoundary.length; i += 2) {
|
|
250
|
+
boundary.push([flatBoundary[i], flatBoundary[i + 1]]);
|
|
251
|
+
}
|
|
252
|
+
return boundary;
|
|
253
|
+
}
|
|
254
|
+
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;
|
|
269
|
+
}
|
|
270
|
+
return [
|
|
271
|
+
[xmin, ymin],
|
|
272
|
+
[xmax, ymax]
|
|
273
|
+
];
|
|
274
|
+
}
|
|
275
|
+
function getS2CellIndex(cell) {
|
|
276
|
+
return typeof cell === "bigint" ? cell : getS2IndexFromToken(cell);
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=s2.cjs.map
|
package/dist/s2.cjs.map
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
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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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
package/dist/s2.d.ts
ADDED
package/dist/s2.d.ts.map
ADDED
|
@@ -0,0 +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"}
|
package/dist/s2.js
ADDED
package/dist/s2.js.map
ADDED
|
@@ -0,0 +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"}
|