@deck.gl/geo-layers 9.3.0-alpha.6 → 9.3.0-beta.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 CHANGED
@@ -2878,6 +2878,8 @@ var __exports__ = (() => {
2878
2878
  var distanceToVertex = 3 - Math.sqrt(5);
2879
2879
  var Rmidedge = Math.sqrt(3 - \u03C6);
2880
2880
  var Rcircumscribed = Math.sqrt(3) * Rmidedge / \u03C6;
2881
+ var AUTHALIC_RADIUS_EARTH = 63710072e-1;
2882
+ var AUTHALIC_AREA_EARTH = 4 * Math.PI * AUTHALIC_RADIUS_EARTH * AUTHALIC_RADIUS_EARTH;
2881
2883
  common_exports.setMatrixArrayType(Float64Array);
2882
2884
  var PentagonShape = class _PentagonShape {
2883
2885
  constructor(vertices) {
@@ -3579,12 +3581,13 @@ var __exports__ = (() => {
3579
3581
  }
3580
3582
  }
3581
3583
  };
3582
- common_exports.setMatrixArrayType(Float64Array);
3583
3584
  var YES = -1;
3584
3585
  var NO = 1;
3586
+ common_exports.setMatrixArrayType(Float64Array);
3585
3587
  var KJToIJ = ([k, j]) => {
3586
3588
  return vec2_exports.fromValues(k - j, j);
3587
3589
  };
3590
+ common_exports.setMatrixArrayType(Float64Array);
3588
3591
  var kPos = vec2_exports.fromValues(1, 0);
3589
3592
  var jPos = vec2_exports.fromValues(0, 1);
3590
3593
  var kNeg = vec2_exports.negate(vec2_exports.create(), kPos);
@@ -3622,7 +3625,6 @@ var __exports__ = (() => {
3622
3625
  var quaternaryToFlips = (n) => {
3623
3626
  return [[NO, NO], [NO, YES], [NO, NO], [YES, NO]][n];
3624
3627
  };
3625
- var FLIP_SHIFT = vec2_exports.fromValues(-1, 1);
3626
3628
  function reversePattern(pattern) {
3627
3629
  return Array.from({ length: pattern.length }, (_, i) => pattern.indexOf(i));
3628
3630
  }
@@ -3630,7 +3632,7 @@ var __exports__ = (() => {
3630
3632
  var PATTERN_FLIPPED = [0, 1, 2, 7, 3, 4, 5, 6];
3631
3633
  var PATTERN_REVERSED = reversePattern(PATTERN);
3632
3634
  var PATTERN_FLIPPED_REVERSED = reversePattern(PATTERN_FLIPPED);
3633
- var _shiftDigits = (digits, i, flips, invertJ, pattern) => {
3635
+ var shiftDigits = (digits, i, flips, invertJ, pattern) => {
3634
3636
  if (i <= 0)
3635
3637
  return;
3636
3638
  const parentK = digits[i] || 0;
@@ -3652,7 +3654,10 @@ var __exports__ = (() => {
3652
3654
  digits[i - 1] = dst % 4;
3653
3655
  digits[i] = (parentK + 4 + Math.floor(dst / 4) - Math.floor(src / 4)) % 4;
3654
3656
  };
3655
- var sToAnchor = (s, resolution, orientation) => {
3657
+ common_exports.setMatrixArrayType(Float64Array);
3658
+ var FLIP_SHIFT = vec2_exports.fromValues(-1, 1);
3659
+ var SHIFTDIGITS = true;
3660
+ var sToAnchor = (s, resolution, orientation, doShiftDigits = SHIFTDIGITS) => {
3656
3661
  let input = BigInt(s);
3657
3662
  const reverse = orientation === "vu" || orientation === "wu" || orientation === "vw";
3658
3663
  const invertJ = orientation === "wv" || orientation === "vw";
@@ -3660,7 +3665,7 @@ var __exports__ = (() => {
3660
3665
  if (reverse) {
3661
3666
  input = (1n << BigInt(2 * resolution)) - input - 1n;
3662
3667
  }
3663
- const anchor = _sToAnchor(input, resolution, invertJ, flipIJ);
3668
+ const anchor = _sToAnchor(input, resolution, invertJ, flipIJ, doShiftDigits);
3664
3669
  if (flipIJ) {
3665
3670
  const { offset: [_i, _j], flips: [flipX, flipY] } = anchor;
3666
3671
  anchor.offset = [_j, _i];
@@ -3678,7 +3683,7 @@ var __exports__ = (() => {
3678
3683
  }
3679
3684
  return anchor;
3680
3685
  };
3681
- var _sToAnchor = (s, resolution, invertJ, flipIJ) => {
3686
+ var _sToAnchor = (s, resolution, invertJ, flipIJ, doShiftDigits = SHIFTDIGITS) => {
3682
3687
  const offset = vec2_exports.create();
3683
3688
  const flips = [NO, NO];
3684
3689
  let input = BigInt(s);
@@ -3689,7 +3694,9 @@ var __exports__ = (() => {
3689
3694
  }
3690
3695
  const pattern = flipIJ ? PATTERN_FLIPPED : PATTERN;
3691
3696
  for (let i = digits.length - 1; i >= 0; i--) {
3692
- _shiftDigits(digits, i, flips, invertJ, pattern);
3697
+ if (doShiftDigits) {
3698
+ shiftDigits(digits, i, flips, invertJ, pattern);
3699
+ }
3693
3700
  vec2_exports.multiply(flips, flips, quaternaryToFlips(digits[i]));
3694
3701
  }
3695
3702
  flips[0] = NO;
@@ -3700,9 +3707,16 @@ var __exports__ = (() => {
3700
3707
  vec2_exports.add(offset, offset, childOffset);
3701
3708
  vec2_exports.multiply(flips, flips, quaternaryToFlips(digits[i]));
3702
3709
  }
3703
- const k = digits[0] || 0;
3704
- return { flips, k, offset: KJToIJ(offset) };
3710
+ const q = digits[0] || 0;
3711
+ return { q, offset: KJToIJ(offset), flips };
3705
3712
  };
3713
+ var PROBE_R = 0.1;
3714
+ var PROBE_OFFSETS = [
3715
+ [PROBE_R * Math.cos(45 * Math.PI / 180), PROBE_R * Math.sin(45 * Math.PI / 180)],
3716
+ [PROBE_R * Math.cos(113 * Math.PI / 180), PROBE_R * Math.sin(113 * Math.PI / 180)],
3717
+ [PROBE_R * Math.cos(293 * Math.PI / 180), PROBE_R * Math.sin(293 * Math.PI / 180)],
3718
+ [PROBE_R * Math.cos(225 * Math.PI / 180), PROBE_R * Math.sin(225 * Math.PI / 180)]
3719
+ ];
3706
3720
  common_exports.setMatrixArrayType(Float64Array);
3707
3721
  var TRIANGLE_MODE = false;
3708
3722
  var shiftRight = vec2_exports.clone(w);
@@ -3719,12 +3733,12 @@ var __exports__ = (() => {
3719
3733
  if (anchor.flips[0] === NO && anchor.flips[1] === YES) {
3720
3734
  pentagon.rotate180();
3721
3735
  }
3722
- const { k } = anchor;
3736
+ const { q } = anchor;
3723
3737
  const F2 = anchor.flips[0] + anchor.flips[1];
3724
3738
  if (
3725
3739
  // Orient last two pentagons when both or neither flips are YES
3726
- (F2 === -2 || F2 === 2) && k > 1 || // Orient first & last pentagons when only one of flips is YES
3727
- F2 === 0 && (k === 0 || k === 3)
3740
+ (F2 === -2 || F2 === 2) && q > 1 || // Orient first & last pentagons when only one of flips is YES
3741
+ F2 === 0 && (q === 0 || q === 3)
3728
3742
  ) {
3729
3743
  pentagon.reflectY();
3730
3744
  }
@@ -3958,13 +3972,40 @@ var __exports__ = (() => {
3958
3972
  var FIRST_HILBERT_RESOLUTION = 2;
3959
3973
  var MAX_RESOLUTION = 30;
3960
3974
  var HILBERT_START_BIT = 58n;
3961
- var REMOVAL_MASK = 0x3ffffffffffffffn;
3975
+ var WORLD_CELL = 0n;
3962
3976
  function getResolution(index) {
3977
+ if (index === 0n)
3978
+ return -1;
3979
+ if (index & 1n || (index & 0b111n) === 0b100n || (index & 0b11111n) === 0b10000n)
3980
+ return MAX_RESOLUTION;
3963
3981
  let resolution = MAX_RESOLUTION - 1;
3964
3982
  let shifted = index >> 1n;
3965
- while (resolution > -1 && (shifted & 0b1n) === 0n) {
3983
+ if (shifted === 0n)
3984
+ return -1;
3985
+ let low32 = Number(shifted & 0xFFFFFFFFn);
3986
+ let remaining;
3987
+ if (low32 === 0) {
3988
+ shifted >>= 32n;
3989
+ resolution -= 16;
3990
+ remaining = Number(shifted);
3991
+ } else {
3992
+ remaining = low32;
3993
+ }
3994
+ if ((remaining & 65535) === 0) {
3995
+ remaining >>= 16;
3996
+ resolution -= 8;
3997
+ }
3998
+ if (resolution >= 6 && (remaining & 255) === 0) {
3999
+ remaining >>= 8;
4000
+ resolution -= 4;
4001
+ }
4002
+ if (resolution >= 4 && (remaining & 15) === 0) {
4003
+ remaining >>= 4;
4004
+ resolution -= 2;
4005
+ }
4006
+ while (resolution > -1 && (remaining & 1) === 0) {
3966
4007
  resolution -= 1;
3967
- shifted = shifted >> (resolution < FIRST_HILBERT_RESOLUTION ? 1n : 2n);
4008
+ remaining = remaining >> (resolution < FIRST_HILBERT_RESOLUTION ? 1 : 2);
3968
4009
  }
3969
4010
  return resolution;
3970
4011
  }
@@ -3973,27 +4014,33 @@ var __exports__ = (() => {
3973
4014
  if (resolution === -1) {
3974
4015
  return { origin: origins[0], segment: 0, S: 0n, resolution };
3975
4016
  }
3976
- const top6Bits = Number(index >> 58n);
4017
+ let quintantShift = HILBERT_START_BIT;
4018
+ let quintantOffset = 0;
4019
+ if (resolution === MAX_RESOLUTION) {
4020
+ const markerBits = index & 1n ? 1n : index & 0b100n ? 3n : 5n;
4021
+ quintantShift = HILBERT_START_BIT + markerBits;
4022
+ quintantOffset = markerBits === 1n ? 0 : markerBits === 3n ? 32 : 40;
4023
+ }
4024
+ const topBits = Number(index >> quintantShift) + quintantOffset;
3977
4025
  let origin, segment;
3978
4026
  if (resolution === 0) {
3979
- const originId2 = top6Bits;
3980
- origin = origins[originId2];
4027
+ origin = origins[topBits];
3981
4028
  segment = 0;
3982
4029
  } else {
3983
- const originId2 = Math.floor(top6Bits / 5);
4030
+ const originId2 = Math.floor(topBits / 5);
3984
4031
  origin = origins[originId2];
3985
- segment = (top6Bits + origin.firstQuintant) % 5;
4032
+ segment = (topBits + origin.firstQuintant) % 5;
3986
4033
  }
3987
4034
  if (!origin) {
3988
- throw new Error(`Could not parse origin: ${top6Bits}`);
4035
+ throw new Error(`Could not parse origin: ${topBits}`);
3989
4036
  }
3990
4037
  if (resolution < FIRST_HILBERT_RESOLUTION) {
3991
4038
  return { origin, segment, S: 0n, resolution };
3992
4039
  }
3993
4040
  const hilbertLevels = resolution - FIRST_HILBERT_RESOLUTION + 1;
3994
4041
  const hilbertBits = BigInt(2 * hilbertLevels);
3995
- const shift = HILBERT_START_BIT - hilbertBits;
3996
- const S = (index & REMOVAL_MASK) >> shift;
4042
+ const removalMask = (1n << quintantShift) - 1n;
4043
+ const S = (index & removalMask) >> quintantShift - hilbertBits;
3997
4044
  return { origin, segment, S, resolution };
3998
4045
  }
3999
4046
  common_exports.setMatrixArrayType(Float64Array);
@@ -4012,6 +4059,9 @@ var __exports__ = (() => {
4012
4059
  return getPentagonVertices(hilbertResolution, quintant, anchor);
4013
4060
  }
4014
4061
  function cellToBoundary(cellId, { closedRing = true, segments = "auto" } = { closedRing: true, segments: "auto" }) {
4062
+ if (cellId === WORLD_CELL) {
4063
+ return [];
4064
+ }
4015
4065
  const { S, segment, origin, resolution } = deserialize(cellId);
4016
4066
  if (segments === "auto") {
4017
4067
  segments = Math.max(1, Math.pow(2, 6 - resolution));
@@ -4031,8 +4081,13 @@ var __exports__ = (() => {
4031
4081
  function hexToU64(hex) {
4032
4082
  return BigInt(`0x${hex}`);
4033
4083
  }
4034
- var AUTHALIC_RADIUS = 63710072e-1;
4035
- var AUTHALIC_AREA = 4 * Math.PI * AUTHALIC_RADIUS * AUTHALIC_RADIUS;
4084
+ var CELL_RADIUS_SAFETY_FACTOR = 2;
4085
+ var BASE_CELL_RADIUS = CELL_RADIUS_SAFETY_FACTOR * AUTHALIC_RADIUS_EARTH / Math.sqrt(15);
4086
+ var _cellRadius = new Array(31);
4087
+ _cellRadius[0] = CELL_RADIUS_SAFETY_FACTOR * AUTHALIC_RADIUS_EARTH / Math.sqrt(3);
4088
+ for (let r = 1; r <= 30; r++) {
4089
+ _cellRadius[r] = BASE_CELL_RADIUS / (1 << r - 1);
4090
+ }
4036
4091
  common_exports.setMatrixArrayType(Float64Array);
4037
4092
 
4038
4093
  // src/h3-layers/h3-utils.ts
@@ -14503,7 +14558,7 @@ var __exports__ = (() => {
14503
14558
  visibleMinZoom,
14504
14559
  visibleMaxZoom
14505
14560
  }) {
14506
- let z = viewport.isGeospatial ? Math.round(viewport.zoom + Math.log2(TILE_SIZE4 / tileSize)) + zoomOffset : Math.ceil(viewport.zoom) + zoomOffset;
14561
+ let z = viewport.isGeospatial ? Math.round(viewport.zoom + Math.log2(TILE_SIZE4 / tileSize) + zoomOffset) : Math.ceil(viewport.zoom + zoomOffset);
14507
14562
  if (typeof minZoom === "number" && Number.isFinite(minZoom) && z < minZoom) {
14508
14563
  if (!extent) {
14509
14564
  return [];
package/dist/index.cjs CHANGED
@@ -1068,7 +1068,7 @@ function getIdentityTileIndices(viewport, z, tileSize, extent, modelMatrixInvers
1068
1068
  return indices;
1069
1069
  }
1070
1070
  function getTileIndices({ viewport, maxZoom, minZoom, zRange, extent, tileSize = TILE_SIZE3, modelMatrix, modelMatrixInverse, zoomOffset = 0, visibleMinZoom, visibleMaxZoom }) {
1071
- let z = viewport.isGeospatial ? Math.round(viewport.zoom + Math.log2(TILE_SIZE3 / tileSize)) + zoomOffset : Math.ceil(viewport.zoom) + zoomOffset;
1071
+ let z = viewport.isGeospatial ? Math.round(viewport.zoom + Math.log2(TILE_SIZE3 / tileSize) + zoomOffset) : Math.ceil(viewport.zoom + zoomOffset);
1072
1072
  if (typeof minZoom === "number" && Number.isFinite(minZoom) && z < minZoom) {
1073
1073
  if (!extent) {
1074
1074
  return [];