@xyo-network/quadkey 2.81.7 → 2.81.9

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,26 +1,21 @@
1
- /// <reference types="node" />
2
- import { BigNumber } from '@xylabs/bignumber';
3
- import { Buffer } from '@xylabs/buffer';
4
1
  import { GeoJson, MercatorBoundingBox, MercatorTile } from '@xyo-network/sdk-geo';
5
2
  import { LngLat, LngLatLike } from 'mapbox-gl';
6
- export * from './utils';
7
3
  export declare const isQuadkey: (obj: {
8
4
  type: string;
9
5
  }) => boolean;
10
6
  export declare class Quadkey {
7
+ private key;
11
8
  static Zero: Quadkey;
12
9
  static root: Quadkey;
13
10
  static type: string;
14
11
  type: string;
15
12
  private _geoJson?;
16
- private key;
17
- constructor(key?: Buffer);
18
- get base10String(): string;
13
+ constructor(key?: bigint);
14
+ get base16String(): string;
19
15
  get base4Hash(): string;
20
16
  get base4HashLabel(): string;
21
- get bigNumber(): BigNumber;
22
17
  get boundingBox(): MercatorBoundingBox;
23
- get buffer(): Buffer;
18
+ get buffer(): bigint;
24
19
  get center(): LngLat;
25
20
  get children(): Quadkey[];
26
21
  get gridLocation(): {
@@ -28,25 +23,22 @@ export declare class Quadkey {
28
23
  row: number;
29
24
  zoom: number;
30
25
  };
31
- get hex(): string;
32
- get id(): Buffer;
26
+ get id(): bigint;
33
27
  get parent(): Quadkey | undefined;
34
28
  get siblings(): Quadkey[];
35
29
  get tile(): MercatorTile;
36
30
  get valid(): boolean;
37
31
  get zoom(): number;
38
- static from(zoom: number, id: Buffer): Quadkey;
39
- static fromBase10String(value: string): Quadkey;
32
+ static from(zoom: number, id: bigint): Quadkey;
33
+ static fromArrayBuffer(zoom: number, id: ArrayBuffer): Quadkey;
40
34
  static fromBase16String(value: string): Quadkey;
41
- static fromBase4String(value?: string): Quadkey | undefined;
35
+ static fromBase4String(value?: string): Quadkey;
42
36
  static fromBoundingBox(boundingBox: MercatorBoundingBox, zoom: number): Quadkey[];
43
- static fromBuffer(value: Buffer): Quadkey;
44
- static fromLngLat(point: LngLatLike, zoom: number): Quadkey | undefined;
37
+ static fromLngLat(point: LngLatLike, zoom: number): Quadkey;
45
38
  static fromString(zoom: number, id: string, base?: number): Quadkey;
46
- static fromTile(tile: MercatorTile): Quadkey | undefined;
39
+ static fromTile(tile: MercatorTile): Quadkey;
47
40
  childrenByZoom(zoom: number): Quadkey[];
48
41
  clone(): Quadkey;
49
- compareTo(quadkey: Quadkey): 0 | 1 | -1;
50
42
  equals(obj: Quadkey): boolean;
51
43
  geoJson(): GeoJson;
52
44
  getGridBoundingBox(size: number): {
@@ -62,31 +54,12 @@ export declare class Quadkey {
62
54
  zoom: number;
63
55
  };
64
56
  isInBoundingBox(boundingBox: MercatorBoundingBox): boolean;
65
- relative(direction: string): Quadkey | undefined;
66
- setId(id: Buffer): this;
67
- setKey(zoom: number, id: Buffer): this;
57
+ relative(direction: string): Quadkey;
58
+ setId(id: bigint): this;
59
+ setKey(zoom: number, key: bigint): this;
68
60
  setZoom(zoom: number): this;
69
- /** @deprecated use .base10String*/
70
- toBase10String(): string;
71
- /** @deprecated use .base4Hash */
72
- toBase4Hash(): string;
73
- /** @deprecated use .base4HashLabel */
74
- toBase4HashLabel(): string;
75
- /** @deprecated use .bigNumber */
76
- toBigNumber(): BigNumber;
77
- /** @deprecated use .boundingBox */
78
- toBoundingBox(): MercatorBoundingBox;
79
- /** @deprecated use .buffer */
80
- toBuffer(): Buffer;
81
- /** @deprecated use .center */
82
- toCenter(): LngLat;
83
- /** @deprecated use .hex instead */
84
- toHex(): string;
85
61
  toJSON(): string;
86
- toShortString(): string;
87
62
  toString(): string;
88
- /** @deprecated use .tile instead */
89
- toTile(): MercatorTile;
90
63
  protected guessZoom(): void;
91
64
  }
92
65
  //# sourceMappingURL=Quadkey.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Quadkey.d.ts","sourceRoot":"","sources":["../../src/Quadkey.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAEL,OAAO,EACP,mBAAmB,EACnB,YAAY,EAMb,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAK9C,cAAc,SAAS,CAAA;AAIvB,eAAO,MAAM,SAAS,QAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,YAA+B,CAAA;AAE9E,qBAAa,OAAO;IAClB,MAAM,CAAC,IAAI,UAAuC;IAClD,MAAM,CAAC,IAAI,UAAgB;IAC3B,MAAM,CAAC,IAAI,SAAY;IAEvB,IAAI,SAAe;IAEnB,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,GAAG,CAAmB;gBAElB,GAAG,SAAmB;IAKlC,IAAI,YAAY,WAEf;IAED,IAAI,SAAS,WAWZ;IAED,IAAI,cAAc,WAGjB;IAED,IAAI,SAAS,cAEZ;IAED,IAAI,WAAW,IAAI,mBAAmB,CAErC;IAED,IAAI,MAAM,WAET;IAED,IAAI,MAAM,WAGT;IAED,IAAI,QAAQ,cAUX;IAED,IAAI,YAAY;;;;MAQf;IAED,IAAI,GAAG,WAEN;IAED,IAAI,EAAE,WAEL;IAED,IAAI,MAAM,IAAI,OAAO,GAAG,SAAS,CAIhC;IAED,IAAI,QAAQ,cAKX;IAED,IAAI,IAAI,IAAI,YAAY,CAEvB;IAED,IAAI,KAAK,YAYR;IAED,IAAI,IAAI,WAEP;IAED,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAIpC,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM;IAIrC,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM;IAKrC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM;IAUrC,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM;IAUrE,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM;IAI/B,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM;IAMjD,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,SAAK;IAWrD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY;IAIlC,cAAc,CAAC,IAAI,EAAE,MAAM;IAc3B,KAAK;IAIL,SAAS,CAAC,OAAO,EAAE,OAAO;IAI1B,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI7B,OAAO;IAKP,kBAAkB,CAAC,IAAI,EAAE,MAAM;;;;;;IAiC/B,4CAA4C;IAC5C,eAAe;;;;;IAIf,eAAe,CAAC,WAAW,EAAE,mBAAmB;IAUhD,QAAQ,CAAC,SAAS,EAAE,MAAM;IAyB1B,KAAK,CAAC,EAAE,EAAE,MAAM;IAKhB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAM/B,OAAO,CAAC,IAAI,EAAE,MAAM;IAMpB,mCAAmC;IACnC,cAAc;IAId,iCAAiC;IACjC,WAAW;IAIX,sCAAsC;IACtC,gBAAgB;IAKhB,iCAAiC;IACjC,WAAW;IAIX,mCAAmC;IACnC,aAAa,IAAI,mBAAmB;IAIpC,8BAA8B;IAC9B,QAAQ;IAIR,8BAA8B;IAC9B,QAAQ;IAIR,mCAAmC;IACnC,KAAK;IAIL,MAAM,IAAI,MAAM;IAIhB,aAAa;IAOb,QAAQ;IAIR,oCAAoC;IACpC,MAAM,IAAI,YAAY;IAItB,SAAS,CAAC,SAAS;CAKpB"}
1
+ {"version":3,"file":"Quadkey.d.ts","sourceRoot":"","sources":["../../src/Quadkey.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,OAAO,EACP,mBAAmB,EACnB,YAAY,EAMb,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAM9C,eAAO,MAAM,SAAS,QAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,YAA+B,CAAA;AAU9E,qBAAa,OAAO;IASN,OAAO,CAAC,GAAG;IARvB,MAAM,CAAC,IAAI,UAAsB;IACjC,MAAM,CAAC,IAAI,UAAgB;IAC3B,MAAM,CAAC,IAAI,SAAY;IAEvB,IAAI,SAAe;IAEnB,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAEN,GAAG,SAAK;IAK5B,IAAI,YAAY,WAEf;IAED,IAAI,SAAS,WAEZ;IAED,IAAI,cAAc,WAGjB;IAED,IAAI,WAAW,IAAI,mBAAmB,CAErC;IAED,IAAI,MAAM,WAET;IAED,IAAI,MAAM,WAGT;IAED,IAAI,QAAQ,cAQX;IAED,IAAI,YAAY;;;;MAQf;IAED,IAAI,EAAE,WAEL;IAED,IAAI,MAAM,IAAI,OAAO,GAAG,SAAS,CAIhC;IAED,IAAI,QAAQ,cAKX;IAED,IAAI,IAAI,IAAI,YAAY,CAEvB;IAED,IAAI,KAAK,YAGR;IAED,IAAI,IAAI,WAGP;IAED,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAIpC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW;IAIpD,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM;IAIrC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM;IAarC,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM;IAUrE,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM;IAMjD,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,SAAK;IASrD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY;IAIlC,cAAc,CAAC,IAAI,EAAE,MAAM;IAc3B,KAAK;IAIL,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI7B,OAAO;IAKP,kBAAkB,CAAC,IAAI,EAAE,MAAM;;;;;;IAiC/B,4CAA4C;IAC5C,eAAe;;;;;IAIf,eAAe,CAAC,WAAW,EAAE,mBAAmB;IAUhD,QAAQ,CAAC,SAAS,EAAE,MAAM;IAyB1B,KAAK,CAAC,EAAE,EAAE,MAAM;IAMhB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAOhC,OAAO,CAAC,IAAI,EAAE,MAAM;IAMpB,MAAM,IAAI,MAAM;IAIhB,QAAQ;IAIR,SAAS,CAAC,SAAS;CAIpB"}
@@ -1,26 +1,21 @@
1
- /// <reference types="node" />
2
- import { BigNumber } from '@xylabs/bignumber';
3
- import { Buffer } from '@xylabs/buffer';
4
1
  import { GeoJson, MercatorBoundingBox, MercatorTile } from '@xyo-network/sdk-geo';
5
2
  import { LngLat, LngLatLike } from 'mapbox-gl';
6
- export * from './utils';
7
3
  export declare const isQuadkey: (obj: {
8
4
  type: string;
9
5
  }) => boolean;
10
6
  export declare class Quadkey {
7
+ private key;
11
8
  static Zero: Quadkey;
12
9
  static root: Quadkey;
13
10
  static type: string;
14
11
  type: string;
15
12
  private _geoJson?;
16
- private key;
17
- constructor(key?: Buffer);
18
- get base10String(): string;
13
+ constructor(key?: bigint);
14
+ get base16String(): string;
19
15
  get base4Hash(): string;
20
16
  get base4HashLabel(): string;
21
- get bigNumber(): BigNumber;
22
17
  get boundingBox(): MercatorBoundingBox;
23
- get buffer(): Buffer;
18
+ get buffer(): bigint;
24
19
  get center(): LngLat;
25
20
  get children(): Quadkey[];
26
21
  get gridLocation(): {
@@ -28,25 +23,22 @@ export declare class Quadkey {
28
23
  row: number;
29
24
  zoom: number;
30
25
  };
31
- get hex(): string;
32
- get id(): Buffer;
26
+ get id(): bigint;
33
27
  get parent(): Quadkey | undefined;
34
28
  get siblings(): Quadkey[];
35
29
  get tile(): MercatorTile;
36
30
  get valid(): boolean;
37
31
  get zoom(): number;
38
- static from(zoom: number, id: Buffer): Quadkey;
39
- static fromBase10String(value: string): Quadkey;
32
+ static from(zoom: number, id: bigint): Quadkey;
33
+ static fromArrayBuffer(zoom: number, id: ArrayBuffer): Quadkey;
40
34
  static fromBase16String(value: string): Quadkey;
41
- static fromBase4String(value?: string): Quadkey | undefined;
35
+ static fromBase4String(value?: string): Quadkey;
42
36
  static fromBoundingBox(boundingBox: MercatorBoundingBox, zoom: number): Quadkey[];
43
- static fromBuffer(value: Buffer): Quadkey;
44
- static fromLngLat(point: LngLatLike, zoom: number): Quadkey | undefined;
37
+ static fromLngLat(point: LngLatLike, zoom: number): Quadkey;
45
38
  static fromString(zoom: number, id: string, base?: number): Quadkey;
46
- static fromTile(tile: MercatorTile): Quadkey | undefined;
39
+ static fromTile(tile: MercatorTile): Quadkey;
47
40
  childrenByZoom(zoom: number): Quadkey[];
48
41
  clone(): Quadkey;
49
- compareTo(quadkey: Quadkey): 0 | 1 | -1;
50
42
  equals(obj: Quadkey): boolean;
51
43
  geoJson(): GeoJson;
52
44
  getGridBoundingBox(size: number): {
@@ -62,31 +54,12 @@ export declare class Quadkey {
62
54
  zoom: number;
63
55
  };
64
56
  isInBoundingBox(boundingBox: MercatorBoundingBox): boolean;
65
- relative(direction: string): Quadkey | undefined;
66
- setId(id: Buffer): this;
67
- setKey(zoom: number, id: Buffer): this;
57
+ relative(direction: string): Quadkey;
58
+ setId(id: bigint): this;
59
+ setKey(zoom: number, key: bigint): this;
68
60
  setZoom(zoom: number): this;
69
- /** @deprecated use .base10String*/
70
- toBase10String(): string;
71
- /** @deprecated use .base4Hash */
72
- toBase4Hash(): string;
73
- /** @deprecated use .base4HashLabel */
74
- toBase4HashLabel(): string;
75
- /** @deprecated use .bigNumber */
76
- toBigNumber(): BigNumber;
77
- /** @deprecated use .boundingBox */
78
- toBoundingBox(): MercatorBoundingBox;
79
- /** @deprecated use .buffer */
80
- toBuffer(): Buffer;
81
- /** @deprecated use .center */
82
- toCenter(): LngLat;
83
- /** @deprecated use .hex instead */
84
- toHex(): string;
85
61
  toJSON(): string;
86
- toShortString(): string;
87
62
  toString(): string;
88
- /** @deprecated use .tile instead */
89
- toTile(): MercatorTile;
90
63
  protected guessZoom(): void;
91
64
  }
92
65
  //# sourceMappingURL=Quadkey.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Quadkey.d.ts","sourceRoot":"","sources":["../../src/Quadkey.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAEL,OAAO,EACP,mBAAmB,EACnB,YAAY,EAMb,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAK9C,cAAc,SAAS,CAAA;AAIvB,eAAO,MAAM,SAAS,QAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,YAA+B,CAAA;AAE9E,qBAAa,OAAO;IAClB,MAAM,CAAC,IAAI,UAAuC;IAClD,MAAM,CAAC,IAAI,UAAgB;IAC3B,MAAM,CAAC,IAAI,SAAY;IAEvB,IAAI,SAAe;IAEnB,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,GAAG,CAAmB;gBAElB,GAAG,SAAmB;IAKlC,IAAI,YAAY,WAEf;IAED,IAAI,SAAS,WAWZ;IAED,IAAI,cAAc,WAGjB;IAED,IAAI,SAAS,cAEZ;IAED,IAAI,WAAW,IAAI,mBAAmB,CAErC;IAED,IAAI,MAAM,WAET;IAED,IAAI,MAAM,WAGT;IAED,IAAI,QAAQ,cAUX;IAED,IAAI,YAAY;;;;MAQf;IAED,IAAI,GAAG,WAEN;IAED,IAAI,EAAE,WAEL;IAED,IAAI,MAAM,IAAI,OAAO,GAAG,SAAS,CAIhC;IAED,IAAI,QAAQ,cAKX;IAED,IAAI,IAAI,IAAI,YAAY,CAEvB;IAED,IAAI,KAAK,YAYR;IAED,IAAI,IAAI,WAEP;IAED,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAIpC,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM;IAIrC,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM;IAKrC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM;IAUrC,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM;IAUrE,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM;IAI/B,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM;IAMjD,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,SAAK;IAWrD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY;IAIlC,cAAc,CAAC,IAAI,EAAE,MAAM;IAc3B,KAAK;IAIL,SAAS,CAAC,OAAO,EAAE,OAAO;IAI1B,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI7B,OAAO;IAKP,kBAAkB,CAAC,IAAI,EAAE,MAAM;;;;;;IAiC/B,4CAA4C;IAC5C,eAAe;;;;;IAIf,eAAe,CAAC,WAAW,EAAE,mBAAmB;IAUhD,QAAQ,CAAC,SAAS,EAAE,MAAM;IAyB1B,KAAK,CAAC,EAAE,EAAE,MAAM;IAKhB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAM/B,OAAO,CAAC,IAAI,EAAE,MAAM;IAMpB,mCAAmC;IACnC,cAAc;IAId,iCAAiC;IACjC,WAAW;IAIX,sCAAsC;IACtC,gBAAgB;IAKhB,iCAAiC;IACjC,WAAW;IAIX,mCAAmC;IACnC,aAAa,IAAI,mBAAmB;IAIpC,8BAA8B;IAC9B,QAAQ;IAIR,8BAA8B;IAC9B,QAAQ;IAIR,mCAAmC;IACnC,KAAK;IAIL,MAAM,IAAI,MAAM;IAIhB,aAAa;IAOb,QAAQ;IAIR,oCAAoC;IACpC,MAAM,IAAI,YAAY;IAItB,SAAS,CAAC,SAAS;CAKpB"}
1
+ {"version":3,"file":"Quadkey.d.ts","sourceRoot":"","sources":["../../src/Quadkey.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,OAAO,EACP,mBAAmB,EACnB,YAAY,EAMb,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAM9C,eAAO,MAAM,SAAS,QAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,YAA+B,CAAA;AAU9E,qBAAa,OAAO;IASN,OAAO,CAAC,GAAG;IARvB,MAAM,CAAC,IAAI,UAAsB;IACjC,MAAM,CAAC,IAAI,UAAgB;IAC3B,MAAM,CAAC,IAAI,SAAY;IAEvB,IAAI,SAAe;IAEnB,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAEN,GAAG,SAAK;IAK5B,IAAI,YAAY,WAEf;IAED,IAAI,SAAS,WAEZ;IAED,IAAI,cAAc,WAGjB;IAED,IAAI,WAAW,IAAI,mBAAmB,CAErC;IAED,IAAI,MAAM,WAET;IAED,IAAI,MAAM,WAGT;IAED,IAAI,QAAQ,cAQX;IAED,IAAI,YAAY;;;;MAQf;IAED,IAAI,EAAE,WAEL;IAED,IAAI,MAAM,IAAI,OAAO,GAAG,SAAS,CAIhC;IAED,IAAI,QAAQ,cAKX;IAED,IAAI,IAAI,IAAI,YAAY,CAEvB;IAED,IAAI,KAAK,YAGR;IAED,IAAI,IAAI,WAGP;IAED,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAIpC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW;IAIpD,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM;IAIrC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM;IAarC,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM;IAUrE,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM;IAMjD,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,SAAK;IASrD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY;IAIlC,cAAc,CAAC,IAAI,EAAE,MAAM;IAc3B,KAAK;IAIL,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI7B,OAAO;IAKP,kBAAkB,CAAC,IAAI,EAAE,MAAM;;;;;;IAiC/B,4CAA4C;IAC5C,eAAe;;;;;IAIf,eAAe,CAAC,WAAW,EAAE,mBAAmB;IAUhD,QAAQ,CAAC,SAAS,EAAE,MAAM;IAyB1B,KAAK,CAAC,EAAE,EAAE,MAAM;IAMhB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAOhC,OAAO,CAAC,IAAI,EAAE,MAAM;IAMpB,MAAM,IAAI,MAAM;IAIhB,QAAQ;IAIR,SAAS,CAAC,SAAS;CAIpB"}
@@ -21,17 +21,13 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
21
21
  var src_exports = {};
22
22
  __export(src_exports, {
23
23
  Quadkey: () => Quadkey,
24
- bitShiftLeft: () => bitShiftLeft,
25
- bitShiftRight: () => bitShiftRight,
26
- isQuadkey: () => isQuadkey,
27
- padHex: () => padHex
24
+ isQuadkey: () => isQuadkey
28
25
  });
29
26
  module.exports = __toCommonJS(src_exports);
30
27
 
31
28
  // src/Quadkey.ts
32
29
  var import_assert = require("@xylabs/assert");
33
- var import_bignumber = require("@xylabs/bignumber");
34
- var import_buffer2 = require("@xylabs/buffer");
30
+ var import_hex = require("@xylabs/hex");
35
31
  var import_sdk_geo = require("@xyo-network/sdk-geo");
36
32
  var import_mapbox_gl = require("mapbox-gl");
37
33
 
@@ -43,81 +39,36 @@ var RelativeDirectionConstantLookup = {
43
39
  w: -1
44
40
  };
45
41
 
46
- // src/utils.ts
47
- var import_buffer = require("@xylabs/buffer");
48
- var padHex = (hex, byteCount) => {
49
- let result = hex;
50
- if (hex.length % 2 !== 0) {
51
- result = `0${hex}`;
52
- }
53
- if (byteCount) {
54
- while (result.length / 2 < byteCount) {
55
- result = `00${result}`;
56
- }
57
- }
58
- return result;
59
- };
60
- var bitShiftLeft = (buffer) => {
61
- const shifted = import_buffer.Buffer.alloc(buffer.length);
62
- const last = buffer.length - 1;
63
- for (let index = 0; index < last; index++) {
64
- shifted[index] = buffer[index] << 1;
65
- if (buffer[index + 1] & 128) {
66
- shifted[index] += 1;
67
- }
68
- }
69
- shifted[last] = buffer[last] << 1;
70
- return shifted;
71
- };
72
- var bitShiftRight = (buffer) => {
73
- const shifted = import_buffer.Buffer.alloc(buffer.length);
74
- const last = buffer.length - 1;
75
- for (let index = last; index > 0; index--) {
76
- shifted[index] = buffer[index] >> 1;
77
- if (buffer[index - 1] & 1) {
78
- shifted[index] += 128;
79
- }
80
- }
81
- shifted[0] = buffer[0] >> 1;
82
- return shifted;
83
- };
84
-
85
42
  // src/Quadkey.ts
86
43
  var MAX_ZOOM = 124;
87
44
  var isQuadkey = (obj) => (obj == null ? void 0 : obj.type) === Quadkey.type;
45
+ var FULL_MASK = 2n ** 256n - 1n;
46
+ var ZOOM_MASK = 0xffn << 248n;
47
+ var ID_MASK = ZOOM_MASK ^ FULL_MASK;
48
+ var assertMaxBitUint = (value, bits = 256n) => {
49
+ (0, import_assert.assertEx)(value < 2n ** bits && value >= 0, "Not a 256 Bit Uint!");
50
+ };
88
51
  var Quadkey = class _Quadkey {
89
- static Zero = _Quadkey.from(0, import_buffer2.Buffer.alloc(31, 0));
52
+ constructor(key = 0n) {
53
+ this.key = key;
54
+ assertMaxBitUint(key);
55
+ this.guessZoom();
56
+ }
57
+ static Zero = _Quadkey.from(0, 0n);
90
58
  static root = new _Quadkey();
91
59
  static type = "Quadkey";
92
60
  type = _Quadkey.type;
93
61
  _geoJson;
94
- key = import_buffer2.Buffer.alloc(32);
95
- constructor(key = import_buffer2.Buffer.alloc(32)) {
96
- key.copy(this.key, this.key.length - key.length);
97
- this.guessZoom();
98
- }
99
- get base10String() {
100
- return this.bigNumber.toString(10);
62
+ get base16String() {
63
+ return this.id.toString(16).padStart(62, "0");
101
64
  }
102
65
  get base4Hash() {
103
- const bn = new import_bignumber.BigNumber(this.id.toString("hex"), 16);
104
- const zoom = this.zoom;
105
- if (zoom === 0) {
106
- return "";
107
- }
108
- let quadkeySimple = bn.toString(4);
109
- while (quadkeySimple.length < zoom) {
110
- quadkeySimple = `0${quadkeySimple}`;
111
- }
112
- return quadkeySimple;
66
+ return this.id.toString(4).padStart(this.zoom, "0");
113
67
  }
114
68
  get base4HashLabel() {
115
69
  const hash = this.base4Hash;
116
70
  return hash.length === 0 ? "fhr" : hash;
117
71
  }
118
- get bigNumber() {
119
- return new import_bignumber.BigNumber(`${this.key.toString("hex")}`, "hex");
120
- }
121
72
  get boundingBox() {
122
73
  return (0, import_sdk_geo.tileToBoundingBox)(this.tile);
123
74
  }
@@ -131,11 +82,9 @@ var Quadkey = class _Quadkey {
131
82
  get children() {
132
83
  (0, import_assert.assertEx)(this.zoom < MAX_ZOOM - 1, "Can not get children of bottom tiles");
133
84
  const result = [];
134
- const shiftedId = bitShiftLeft(bitShiftLeft(this.id));
135
- for (let i = 0; i < 4; i++) {
136
- const currentLastByte = shiftedId.readUInt8(shiftedId.length - 1);
137
- shiftedId.writeUInt8(currentLastByte & 252 | i, shiftedId.length - 1);
138
- result.push(new _Quadkey().setId(shiftedId).setZoom(this.zoom + 1));
85
+ const shiftedId = this.id << 2n;
86
+ for (let i = 0n; i < 4n; i++) {
87
+ result.push(new _Quadkey().setId(shiftedId | i).setZoom(this.zoom + 1));
139
88
  }
140
89
  return result;
141
90
  }
@@ -147,21 +96,18 @@ var Quadkey = class _Quadkey {
147
96
  zoom: tileData[2]
148
97
  };
149
98
  }
150
- get hex() {
151
- return `0x${this.key.toString("hex")}`;
152
- }
153
99
  get id() {
154
- return this.buffer.slice(1);
100
+ return this.key & ID_MASK;
155
101
  }
156
102
  get parent() {
157
103
  if (this.zoom > 0) {
158
- return new _Quadkey().setId(bitShiftRight(bitShiftRight(this.id))).setZoom(this.zoom - 1);
104
+ return new _Quadkey().setId(this.id >> 2n).setZoom(this.zoom - 1);
159
105
  }
160
106
  }
161
107
  get siblings() {
162
108
  var _a;
163
109
  const siblings = (0, import_assert.assertEx)((_a = this.parent) == null ? void 0 : _a.children, `siblings: parentChildren ${this.base4Hash}`);
164
- const filteredSiblings = siblings.filter((quadkey) => this.compareTo(quadkey) !== 0);
110
+ const filteredSiblings = siblings.filter((quadkey) => quadkey.key !== this.key);
165
111
  (0, import_assert.assertEx)(filteredSiblings.length === 3, `siblings: expected 3 [${filteredSiblings.length}]`);
166
112
  return filteredSiblings;
167
113
  }
@@ -169,39 +115,31 @@ var Quadkey = class _Quadkey {
169
115
  return (0, import_sdk_geo.tileFromQuadkey)(this.base4Hash);
170
116
  }
171
117
  get valid() {
172
- const zoom = this.zoom;
173
- const shift = (MAX_ZOOM - zoom) * 2;
174
- const id = this.id;
175
- let testId = id;
176
- for (let i = 0; i < shift; i++) {
177
- testId = bitShiftLeft(testId);
178
- }
179
- for (let i = 0; i < shift; i++) {
180
- testId = bitShiftRight(testId);
181
- }
182
- return testId.compare(id) === 0;
118
+ return this.id.toString(4) === this.base4Hash.padStart(64, "0");
183
119
  }
184
120
  get zoom() {
185
- return this.buffer.readUInt8(0);
121
+ return Number((this.key & ZOOM_MASK) >> 248n);
186
122
  }
187
123
  static from(zoom, id) {
188
124
  return new _Quadkey().setId(id).setZoom(zoom);
189
125
  }
190
- static fromBase10String(value) {
191
- return new _Quadkey(import_buffer2.Buffer.from(padHex(new import_bignumber.BigNumber(value, 10).toString(16)), "hex"));
126
+ static fromArrayBuffer(zoom, id) {
127
+ return new _Quadkey().setId(BigInt(`0x${(0, import_hex.asHex)(id, 256, true)}`)).setZoom(zoom);
192
128
  }
193
129
  static fromBase16String(value) {
194
- const valueToUse = value.startsWith("0x") ? value.slice(2) : value;
195
- return new _Quadkey(import_buffer2.Buffer.from(padHex(valueToUse), "hex"));
130
+ return new _Quadkey(BigInt(`0x${(0, import_hex.asHex)(value, 256, true)}`));
196
131
  }
197
132
  static fromBase4String(value) {
198
- if (value === "fhr" || value === "") {
133
+ if (value === "fhr" || value === "" || value === void 0) {
199
134
  return _Quadkey.root;
200
135
  }
201
- if (value && value.length && value.length > 0) {
202
- const quadkey = new _Quadkey(import_buffer2.Buffer.from(padHex(new import_bignumber.BigNumber(value, 4).toString(16)), "hex")).setZoom(value.length);
203
- return quadkey.valid ? quadkey : void 0;
136
+ let id = 0n;
137
+ for (let i = 0; i < value.length; i++) {
138
+ const nibble = parseInt(value[i]);
139
+ (0, import_assert.assertEx)(nibble < 4 && nibble >= 0, `Invalid Base4 String: ${value}`);
140
+ id = id << 2n | BigInt(nibble);
204
141
  }
142
+ return new _Quadkey().setId(id).setZoom(value.length);
205
143
  }
206
144
  static fromBoundingBox(boundingBox, zoom) {
207
145
  const tiles = (0, import_sdk_geo.tilesFromBoundingBox)(boundingBox, Math.floor(zoom));
@@ -211,19 +149,13 @@ var Quadkey = class _Quadkey {
211
149
  }
212
150
  return result;
213
151
  }
214
- static fromBuffer(value) {
215
- return _Quadkey.fromBase16String(value.toString("hex"));
216
- }
217
152
  static fromLngLat(point, zoom) {
218
153
  const tile = (0, import_sdk_geo.tileFromPoint)(import_mapbox_gl.LngLat.convert(point), zoom);
219
154
  const quadkeyString = (0, import_sdk_geo.tileToQuadkey)(tile);
220
155
  return _Quadkey.fromBase4String(quadkeyString);
221
156
  }
222
- static fromString(zoom, id, base = 10) {
223
- var _a;
157
+ static fromString(zoom, id, base = 16) {
224
158
  switch (base) {
225
- case 10:
226
- return (_a = _Quadkey.fromBase10String(id)) == null ? void 0 : _a.setZoom(zoom);
227
159
  case 16:
228
160
  return _Quadkey.fromBase16String(id).setZoom(zoom);
229
161
  default:
@@ -244,13 +176,10 @@ var Quadkey = class _Quadkey {
244
176
  return deepResult;
245
177
  }
246
178
  clone() {
247
- return _Quadkey.fromBase10String(this.base10String);
248
- }
249
- compareTo(quadkey) {
250
- return this.bigNumber.cmp(quadkey.bigNumber);
179
+ return new _Quadkey(this.key);
251
180
  }
252
181
  equals(obj) {
253
- return obj.base4HashLabel == this.base4HashLabel;
182
+ return obj.key == this.key;
254
183
  }
255
184
  geoJson() {
256
185
  this._geoJson = this._geoJson ?? new import_sdk_geo.GeoJson(this.base4Hash);
@@ -321,80 +250,35 @@ var Quadkey = class _Quadkey {
321
250
  return _Quadkey.fromBase4String(quadkey);
322
251
  }
323
252
  setId(id) {
253
+ assertMaxBitUint(id, 248n);
324
254
  this.setKey(this.zoom, id);
325
255
  return this;
326
256
  }
327
- setKey(zoom, id) {
328
- id.copy(this.key, this.key.length - id.length);
329
- this.key.writeUInt8(zoom, 0);
257
+ setKey(zoom, key) {
258
+ assertMaxBitUint(key);
259
+ this.key = key;
260
+ this.setZoom(zoom);
330
261
  return this;
331
262
  }
332
263
  setZoom(zoom) {
333
264
  (0, import_assert.assertEx)(zoom < MAX_ZOOM, `Invalid zoom [${zoom}] max=${MAX_ZOOM}`);
334
- this.setKey(zoom, this.id);
265
+ this.key = this.key & ID_MASK | BigInt(zoom) << 248n;
335
266
  return this;
336
267
  }
337
- /** @deprecated use .base10String*/
338
- toBase10String() {
339
- return this.base10String;
340
- }
341
- /** @deprecated use .base4Hash */
342
- toBase4Hash() {
343
- return this.base4Hash;
344
- }
345
- /** @deprecated use .base4HashLabel */
346
- toBase4HashLabel() {
347
- const hash = this.base4HashLabel;
348
- return hash.length === 0 ? "fhr" : hash;
349
- }
350
- /** @deprecated use .bigNumber */
351
- toBigNumber() {
352
- return this.bigNumber;
353
- }
354
- /** @deprecated use .boundingBox */
355
- toBoundingBox() {
356
- return this.boundingBox;
357
- }
358
- /** @deprecated use .buffer */
359
- toBuffer() {
360
- return this.buffer;
361
- }
362
- /** @deprecated use .center */
363
- toCenter() {
364
- return this.center;
365
- }
366
- /** @deprecated use .hex instead */
367
- toHex() {
368
- return this.hex;
369
- }
370
268
  toJSON() {
371
269
  return this.base4HashLabel;
372
270
  }
373
- toShortString() {
374
- const buffer = this.buffer;
375
- const part1 = buffer.slice(0, 2);
376
- const part2 = buffer.slice(buffer.length - 2, buffer.length);
377
- return `${part1.toString("hex")}...${part2.toString("hex")}`;
378
- }
379
271
  toString() {
380
- return `0x${padHex(this.bigNumber.toString(16))}`;
381
- }
382
- /** @deprecated use .tile instead */
383
- toTile() {
384
- return this.tile;
272
+ return this.base4Hash;
385
273
  }
386
274
  guessZoom() {
387
- const bn = new import_bignumber.BigNumber(this.id.toString("hex"), 16);
388
- const quadkeySimple = bn.toString(4);
275
+ const quadkeySimple = this.id.toString(4);
389
276
  this.setZoom(quadkeySimple.length);
390
277
  }
391
278
  };
392
279
  // Annotate the CommonJS export names for ESM import in node:
393
280
  0 && (module.exports = {
394
281
  Quadkey,
395
- bitShiftLeft,
396
- bitShiftRight,
397
- isQuadkey,
398
- padHex
282
+ isQuadkey
399
283
  });
400
284
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Quadkey.ts","../../src/RelativeDirectionConstantLookup.ts","../../src/utils.ts"],"sourcesContent":["export * from './Quadkey'\n","import { assertEx } from '@xylabs/assert'\nimport { BigNumber } from '@xylabs/bignumber'\nimport { Buffer } from '@xylabs/buffer'\nimport {\n boundingBoxToCenter,\n GeoJson,\n MercatorBoundingBox,\n MercatorTile,\n tileFromPoint,\n tileFromQuadkey,\n tilesFromBoundingBox,\n tileToBoundingBox,\n tileToQuadkey,\n} from '@xyo-network/sdk-geo'\nimport { LngLat, LngLatLike } from 'mapbox-gl'\n\nimport { RelativeDirectionConstantLookup } from './RelativeDirectionConstantLookup'\nimport { bitShiftLeft, bitShiftRight, padHex } from './utils'\n\nexport * from './utils'\n\nconst MAX_ZOOM = 124\n\nexport const isQuadkey = (obj: { type: string }) => obj?.type === Quadkey.type\n\nexport class Quadkey {\n static Zero = Quadkey.from(0, Buffer.alloc(31, 0))\n static root = new Quadkey()\n static type = 'Quadkey'\n\n type = Quadkey.type\n\n private _geoJson?: GeoJson\n private key = Buffer.alloc(32)\n\n constructor(key = Buffer.alloc(32)) {\n key.copy(this.key, this.key.length - key.length)\n this.guessZoom()\n }\n\n get base10String() {\n return this.bigNumber.toString(10)\n }\n\n get base4Hash() {\n const bn = new BigNumber(this.id.toString('hex'), 16)\n const zoom = this.zoom\n if (zoom === 0) {\n return ''\n }\n let quadkeySimple = bn.toString(4)\n while (quadkeySimple.length < zoom) {\n quadkeySimple = `0${quadkeySimple}`\n }\n return quadkeySimple\n }\n\n get base4HashLabel() {\n const hash = this.base4Hash\n return hash.length === 0 ? 'fhr' : hash\n }\n\n get bigNumber() {\n return new BigNumber(`${this.key.toString('hex')}`, 'hex')\n }\n\n get boundingBox(): MercatorBoundingBox {\n return tileToBoundingBox(this.tile)\n }\n\n get buffer() {\n return this.key\n }\n\n get center() {\n const result = boundingBoxToCenter(this.boundingBox)\n return new LngLat(result[0], result[1])\n }\n\n get children() {\n assertEx(this.zoom < MAX_ZOOM - 1, 'Can not get children of bottom tiles')\n const result: Quadkey[] = []\n const shiftedId = bitShiftLeft(bitShiftLeft(this.id))\n for (let i = 0; i < 4; i++) {\n const currentLastByte = shiftedId.readUInt8(shiftedId.length - 1)\n shiftedId.writeUInt8((currentLastByte & 0xfc) | i, shiftedId.length - 1)\n result.push(new Quadkey().setId(shiftedId).setZoom(this.zoom + 1))\n }\n return result\n }\n\n get gridLocation() {\n const tileData = tileFromQuadkey(this.base4Hash)\n\n return {\n col: 2 ** tileData[2] - tileData[1] - 1,\n row: tileData[0],\n zoom: tileData[2],\n }\n }\n\n get hex() {\n return `0x${this.key.toString('hex')}`\n }\n\n get id() {\n return this.buffer.slice(1)\n }\n\n get parent(): Quadkey | undefined {\n if (this.zoom > 0) {\n return new Quadkey().setId(bitShiftRight(bitShiftRight(this.id))).setZoom(this.zoom - 1)\n }\n }\n\n get siblings() {\n const siblings = assertEx(this.parent?.children, `siblings: parentChildren ${this.base4Hash}`)\n const filteredSiblings = siblings.filter((quadkey) => this.compareTo(quadkey) !== 0)\n assertEx(filteredSiblings.length === 3, `siblings: expected 3 [${filteredSiblings.length}]`)\n return filteredSiblings\n }\n\n get tile(): MercatorTile {\n return tileFromQuadkey(this.base4Hash)\n }\n\n get valid() {\n const zoom = this.zoom\n const shift = (MAX_ZOOM - zoom) * 2\n const id = this.id\n let testId = id\n for (let i = 0; i < shift; i++) {\n testId = bitShiftLeft(testId)\n }\n for (let i = 0; i < shift; i++) {\n testId = bitShiftRight(testId)\n }\n return testId.compare(id) === 0\n }\n\n get zoom() {\n return this.buffer.readUInt8(0)\n }\n\n static from(zoom: number, id: Buffer) {\n return new Quadkey().setId(id).setZoom(zoom)\n }\n\n static fromBase10String(value: string) {\n return new Quadkey(Buffer.from(padHex(new BigNumber(value, 10).toString(16)), 'hex'))\n }\n\n static fromBase16String(value: string) {\n const valueToUse = value.startsWith('0x') ? value.slice(2) : value\n return new Quadkey(Buffer.from(padHex(valueToUse), 'hex'))\n }\n\n static fromBase4String(value?: string) {\n if (value === 'fhr' || value === '') {\n return Quadkey.root\n }\n if (value && value.length && value.length > 0) {\n const quadkey = new Quadkey(Buffer.from(padHex(new BigNumber(value, 4).toString(16)), 'hex')).setZoom(value.length)\n return quadkey.valid ? quadkey : undefined\n }\n }\n\n static fromBoundingBox(boundingBox: MercatorBoundingBox, zoom: number) {\n const tiles = tilesFromBoundingBox(boundingBox, Math.floor(zoom))\n const result: Quadkey[] = []\n for (const tile of tiles) {\n result.push(assertEx(Quadkey.fromTile(tile), 'Bad Quadkey'))\n }\n\n return result\n }\n\n static fromBuffer(value: Buffer) {\n return Quadkey.fromBase16String(value.toString('hex'))\n }\n\n static fromLngLat(point: LngLatLike, zoom: number) {\n const tile = tileFromPoint(LngLat.convert(point), zoom)\n const quadkeyString = tileToQuadkey(tile)\n return Quadkey.fromBase4String(quadkeyString)\n }\n\n static fromString(zoom: number, id: string, base = 10) {\n switch (base) {\n case 10:\n return Quadkey.fromBase10String(id)?.setZoom(zoom)\n case 16:\n return Quadkey.fromBase16String(id).setZoom(zoom)\n default:\n throw Error(`Invalid base [${base}]`)\n }\n }\n\n static fromTile(tile: MercatorTile) {\n return Quadkey.fromBase4String(tileToQuadkey(tile))\n }\n\n childrenByZoom(zoom: number) {\n // if we are limiting by zoom, and we are already at that limit, just return this quadkey\n if (zoom && zoom === this.zoom) {\n return [this]\n }\n\n // recursively get children\n let deepResult: Quadkey[] = []\n for (const quadkey of this.children) {\n deepResult = deepResult.concat(quadkey.childrenByZoom(zoom))\n }\n return deepResult\n }\n\n clone() {\n return Quadkey.fromBase10String(this.base10String)\n }\n\n compareTo(quadkey: Quadkey) {\n return this.bigNumber.cmp(quadkey.bigNumber)\n }\n\n equals(obj: Quadkey): boolean {\n return obj.base4HashLabel == this.base4HashLabel\n }\n\n geoJson() {\n this._geoJson = this._geoJson ?? new GeoJson(this.base4Hash)\n return this._geoJson\n }\n\n getGridBoundingBox(size: number) {\n const hash = this.base4Hash\n let index = 0\n let left = 0\n let top = 0\n let blockSize = size\n while (index < hash.length) {\n blockSize >>= 1\n switch (hash[index]) {\n case '1':\n left += blockSize\n break\n case '2':\n top += blockSize\n break\n case '3':\n left += blockSize\n top += blockSize\n break\n }\n index++\n }\n if (blockSize < 2) {\n blockSize = 2\n }\n return {\n height: blockSize,\n left,\n top,\n width: blockSize,\n }\n }\n\n /** @deprecated use .gridLocation instead */\n getGridLocation() {\n return this.gridLocation\n }\n\n isInBoundingBox(boundingBox: MercatorBoundingBox) {\n const tileBoundingBox = tileToBoundingBox(this.tile)\n return (\n boundingBox.contains(tileBoundingBox.getNorthEast()) ||\n boundingBox.contains(tileBoundingBox.getNorthWest()) ||\n boundingBox.contains(tileBoundingBox.getSouthEast()) ||\n boundingBox.contains(tileBoundingBox.getSouthWest())\n )\n }\n\n relative(direction: string) {\n const directionConstant = assertEx(RelativeDirectionConstantLookup[direction], 'Invalid direction')\n let quadkey = this.base4Hash\n if (quadkey.length === 0) {\n return this\n }\n let index = quadkey.length - 1\n while (index >= 0) {\n let number = parseInt(quadkey.charAt(index))\n number += directionConstant\n if (number > 3) {\n number -= 4\n quadkey = quadkey.substring(0, index) + number.toString() + quadkey.substring(index + 1)\n index--\n } else if (number < 0) {\n number += 4\n quadkey = quadkey.substring(0, index) + number.toString() + quadkey.substring(index + 1)\n index--\n } else {\n index = -1\n }\n }\n return Quadkey.fromBase4String(quadkey)\n }\n\n setId(id: Buffer) {\n this.setKey(this.zoom, id)\n return this\n }\n\n setKey(zoom: number, id: Buffer) {\n id.copy(this.key, this.key.length - id.length)\n this.key.writeUInt8(zoom, 0)\n return this\n }\n\n setZoom(zoom: number) {\n assertEx(zoom < MAX_ZOOM, `Invalid zoom [${zoom}] max=${MAX_ZOOM}`)\n this.setKey(zoom, this.id)\n return this\n }\n\n /** @deprecated use .base10String*/\n toBase10String() {\n return this.base10String\n }\n\n /** @deprecated use .base4Hash */\n toBase4Hash() {\n return this.base4Hash\n }\n\n /** @deprecated use .base4HashLabel */\n toBase4HashLabel() {\n const hash = this.base4HashLabel\n return hash.length === 0 ? 'fhr' : hash\n }\n\n /** @deprecated use .bigNumber */\n toBigNumber() {\n return this.bigNumber\n }\n\n /** @deprecated use .boundingBox */\n toBoundingBox(): MercatorBoundingBox {\n return this.boundingBox\n }\n\n /** @deprecated use .buffer */\n toBuffer() {\n return this.buffer\n }\n\n /** @deprecated use .center */\n toCenter() {\n return this.center\n }\n\n /** @deprecated use .hex instead */\n toHex() {\n return this.hex\n }\n\n toJSON(): string {\n return this.base4HashLabel\n }\n\n toShortString() {\n const buffer = this.buffer\n const part1 = buffer.slice(0, 2)\n const part2 = buffer.slice(buffer.length - 2, buffer.length)\n return `${part1.toString('hex')}...${part2.toString('hex')}`\n }\n\n toString() {\n return `0x${padHex(this.bigNumber.toString(16))}`\n }\n\n /** @deprecated use .tile instead */\n toTile(): MercatorTile {\n return this.tile\n }\n\n protected guessZoom() {\n const bn = new BigNumber(this.id.toString('hex'), 16)\n const quadkeySimple = bn.toString(4)\n this.setZoom(quadkeySimple.length)\n }\n}\n","export const RelativeDirectionConstantLookup: Record<string, number> = {\n e: 1,\n n: -2,\n s: 2,\n w: -1,\n}\n","import { Buffer } from '@xylabs/buffer'\n\nexport const padHex = (hex: string, byteCount?: number) => {\n let result = hex\n if (hex.length % 2 !== 0) {\n result = `0${hex}`\n }\n if (byteCount) {\n while (result.length / 2 < byteCount) {\n result = `00${result}`\n }\n }\n return result\n}\n\nexport const bitShiftLeft = (buffer: Buffer) => {\n const shifted = Buffer.alloc(buffer.length)\n const last = buffer.length - 1\n for (let index = 0; index < last; index++) {\n shifted[index] = buffer[index] << 1\n if (buffer[index + 1] & 0x80) {\n shifted[index] += 0x01\n }\n }\n shifted[last] = buffer[last] << 1\n return shifted\n}\n\nexport const bitShiftRight = (buffer: Buffer) => {\n const shifted = Buffer.alloc(buffer.length)\n const last = buffer.length - 1\n for (let index = last; index > 0; index--) {\n shifted[index] = buffer[index] >> 1\n if (buffer[index - 1] & 0x01) {\n shifted[index] += 0x80\n }\n }\n shifted[0] = buffer[0] >> 1\n return shifted\n}\n"],"mappings":"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","names":["import_buffer"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Quadkey.ts","../../src/RelativeDirectionConstantLookup.ts"],"sourcesContent":["export * from './Quadkey'\n","import { assertEx } from '@xylabs/assert'\nimport { asHex } from '@xylabs/hex'\nimport {\n boundingBoxToCenter,\n GeoJson,\n MercatorBoundingBox,\n MercatorTile,\n tileFromPoint,\n tileFromQuadkey,\n tilesFromBoundingBox,\n tileToBoundingBox,\n tileToQuadkey,\n} from '@xyo-network/sdk-geo'\nimport { LngLat, LngLatLike } from 'mapbox-gl'\n\nimport { RelativeDirectionConstantLookup } from './RelativeDirectionConstantLookup'\n\nconst MAX_ZOOM = 124\n\nexport const isQuadkey = (obj: { type: string }) => obj?.type === Quadkey.type\n\nconst FULL_MASK = 2n ** 256n - 1n\nconst ZOOM_MASK = 0xffn << 248n\nconst ID_MASK = ZOOM_MASK ^ FULL_MASK\n\nconst assertMaxBitUint = (value: bigint, bits = 256n) => {\n assertEx(value < 2n ** bits && value >= 0, 'Not a 256 Bit Uint!')\n}\n\nexport class Quadkey {\n static Zero = Quadkey.from(0, 0n)\n static root = new Quadkey()\n static type = 'Quadkey'\n\n type = Quadkey.type\n\n private _geoJson?: GeoJson\n\n constructor(private key = 0n) {\n assertMaxBitUint(key)\n this.guessZoom()\n }\n\n get base16String() {\n return this.id.toString(16).padStart(62, '0')\n }\n\n get base4Hash() {\n return this.id.toString(4).padStart(this.zoom, '0')\n }\n\n get base4HashLabel() {\n const hash = this.base4Hash\n return hash.length === 0 ? 'fhr' : hash\n }\n\n get boundingBox(): MercatorBoundingBox {\n return tileToBoundingBox(this.tile)\n }\n\n get buffer() {\n return this.key\n }\n\n get center() {\n const result = boundingBoxToCenter(this.boundingBox)\n return new LngLat(result[0], result[1])\n }\n\n get children() {\n assertEx(this.zoom < MAX_ZOOM - 1, 'Can not get children of bottom tiles')\n const result: Quadkey[] = []\n const shiftedId = this.id << 2n\n for (let i = 0n; i < 4n; i++) {\n result.push(new Quadkey().setId(shiftedId | i).setZoom(this.zoom + 1))\n }\n return result\n }\n\n get gridLocation() {\n const tileData = tileFromQuadkey(this.base4Hash)\n\n return {\n col: 2 ** tileData[2] - tileData[1] - 1,\n row: tileData[0],\n zoom: tileData[2],\n }\n }\n\n get id() {\n return this.key & ID_MASK\n }\n\n get parent(): Quadkey | undefined {\n if (this.zoom > 0) {\n return new Quadkey().setId(this.id >> 2n).setZoom(this.zoom - 1)\n }\n }\n\n get siblings() {\n const siblings = assertEx(this.parent?.children, `siblings: parentChildren ${this.base4Hash}`)\n const filteredSiblings = siblings.filter((quadkey) => quadkey.key !== this.key)\n assertEx(filteredSiblings.length === 3, `siblings: expected 3 [${filteredSiblings.length}]`)\n return filteredSiblings\n }\n\n get tile(): MercatorTile {\n return tileFromQuadkey(this.base4Hash)\n }\n\n get valid() {\n //check for additional data outside zoom scope\n return this.id.toString(4) === this.base4Hash.padStart(64, '0')\n }\n\n get zoom() {\n //zoom is stored in top byte\n return Number((this.key & ZOOM_MASK) >> 248n)\n }\n\n static from(zoom: number, id: bigint) {\n return new Quadkey().setId(id).setZoom(zoom)\n }\n\n static fromArrayBuffer(zoom: number, id: ArrayBuffer) {\n return new Quadkey().setId(BigInt(`0x${asHex(id, 256, true)}`)).setZoom(zoom)\n }\n\n static fromBase16String(value: string) {\n return new Quadkey(BigInt(`0x${asHex(value, 256, true)}`))\n }\n\n static fromBase4String(value?: string) {\n if (value === 'fhr' || value === '' || value === undefined) {\n return Quadkey.root\n }\n let id = 0n\n for (let i = 0; i < value.length; i++) {\n const nibble = parseInt(value[i])\n assertEx(nibble < 4 && nibble >= 0, `Invalid Base4 String: ${value}`)\n id = (id << 2n) | BigInt(nibble)\n }\n return new Quadkey().setId(id).setZoom(value.length)\n }\n\n static fromBoundingBox(boundingBox: MercatorBoundingBox, zoom: number) {\n const tiles = tilesFromBoundingBox(boundingBox, Math.floor(zoom))\n const result: Quadkey[] = []\n for (const tile of tiles) {\n result.push(assertEx(Quadkey.fromTile(tile), 'Bad Quadkey'))\n }\n\n return result\n }\n\n static fromLngLat(point: LngLatLike, zoom: number) {\n const tile = tileFromPoint(LngLat.convert(point), zoom)\n const quadkeyString = tileToQuadkey(tile)\n return Quadkey.fromBase4String(quadkeyString)\n }\n\n static fromString(zoom: number, id: string, base = 16) {\n switch (base) {\n case 16:\n return Quadkey.fromBase16String(id).setZoom(zoom)\n default:\n throw Error(`Invalid base [${base}]`)\n }\n }\n\n static fromTile(tile: MercatorTile) {\n return Quadkey.fromBase4String(tileToQuadkey(tile))\n }\n\n childrenByZoom(zoom: number) {\n // if we are limiting by zoom, and we are already at that limit, just return this quadkey\n if (zoom && zoom === this.zoom) {\n return [this]\n }\n\n // recursively get children\n let deepResult: Quadkey[] = []\n for (const quadkey of this.children) {\n deepResult = deepResult.concat(quadkey.childrenByZoom(zoom))\n }\n return deepResult\n }\n\n clone() {\n return new Quadkey(this.key)\n }\n\n equals(obj: Quadkey): boolean {\n return obj.key == this.key\n }\n\n geoJson() {\n this._geoJson = this._geoJson ?? new GeoJson(this.base4Hash)\n return this._geoJson\n }\n\n getGridBoundingBox(size: number) {\n const hash = this.base4Hash\n let index = 0\n let left = 0\n let top = 0\n let blockSize = size\n while (index < hash.length) {\n blockSize >>= 1\n switch (hash[index]) {\n case '1':\n left += blockSize\n break\n case '2':\n top += blockSize\n break\n case '3':\n left += blockSize\n top += blockSize\n break\n }\n index++\n }\n if (blockSize < 2) {\n blockSize = 2\n }\n return {\n height: blockSize,\n left,\n top,\n width: blockSize,\n }\n }\n\n /** @deprecated use .gridLocation instead */\n getGridLocation() {\n return this.gridLocation\n }\n\n isInBoundingBox(boundingBox: MercatorBoundingBox) {\n const tileBoundingBox = tileToBoundingBox(this.tile)\n return (\n boundingBox.contains(tileBoundingBox.getNorthEast()) ||\n boundingBox.contains(tileBoundingBox.getNorthWest()) ||\n boundingBox.contains(tileBoundingBox.getSouthEast()) ||\n boundingBox.contains(tileBoundingBox.getSouthWest())\n )\n }\n\n relative(direction: string) {\n const directionConstant = assertEx(RelativeDirectionConstantLookup[direction], 'Invalid direction')\n let quadkey = this.base4Hash\n if (quadkey.length === 0) {\n return this\n }\n let index = quadkey.length - 1\n while (index >= 0) {\n let number = parseInt(quadkey.charAt(index))\n number += directionConstant\n if (number > 3) {\n number -= 4\n quadkey = quadkey.substring(0, index) + number.toString() + quadkey.substring(index + 1)\n index--\n } else if (number < 0) {\n number += 4\n quadkey = quadkey.substring(0, index) + number.toString() + quadkey.substring(index + 1)\n index--\n } else {\n index = -1\n }\n }\n return Quadkey.fromBase4String(quadkey)\n }\n\n setId(id: bigint) {\n assertMaxBitUint(id, 248n)\n this.setKey(this.zoom, id)\n return this\n }\n\n setKey(zoom: number, key: bigint) {\n assertMaxBitUint(key)\n this.key = key\n this.setZoom(zoom)\n return this\n }\n\n setZoom(zoom: number) {\n assertEx(zoom < MAX_ZOOM, `Invalid zoom [${zoom}] max=${MAX_ZOOM}`)\n this.key = (this.key & ID_MASK) | (BigInt(zoom) << 248n)\n return this\n }\n\n toJSON(): string {\n return this.base4HashLabel\n }\n\n toString() {\n return this.base4Hash\n }\n\n protected guessZoom() {\n const quadkeySimple = this.id.toString(4)\n this.setZoom(quadkeySimple.length)\n }\n}\n","export const RelativeDirectionConstantLookup: Record<string, number> = {\n e: 1,\n n: -2,\n s: 2,\n w: -1,\n}\n"],"mappings":"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","names":[]}