@deck.gl/carto 8.8.0-beta.4 → 8.8.1
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/dist/dist.dev.js +1253 -107
- package/dist/es5/index.js +23 -3
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/layers/carto-layer.js +3 -3
- package/dist/es5/layers/carto-layer.js.map +1 -1
- package/dist/es5/layers/h3-tile-layer.js +26 -3
- package/dist/es5/layers/h3-tile-layer.js.map +1 -1
- package/dist/es5/layers/h3-tileset-2d.js +19 -13
- package/dist/es5/layers/h3-tileset-2d.js.map +1 -1
- package/dist/es5/layers/quadbin-layer.js +71 -0
- package/dist/es5/layers/quadbin-layer.js.map +1 -0
- package/dist/es5/layers/{quadkey-tile-layer.js → quadbin-tile-layer.js} +17 -17
- package/dist/es5/layers/quadbin-tile-layer.js.map +1 -0
- package/dist/es5/layers/{quadkey-tileset-2d.js → quadbin-tileset-2d.js} +25 -57
- package/dist/es5/layers/quadbin-tileset-2d.js.map +1 -0
- package/dist/es5/layers/quadbin-utils.js +122 -0
- package/dist/es5/layers/quadbin-utils.js.map +1 -0
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/layers/carto-layer.js +3 -3
- package/dist/esm/layers/carto-layer.js.map +1 -1
- package/dist/esm/layers/h3-tile-layer.js +20 -3
- package/dist/esm/layers/h3-tile-layer.js.map +1 -1
- package/dist/esm/layers/h3-tileset-2d.js +20 -16
- package/dist/esm/layers/h3-tileset-2d.js.map +1 -1
- package/dist/esm/layers/quadbin-layer.js +29 -0
- package/dist/esm/layers/quadbin-layer.js.map +1 -0
- package/dist/esm/layers/{quadkey-tile-layer.js → quadbin-tile-layer.js} +10 -10
- package/dist/esm/layers/quadbin-tile-layer.js.map +1 -0
- package/dist/esm/layers/quadbin-tileset-2d.js +37 -0
- package/dist/esm/layers/quadbin-tileset-2d.js.map +1 -0
- package/dist/esm/layers/quadbin-utils.js +88 -0
- package/dist/esm/layers/quadbin-utils.js.map +1 -0
- package/dist.min.js +138 -138
- package/package.json +2 -2
- package/src/index.ts +6 -1
- package/src/layers/carto-layer.ts +7 -7
- package/src/layers/h3-tile-layer.ts +24 -3
- package/src/layers/h3-tileset-2d.ts +20 -10
- package/src/layers/quadbin-layer.ts +43 -0
- package/src/layers/{quadkey-tile-layer.ts → quadbin-tile-layer.ts} +15 -13
- package/src/layers/quadbin-tileset-2d.ts +34 -0
- package/src/layers/quadbin-utils.ts +102 -0
- package/typed/index.d.ts +2 -1
- package/typed/index.d.ts.map +1 -1
- package/typed/layers/carto-layer.d.ts +2 -2
- package/typed/layers/carto-layer.d.ts.map +1 -1
- package/typed/layers/h3-tile-layer.d.ts.map +1 -1
- package/typed/layers/h3-tileset-2d.d.ts +6 -0
- package/typed/layers/h3-tileset-2d.d.ts.map +1 -1
- package/typed/layers/quadbin-layer.d.ts +20 -0
- package/typed/layers/quadbin-layer.d.ts.map +1 -0
- package/typed/layers/quadbin-tile-layer.d.ts +21 -0
- package/typed/layers/quadbin-tile-layer.d.ts.map +1 -0
- package/typed/layers/quadbin-tileset-2d.d.ts +13 -0
- package/typed/layers/quadbin-tileset-2d.d.ts.map +1 -0
- package/typed/layers/quadbin-utils.d.ts +11 -0
- package/typed/layers/quadbin-utils.d.ts.map +1 -0
- package/dist/es5/layers/quadkey-tile-layer.js.map +0 -1
- package/dist/es5/layers/quadkey-tileset-2d.js.map +0 -1
- package/dist/esm/layers/quadkey-tile-layer.js.map +0 -1
- package/dist/esm/layers/quadkey-tileset-2d.js +0 -71
- package/dist/esm/layers/quadkey-tileset-2d.js.map +0 -1
- package/src/layers/quadkey-tileset-2d.ts +0 -59
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
2
|
import { CompositeLayer } from '@deck.gl/core';
|
|
3
|
-
import
|
|
4
|
-
import
|
|
3
|
+
import QuadbinLayer from './quadbin-layer';
|
|
4
|
+
import QuadbinTileset2D from './quadbin-tileset-2d';
|
|
5
5
|
import SpatialIndexTileLayer from './spatial-index-tile-layer';
|
|
6
6
|
|
|
7
7
|
const renderSubLayers = props => {
|
|
@@ -9,15 +9,15 @@ const renderSubLayers = props => {
|
|
|
9
9
|
data
|
|
10
10
|
} = props;
|
|
11
11
|
if (!data || !data.length) return null;
|
|
12
|
-
return new
|
|
13
|
-
|
|
12
|
+
return new QuadbinLayer(props, {
|
|
13
|
+
getQuadbin: d => d.id
|
|
14
14
|
});
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
const defaultProps = {
|
|
18
18
|
aggregationResLevel: 6
|
|
19
19
|
};
|
|
20
|
-
export default class
|
|
20
|
+
export default class QuadbinTileLayer extends CompositeLayer {
|
|
21
21
|
constructor(...args) {
|
|
22
22
|
super(...args);
|
|
23
23
|
|
|
@@ -54,9 +54,9 @@ export default class QuadkeyTileLayer extends CompositeLayer {
|
|
|
54
54
|
} = this.state;
|
|
55
55
|
const maxZoom = parseInt(tileJSON === null || tileJSON === void 0 ? void 0 : tileJSON.maxresolution);
|
|
56
56
|
return [new SpatialIndexTileLayer(this.props, {
|
|
57
|
-
id: "
|
|
57
|
+
id: "quadbin-tile-layer-".concat(this.props.id),
|
|
58
58
|
data,
|
|
59
|
-
TilesetClass:
|
|
59
|
+
TilesetClass: QuadbinTileset2D,
|
|
60
60
|
renderSubLayers,
|
|
61
61
|
maxZoom
|
|
62
62
|
})];
|
|
@@ -64,7 +64,7 @@ export default class QuadkeyTileLayer extends CompositeLayer {
|
|
|
64
64
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
_defineProperty(
|
|
67
|
+
_defineProperty(QuadbinTileLayer, "layerName", 'QuadbinTileLayer');
|
|
68
68
|
|
|
69
|
-
_defineProperty(
|
|
70
|
-
//# sourceMappingURL=
|
|
69
|
+
_defineProperty(QuadbinTileLayer, "defaultProps", defaultProps);
|
|
70
|
+
//# sourceMappingURL=quadbin-tile-layer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/layers/quadbin-tile-layer.ts"],"names":["CompositeLayer","QuadbinLayer","QuadbinTileset2D","SpatialIndexTileLayer","renderSubLayers","props","data","length","getQuadbin","d","id","defaultProps","aggregationResLevel","QuadbinTileLayer","initializeState","setState","tileJSON","updateState","changeFlags","dataChanged","tiles","renderLayers","state","maxZoom","parseInt","maxresolution","TilesetClass"],"mappings":";AAAA,SACEA,cADF,QAOO,eAPP;AAQA,OAAOC,YAAP,MAA8C,iBAA9C;AACA,OAAOC,gBAAP,MAA6B,sBAA7B;AACA,OAAOC,qBAAP,MAAkC,4BAAlC;;AAEA,MAAMC,eAAe,GAAGC,KAAK,IAAI;AAC/B,QAAM;AAACC,IAAAA;AAAD,MAASD,KAAf;AACA,MAAI,CAACC,IAAD,IAAS,CAACA,IAAI,CAACC,MAAnB,EAA2B,OAAO,IAAP;AAC3B,SAAO,IAAIN,YAAJ,CAAiBI,KAAjB,EAAwB;AAC7BG,IAAAA,UAAU,EAAEC,CAAC,IAAIA,CAAC,CAACC;AADU,GAAxB,CAAP;AAGD,CAND;;AAQA,MAAMC,YAAiD,GAAG;AACxDC,EAAAA,mBAAmB,EAAE;AADmC,CAA1D;AAaA,eAAe,MAAMC,gBAAN,SAA6Db,cAA7D,CAEb;AAAA;AAAA;;AAAA;AAAA;;AAQAc,EAAAA,eAAe,GAAS;AACtB,SAAKC,QAAL,CAAc;AAACT,MAAAA,IAAI,EAAE,IAAP;AAAaU,MAAAA,QAAQ,EAAE;AAAvB,KAAd;AACD;;AAEDC,EAAAA,WAAW,CAAC;AAACC,IAAAA;AAAD,GAAD,EAA8C;AACvD,QAAIA,WAAW,CAACC,WAAhB,EAA6B;AAC3B,UAAI;AAACb,QAAAA;AAAD,UAAS,KAAKD,KAAlB;AACA,YAAMW,QAAQ,GAAGV,IAAjB;AACAA,MAAAA,IAAI,GAAIU,QAAD,CAAkBI,KAAzB;AACA,WAAKL,QAAL,CAAc;AAACT,QAAAA,IAAD;AAAOU,QAAAA;AAAP,OAAd;AACD;AACF;;AAEDK,EAAAA,YAAY,GAA8B;AACxC,UAAM;AAACf,MAAAA,IAAD;AAAOU,MAAAA;AAAP,QAAmB,KAAKM,KAA9B;AACA,UAAMC,OAAO,GAAGC,QAAQ,CAACR,QAAD,aAACA,QAAD,uBAACA,QAAQ,CAAES,aAAX,CAAxB;AACA,WAAO,CACL,IAAItB,qBAAJ,CAA0B,KAAKE,KAA/B,EAAsC;AACpCK,MAAAA,EAAE,+BAAwB,KAAKL,KAAL,CAAWK,EAAnC,CADkC;AAEpCJ,MAAAA,IAFoC;AAIpCoB,MAAAA,YAAY,EAAExB,gBAJsB;AAKpCE,MAAAA,eALoC;AAMpCmB,MAAAA;AANoC,KAAtC,CADK,CAAP;AAUD;;AAlCD;;gBAFmBV,gB,eAGA,kB;;gBAHAA,gB,kBAIGF,Y","sourcesContent":["import {\n CompositeLayer,\n CompositeLayerProps,\n Layer,\n LayersList,\n UpdateParameters,\n DefaultProps\n} from '@deck.gl/core';\nimport QuadbinLayer, {QuadbinLayerProps} from './quadbin-layer';\nimport QuadbinTileset2D from './quadbin-tileset-2d';\nimport SpatialIndexTileLayer from './spatial-index-tile-layer';\n\nconst renderSubLayers = props => {\n const {data} = props;\n if (!data || !data.length) return null;\n return new QuadbinLayer(props, {\n getQuadbin: d => d.id\n });\n};\n\nconst defaultProps: DefaultProps<QuadbinTileLayerProps> = {\n aggregationResLevel: 6\n};\n\n/** All properties supported by QuadbinTileLayer. */\nexport type QuadbinTileLayerProps<DataT = any> = _QuadbinTileLayerProps<DataT> &\n CompositeLayerProps<DataT>;\n\n/** Properties added by QuadbinTileLayer. */\ntype _QuadbinTileLayerProps<DataT> = QuadbinLayerProps<DataT> & {\n aggregationResLevel?: number;\n};\n\nexport default class QuadbinTileLayer<DataT = any, ExtraProps = {}> extends CompositeLayer<\n ExtraProps & Required<_QuadbinTileLayerProps<DataT>>\n> {\n static layerName = 'QuadbinTileLayer';\n static defaultProps = defaultProps;\n\n state!: {\n tileJSON: any;\n data: any;\n };\n initializeState(): void {\n this.setState({data: null, tileJSON: null});\n }\n\n updateState({changeFlags}: UpdateParameters<this>): void {\n if (changeFlags.dataChanged) {\n let {data} = this.props;\n const tileJSON = data;\n data = (tileJSON as any).tiles;\n this.setState({data, tileJSON});\n }\n }\n\n renderLayers(): Layer | null | LayersList {\n const {data, tileJSON} = this.state;\n const maxZoom = parseInt(tileJSON?.maxresolution);\n return [\n new SpatialIndexTileLayer(this.props, {\n id: `quadbin-tile-layer-${this.props.id}`,\n data,\n // TODO: Tileset2D should be generic over TileIndex type\n TilesetClass: QuadbinTileset2D as any,\n renderSubLayers,\n maxZoom\n })\n ];\n }\n}\n"],"file":"quadbin-tile-layer.js"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { _Tileset2D as Tileset2D } from '@deck.gl/geo-layers';
|
|
2
|
+
import { tileToQuadbin, quadbinToTile, quadbinParent, quadbinZoom } from './quadbin-utils';
|
|
3
|
+
export default class QuadbinTileset2D extends Tileset2D {
|
|
4
|
+
getTileIndices(opts) {
|
|
5
|
+
return super.getTileIndices(opts).map(tileToQuadbin).map(i => ({
|
|
6
|
+
i
|
|
7
|
+
}));
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
getTileId({
|
|
11
|
+
i
|
|
12
|
+
}) {
|
|
13
|
+
return i;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
getTileMetadata({
|
|
17
|
+
i
|
|
18
|
+
}) {
|
|
19
|
+
return super.getTileMetadata(quadbinToTile(i));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
getTileZoom({
|
|
23
|
+
i
|
|
24
|
+
}) {
|
|
25
|
+
return Number(quadbinZoom(i));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
getParentIndex({
|
|
29
|
+
i
|
|
30
|
+
}) {
|
|
31
|
+
return {
|
|
32
|
+
i: quadbinParent(i)
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=quadbin-tileset-2d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/layers/quadbin-tileset-2d.ts"],"names":["_Tileset2D","Tileset2D","tileToQuadbin","quadbinToTile","quadbinParent","quadbinZoom","QuadbinTileset2D","getTileIndices","opts","map","i","getTileId","getTileMetadata","getTileZoom","Number","getParentIndex"],"mappings":"AAAA,SAAQA,UAAU,IAAIC,SAAtB,QAAsC,qBAAtC;AACA,SAAQC,aAAR,EAAuBC,aAAvB,EAAsCC,aAAtC,EAAqDC,WAArD,QAAuE,iBAAvE;AAIA,eAAe,MAAMC,gBAAN,SAA+BL,SAA/B,CAAyC;AAEtDM,EAAAA,cAAc,CAACC,IAAD,EAA2B;AACvC,WAAO,MACJD,cADI,CACWC,IADX,EAEJC,GAFI,CAEAP,aAFA,EAGJO,GAHI,CAGAC,CAAC,KAAK;AAACA,MAAAA;AAAD,KAAL,CAHD,CAAP;AAID;;AAGDC,EAAAA,SAAS,CAAC;AAACD,IAAAA;AAAD,GAAD,EAAgC;AACvC,WAAOA,CAAP;AACD;;AAGDE,EAAAA,eAAe,CAAC;AAACF,IAAAA;AAAD,GAAD,EAAwB;AACrC,WAAO,MAAME,eAAN,CAAsBT,aAAa,CAACO,CAAD,CAAnC,CAAP;AACD;;AAGDG,EAAAA,WAAW,CAAC;AAACH,IAAAA;AAAD,GAAD,EAAgC;AACzC,WAAOI,MAAM,CAACT,WAAW,CAACK,CAAD,CAAZ,CAAb;AACD;;AAGDK,EAAAA,cAAc,CAAC;AAACL,IAAAA;AAAD,GAAD,EAA0C;AACtD,WAAO;AAACA,MAAAA,CAAC,EAAEN,aAAa,CAACM,CAAD;AAAjB,KAAP;AACD;;AA3BqD","sourcesContent":["import {_Tileset2D as Tileset2D} from '@deck.gl/geo-layers';\nimport {tileToQuadbin, quadbinToTile, quadbinParent, quadbinZoom} from './quadbin-utils';\n\ntype QuadbinTileIndex = {i: string};\n\nexport default class QuadbinTileset2D extends Tileset2D {\n // @ts-expect-error for spatial indices, TileSet2d should be parametrized by TileIndexT\n getTileIndices(opts): QuadbinTileIndex[] {\n return super\n .getTileIndices(opts)\n .map(tileToQuadbin)\n .map(i => ({i}));\n }\n\n // @ts-expect-error TileIndex must be generic\n getTileId({i}: QuadbinTileIndex): string {\n return i;\n }\n\n // @ts-expect-error TileIndex must be generic\n getTileMetadata({i}: QuadbinTileIndex) {\n return super.getTileMetadata(quadbinToTile(i));\n }\n\n // @ts-expect-error TileIndex must be generic\n getTileZoom({i}: QuadbinTileIndex): number {\n return Number(quadbinZoom(i));\n }\n\n // @ts-expect-error TileIndex must be generic\n getParentIndex({i}: QuadbinTileIndex): QuadbinTileIndex {\n return {i: quadbinParent(i)};\n }\n}\n"],"file":"quadbin-tileset-2d.js"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { worldToLngLat } from '@math.gl/web-mercator';
|
|
2
|
+
const TILE_SIZE = 512;
|
|
3
|
+
const B = [0x5555555555555555n, 0x3333333333333333n, 0x0f0f0f0f0f0f0f0fn, 0x00ff00ff00ff00ffn, 0x0000ffff0000ffffn, 0x00000000ffffffffn];
|
|
4
|
+
const S = [0n, 1n, 2n, 4n, 8n, 16n];
|
|
5
|
+
|
|
6
|
+
function indexToBigInt(index) {
|
|
7
|
+
return BigInt("0x".concat(index));
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
function bigIntToIndex(quadbin) {
|
|
11
|
+
return quadbin.toString(16);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function tileToQuadbin(tile) {
|
|
15
|
+
if (tile.z < 0 || tile.z > 26) {
|
|
16
|
+
throw new Error('Wrong zoom');
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const z = BigInt(tile.z);
|
|
20
|
+
let x = BigInt(tile.x) << 32n - z;
|
|
21
|
+
let y = BigInt(tile.y) << 32n - z;
|
|
22
|
+
|
|
23
|
+
for (let i = 0; i < 5; i++) {
|
|
24
|
+
const s = S[5 - i];
|
|
25
|
+
const b = B[4 - i];
|
|
26
|
+
x = (x | x << s) & b;
|
|
27
|
+
y = (y | y << s) & b;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const quadbin = 0x4000000000000000n | 1n << 59n | z << 52n | (x | y << 1n) >> 12n | 0xfffffffffffffn >> z * 2n;
|
|
31
|
+
return bigIntToIndex(quadbin);
|
|
32
|
+
}
|
|
33
|
+
export function quadbinToTile(index) {
|
|
34
|
+
const quadbin = indexToBigInt(index);
|
|
35
|
+
const mode = quadbin >> 59n & 7n;
|
|
36
|
+
const modeDep = quadbin >> 57n & 3n;
|
|
37
|
+
const z = quadbin >> 52n & 0x1fn;
|
|
38
|
+
const q = (quadbin & 0xfffffffffffffn) << 12n;
|
|
39
|
+
|
|
40
|
+
if (mode !== 1n && modeDep !== 0n) {
|
|
41
|
+
throw new Error('Wrong mode');
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
let x = q;
|
|
45
|
+
let y = q >> 1n;
|
|
46
|
+
|
|
47
|
+
for (let i = 0; i < 6; i++) {
|
|
48
|
+
const s = S[i];
|
|
49
|
+
const b = B[i];
|
|
50
|
+
x = (x | x >> s) & b;
|
|
51
|
+
y = (y | y >> s) & b;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
x = x >> 32n - z;
|
|
55
|
+
y = y >> 32n - z;
|
|
56
|
+
return {
|
|
57
|
+
z: Number(z),
|
|
58
|
+
x: Number(x),
|
|
59
|
+
y: Number(y)
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export function quadbinZoom(index) {
|
|
63
|
+
const quadbin = indexToBigInt(index);
|
|
64
|
+
return quadbin >> 52n & 0x1fn;
|
|
65
|
+
}
|
|
66
|
+
export function quadbinParent(index) {
|
|
67
|
+
const quadbin = indexToBigInt(index);
|
|
68
|
+
const zparent = quadbinZoom(index) - 1n;
|
|
69
|
+
const parent = quadbin & ~(0x1fn << 52n) | zparent << 52n | 0xfffffffffffffn >> zparent * 2n;
|
|
70
|
+
return bigIntToIndex(parent);
|
|
71
|
+
}
|
|
72
|
+
export function quadbinToWorldBounds(quadbin) {
|
|
73
|
+
const {
|
|
74
|
+
x,
|
|
75
|
+
y,
|
|
76
|
+
z
|
|
77
|
+
} = quadbinToTile(quadbin);
|
|
78
|
+
const mask = 1 << z;
|
|
79
|
+
const scale = mask / TILE_SIZE;
|
|
80
|
+
return [[x / scale, TILE_SIZE - y / scale], [(x + 0.99) / scale, TILE_SIZE - (y + 0.99) / scale]];
|
|
81
|
+
}
|
|
82
|
+
export function getQuadbinPolygon(quadbin) {
|
|
83
|
+
const [topLeft, bottomRight] = quadbinToWorldBounds(quadbin);
|
|
84
|
+
const [w, n] = worldToLngLat(topLeft);
|
|
85
|
+
const [e, s] = worldToLngLat(bottomRight);
|
|
86
|
+
return [e, n, e, s, w, s, w, n, e, n];
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=quadbin-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/layers/quadbin-utils.ts"],"names":["worldToLngLat","TILE_SIZE","B","S","indexToBigInt","index","BigInt","bigIntToIndex","quadbin","toString","tileToQuadbin","tile","z","Error","x","y","i","s","b","quadbinToTile","mode","modeDep","q","Number","quadbinZoom","quadbinParent","zparent","parent","quadbinToWorldBounds","mask","scale","getQuadbinPolygon","topLeft","bottomRight","w","n","e"],"mappings":"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","sourcesContent":["import {worldToLngLat} from '@math.gl/web-mercator';\n\nconst TILE_SIZE = 512;\n\nconst B = [\n 0x5555555555555555n,\n 0x3333333333333333n,\n 0x0f0f0f0f0f0f0f0fn,\n 0x00ff00ff00ff00ffn,\n 0x0000ffff0000ffffn,\n 0x00000000ffffffffn\n];\nconst S = [0n, 1n, 2n, 4n, 8n, 16n];\n\nfunction indexToBigInt(index: string): bigint {\n return BigInt(`0x${index}`);\n}\n\nfunction bigIntToIndex(quadbin: bigint): string {\n return quadbin.toString(16);\n}\n\nexport function tileToQuadbin(tile): string {\n if (tile.z < 0 || tile.z > 26) {\n throw new Error('Wrong zoom');\n }\n const z = BigInt(tile.z);\n let x = BigInt(tile.x) << (32n - z);\n let y = BigInt(tile.y) << (32n - z);\n\n for (let i = 0; i < 5; i++) {\n const s = S[5 - i];\n const b = B[4 - i];\n x = (x | (x << s)) & b;\n y = (y | (y << s)) & b;\n }\n\n const quadbin =\n 0x4000000000000000n |\n (1n << 59n) | // | (mode << 59) | (mode_dep << 57)\n (z << 52n) |\n ((x | (y << 1n)) >> 12n) |\n (0xfffffffffffffn >> (z * 2n));\n return bigIntToIndex(quadbin);\n}\n\nexport function quadbinToTile(index: string) {\n const quadbin = indexToBigInt(index);\n const mode = (quadbin >> 59n) & 7n;\n const modeDep = (quadbin >> 57n) & 3n;\n const z = (quadbin >> 52n) & 0x1fn;\n const q = (quadbin & 0xfffffffffffffn) << 12n;\n\n if (mode !== 1n && modeDep !== 0n) {\n throw new Error('Wrong mode');\n }\n\n let x = q;\n let y = q >> 1n;\n\n for (let i = 0; i < 6; i++) {\n const s = S[i];\n const b = B[i];\n x = (x | (x >> s)) & b;\n y = (y | (y >> s)) & b;\n }\n\n x = x >> (32n - z);\n y = y >> (32n - z);\n\n return {z: Number(z), x: Number(x), y: Number(y)};\n}\n\nexport function quadbinZoom(index: string) {\n const quadbin = indexToBigInt(index);\n return (quadbin >> 52n) & 0x1fn;\n}\n\nexport function quadbinParent(index: string) {\n const quadbin = indexToBigInt(index);\n const zparent = quadbinZoom(index) - 1n;\n const parent =\n (quadbin & ~(0x1fn << 52n)) | (zparent << 52n) | (0xfffffffffffffn >> (zparent * 2n));\n return bigIntToIndex(parent);\n}\n\nexport function quadbinToWorldBounds(quadbin: string): [number[], number[]] {\n const {x, y, z} = quadbinToTile(quadbin);\n const mask = 1 << z;\n const scale = mask / TILE_SIZE;\n return [\n [x / scale, TILE_SIZE - y / scale],\n [(x + 0.99) / scale, TILE_SIZE - (y + 0.99) / scale]\n ];\n}\n\nexport function getQuadbinPolygon(quadbin: string): number[] {\n const [topLeft, bottomRight] = quadbinToWorldBounds(quadbin);\n const [w, n] = worldToLngLat(topLeft);\n const [e, s] = worldToLngLat(bottomRight);\n return [e, n, e, s, w, s, w, n, e, n];\n}\n"],"file":"quadbin-utils.js"}
|