@deck.gl/geo-layers 8.9.22 → 8.10.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/dist/dist.dev.js CHANGED
@@ -3151,7 +3151,7 @@ var __exports__ = (() => {
3151
3151
  }
3152
3152
 
3153
3153
  // ../../node_modules/@loaders.gl/xml/dist/esm/xml-loader.js
3154
- var VERSION = true ? "3.4.2" : "latest";
3154
+ var VERSION = true ? "3.4.3" : "latest";
3155
3155
  var XMLLoader = {
3156
3156
  name: "XML",
3157
3157
  id: "xml",
@@ -3267,7 +3267,7 @@ var __exports__ = (() => {
3267
3267
 
3268
3268
  // ../../node_modules/@loaders.gl/worker-utils/dist/esm/lib/library-utils/library-utils.js
3269
3269
  var node = __toESM(require_require_utils());
3270
- var VERSION2 = true ? "3.4.2" : LATEST;
3270
+ var VERSION2 = true ? "3.4.3" : LATEST;
3271
3271
  var loadLibraryPromises = {};
3272
3272
  async function loadLibrary(libraryUrl) {
3273
3273
  let moduleName = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null;
@@ -3882,7 +3882,7 @@ var __exports__ = (() => {
3882
3882
  }
3883
3883
 
3884
3884
  // ../../node_modules/@loaders.gl/wms/dist/esm/wms-error-loader.js
3885
- var VERSION3 = true ? "3.4.2" : "latest";
3885
+ var VERSION3 = true ? "3.4.3" : "latest";
3886
3886
  var WMSErrorLoader = {
3887
3887
  id: "wms-error",
3888
3888
  name: "WMS Error",
@@ -4181,7 +4181,7 @@ var __exports__ = (() => {
4181
4181
  }
4182
4182
 
4183
4183
  // ../../node_modules/@loaders.gl/wms/dist/esm/wms-capabilities-loader.js
4184
- var VERSION4 = true ? "3.4.2" : "latest";
4184
+ var VERSION4 = true ? "3.4.3" : "latest";
4185
4185
  var WMSCapabilitiesLoader = {
4186
4186
  id: "wms-capabilities",
4187
4187
  name: "WMS Capabilities",
@@ -4298,7 +4298,7 @@ var __exports__ = (() => {
4298
4298
  };
4299
4299
 
4300
4300
  // ../../node_modules/@loaders.gl/images/dist/esm/lib/utils/version.js
4301
- var VERSION5 = true ? "3.4.2" : "latest";
4301
+ var VERSION5 = true ? "3.4.3" : "latest";
4302
4302
 
4303
4303
  // ../../node_modules/@loaders.gl/images/dist/esm/lib/category-api/image-type.js
4304
4304
  var {
@@ -10452,14 +10452,16 @@ varying float vTime;
10452
10452
  __publicField(TripsLayer, "defaultProps", defaultProps7);
10453
10453
 
10454
10454
  // src/h3-layers/h3-cluster-layer.ts
10455
- var import_h3_js2 = __toESM(require_h3_js());
10455
+ var import_h3_js3 = __toESM(require_h3_js());
10456
10456
  var import_core17 = __toESM(require_core());
10457
10457
 
10458
10458
  // src/h3-layers/h3-hexagon-layer.ts
10459
- var import_h3_js = __toESM(require_h3_js());
10459
+ var import_h3_js2 = __toESM(require_h3_js());
10460
10460
  var import_core16 = __toESM(require_core());
10461
10461
  var import_layers7 = __toESM(require_layers());
10462
- var UPDATE_THRESHOLD_KM = 10;
10462
+
10463
+ // src/h3-layers/h3-utils.ts
10464
+ var import_h3_js = __toESM(require_h3_js());
10463
10465
  function normalizeLongitudes(vertices, refLng) {
10464
10466
  refLng = refLng === void 0 ? vertices[0][0] : refLng;
10465
10467
  for (const pt of vertices) {
@@ -10472,7 +10474,7 @@ varying float vTime;
10472
10474
  }
10473
10475
  }
10474
10476
  function scalePolygon(hexId, vertices, factor) {
10475
- const [lat, lng] = (0, import_h3_js.h3ToGeo)(hexId);
10477
+ const [lat, lng] = (0, import_h3_js.cellToLatLng)(hexId);
10476
10478
  const actualCount = vertices.length;
10477
10479
  normalizeLongitudes(vertices, lng);
10478
10480
  const vertexCount = vertices[0] === vertices[actualCount - 1] ? actualCount - 1 : actualCount;
@@ -10483,11 +10485,11 @@ varying float vTime;
10483
10485
  }
10484
10486
  function getHexagonCentroid(getHexagon, object, objectInfo) {
10485
10487
  const hexagonId = getHexagon(object, objectInfo);
10486
- const [lat, lng] = (0, import_h3_js.h3ToGeo)(hexagonId);
10488
+ const [lat, lng] = (0, import_h3_js.cellToLatLng)(hexagonId);
10487
10489
  return [lng, lat];
10488
10490
  }
10489
10491
  function h3ToPolygon(hexId, coverage = 1) {
10490
- const vertices = (0, import_h3_js.h3ToGeoBoundary)(hexId, true);
10492
+ const vertices = (0, import_h3_js.cellToBoundary)(hexId, true);
10491
10493
  if (coverage !== 1) {
10492
10494
  scalePolygon(hexId, vertices, coverage);
10493
10495
  } else {
@@ -10504,6 +10506,9 @@ varying float vTime;
10504
10506
  }
10505
10507
  return positions;
10506
10508
  }
10509
+
10510
+ // src/h3-layers/h3-hexagon-layer.ts
10511
+ var UPDATE_THRESHOLD_KM = 10;
10507
10512
  function mergeTriggers(getHexagon, coverage) {
10508
10513
  let trigger;
10509
10514
  if (getHexagon === void 0 || getHexagon === null) {
@@ -10571,7 +10576,7 @@ varying float vTime;
10571
10576
  for (const object of iterable) {
10572
10577
  objectInfo.index++;
10573
10578
  const hexId = this.props.getHexagon(object, objectInfo);
10574
- const hexResolution = (0, import_h3_js.h3GetResolution)(hexId);
10579
+ const hexResolution = (0, import_h3_js2.getResolution)(hexId);
10575
10580
  if (resolution < 0) {
10576
10581
  resolution = hexResolution;
10577
10582
  if (!this.props.highPrecision)
@@ -10580,14 +10585,14 @@ varying float vTime;
10580
10585
  hasMultipleRes = true;
10581
10586
  break;
10582
10587
  }
10583
- if ((0, import_h3_js.h3IsPentagon)(hexId)) {
10588
+ if ((0, import_h3_js2.isPentagon)(hexId)) {
10584
10589
  hasPentagon = true;
10585
10590
  break;
10586
10591
  }
10587
10592
  }
10588
10593
  return {
10589
10594
  resolution,
10590
- edgeLengthKM: resolution >= 0 ? (0, import_h3_js.edgeLength)(resolution, "km") : 0,
10595
+ edgeLengthKM: resolution >= 0 ? (0, import_h3_js2.getHexagonEdgeLengthAvg)(resolution, "km") : 0,
10591
10596
  hasMultipleRes,
10592
10597
  hasPentagon
10593
10598
  };
@@ -10618,21 +10623,24 @@ varying float vTime;
10618
10623
  if (resolution < 0) {
10619
10624
  return;
10620
10625
  }
10621
- const hex = this.props.centerHexagon || (0, import_h3_js.geoToH3)(viewport.latitude, viewport.longitude, resolution);
10626
+ const hex = this.props.centerHexagon || (0, import_h3_js2.latLngToCell)(viewport.latitude, viewport.longitude, resolution);
10622
10627
  if (centerHex === hex) {
10623
10628
  return;
10624
10629
  }
10625
10630
  if (centerHex) {
10626
- const distance = (0, import_h3_js.h3Distance)(centerHex, hex);
10627
- if (distance >= 0 && distance * edgeLengthKM < UPDATE_THRESHOLD_KM) {
10628
- return;
10631
+ try {
10632
+ const distance = (0, import_h3_js2.gridDistance)(centerHex, hex);
10633
+ if (distance * edgeLengthKM < UPDATE_THRESHOLD_KM) {
10634
+ return;
10635
+ }
10636
+ } catch {
10629
10637
  }
10630
10638
  }
10631
10639
  const {
10632
10640
  unitsPerMeter: unitsPerMeter2
10633
10641
  } = viewport.distanceScales;
10634
10642
  let vertices = h3ToPolygon(hex);
10635
- const [centerLat, centerLng] = (0, import_h3_js.h3ToGeo)(hex);
10643
+ const [centerLat, centerLng] = (0, import_h3_js2.cellToLatLng)(hex);
10636
10644
  const [centerX, centerY] = viewport.projectFlat([centerLng, centerLat]);
10637
10645
  vertices = vertices.map((p2) => {
10638
10646
  const worldPosition = viewport.projectFlat(p2);
@@ -10771,8 +10779,11 @@ varying float vTime;
10771
10779
  for (const object of iterable) {
10772
10780
  objectInfo.index++;
10773
10781
  const hexagons = getHexagons(object, objectInfo);
10774
- const multiPolygon = (0, import_h3_js2.h3SetToMultiPolygon)(hexagons, true);
10782
+ const multiPolygon = (0, import_h3_js3.cellsToMultiPolygon)(hexagons, true);
10775
10783
  for (const polygon of multiPolygon) {
10784
+ for (const ring of polygon) {
10785
+ normalizeLongitudes(ring);
10786
+ }
10776
10787
  polygons.push(this.getSubLayerRow({
10777
10788
  polygon
10778
10789
  }, object, objectInfo.index));
@@ -19208,7 +19219,7 @@ void main(void) {
19208
19219
  };
19209
19220
 
19210
19221
  // ../../node_modules/@loaders.gl/3d-tiles/dist/esm/lib/utils/version.js
19211
- var VERSION8 = true ? "3.4.2" : "latest";
19222
+ var VERSION8 = true ? "3.4.3" : "latest";
19212
19223
 
19213
19224
  // ../../node_modules/@loaders.gl/3d-tiles/dist/esm/lib/constants.js
19214
19225
  var TILE3D_TYPE = {
@@ -19237,7 +19248,7 @@ void main(void) {
19237
19248
  }
19238
19249
 
19239
19250
  // ../../node_modules/@loaders.gl/draco/dist/esm/lib/utils/version.js
19240
- var VERSION9 = true ? "3.4.2" : "latest";
19251
+ var VERSION9 = true ? "3.4.3" : "latest";
19241
19252
 
19242
19253
  // ../../node_modules/@loaders.gl/draco/dist/esm/draco-loader.js
19243
19254
  var DEFAULT_DRACO_OPTIONS = {
@@ -21403,13 +21414,13 @@ void main(void) {
21403
21414
  }
21404
21415
 
21405
21416
  // ../../node_modules/@loaders.gl/gltf/dist/esm/lib/utils/version.js
21406
- var VERSION10 = true ? "3.4.2" : "latest";
21417
+ var VERSION10 = true ? "3.4.3" : "latest";
21407
21418
 
21408
21419
  // ../../node_modules/@loaders.gl/textures/dist/esm/lib/utils/version.js
21409
- var VERSION11 = true ? "3.4.2" : "latest";
21420
+ var VERSION11 = true ? "3.4.3" : "latest";
21410
21421
 
21411
21422
  // ../../node_modules/@loaders.gl/textures/dist/esm/lib/parsers/basis-module-loader.js
21412
- var VERSION12 = true ? "3.4.2" : "latest";
21423
+ var VERSION12 = true ? "3.4.3" : "latest";
21413
21424
  var BASIS_CDN_ENCODER_WASM = "https://unpkg.com/@loaders.gl/textures@".concat(VERSION12, "/dist/libs/basis_encoder.wasm");
21414
21425
  var BASIS_CDN_ENCODER_JS = "https://unpkg.com/@loaders.gl/textures@".concat(VERSION12, "/dist/libs/basis_encoder.js");
21415
21426
  var loadBasisTranscoderPromise;
@@ -27547,7 +27558,7 @@ void main(void) {
27547
27558
  }
27548
27559
 
27549
27560
  // ../../node_modules/@loaders.gl/terrain/dist/esm/lib/utils/version.js
27550
- var VERSION13 = true ? "3.4.2" : "latest";
27561
+ var VERSION13 = true ? "3.4.3" : "latest";
27551
27562
 
27552
27563
  // ../../node_modules/@loaders.gl/terrain/dist/esm/terrain-loader.js
27553
27564
  var TerrainLoader = {
@@ -29595,7 +29606,7 @@ void main(void) {
29595
29606
  }
29596
29607
 
29597
29608
  // ../../node_modules/@loaders.gl/mvt/dist/esm/mvt-loader.js
29598
- var VERSION14 = true ? "3.4.2" : "latest";
29609
+ var VERSION14 = true ? "3.4.3" : "latest";
29599
29610
  var DEFAULT_MVT_LOADER_OPTIONS = {
29600
29611
  mvt: {
29601
29612
  shape: "geojson",
@@ -27,6 +27,8 @@ var _h3HexagonLayer = _interopRequireDefault(require("./h3-hexagon-layer"));
27
27
 
28
28
  var _GeoCellLayer2 = _interopRequireDefault(require("../geo-cell-layer/GeoCellLayer"));
29
29
 
30
+ var _h3Utils = require("./h3-utils");
31
+
30
32
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
31
33
 
32
34
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
@@ -84,7 +86,7 @@ var H3ClusterLayer = function (_GeoCellLayer) {
84
86
  var object = _step.value;
85
87
  objectInfo.index++;
86
88
  var hexagons = getHexagons(object, objectInfo);
87
- var multiPolygon = (0, _h3Js.h3SetToMultiPolygon)(hexagons, true);
89
+ var multiPolygon = (0, _h3Js.cellsToMultiPolygon)(hexagons, true);
88
90
 
89
91
  var _iterator2 = _createForOfIteratorHelper(multiPolygon),
90
92
  _step2;
@@ -92,6 +94,21 @@ var H3ClusterLayer = function (_GeoCellLayer) {
92
94
  try {
93
95
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
94
96
  var polygon = _step2.value;
97
+
98
+ var _iterator3 = _createForOfIteratorHelper(polygon),
99
+ _step3;
100
+
101
+ try {
102
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
103
+ var ring = _step3.value;
104
+ (0, _h3Utils.normalizeLongitudes)(ring);
105
+ }
106
+ } catch (err) {
107
+ _iterator3.e(err);
108
+ } finally {
109
+ _iterator3.f();
110
+ }
111
+
95
112
  polygons.push(this.getSubLayerRow({
96
113
  polygon: polygon
97
114
  }, object, objectInfo.index));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/h3-layers/h3-cluster-layer.ts"],"names":["defaultProps","getHexagons","type","value","d","hexagons","H3ClusterLayer","H3HexagonLayer","_checkH3Lib","props","changeFlags","dataChanged","updateTriggersChanged","data","polygons","iterable","objectInfo","object","index","multiPolygon","polygon","push","getSubLayerRow","setState","getElevation","getFillColor","getLineColor","getLineWidth","state","getPolygon","getSubLayerAccessor","GeoCellLayer"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;AACA;;AACA;;;;;;;;;;;;AAEA,IAAMA,YAA+C,GAAG;AACtDC,EAAAA,WAAW,EAAE;AAACC,IAAAA,IAAI,EAAE,UAAP;AAAmBC,IAAAA,KAAK,EAAE,eAAAC,CAAC;AAAA,aAAIA,CAAC,CAACC,QAAN;AAAA;AAA3B;AADyC,CAAxD;;IAkBqBC,c;;;;;;;;;;;;WAOnB,2BAAwB;AACtBC,8BAAeC,WAAf;AACD;;;WAED,2BAAgE;AAAA,UAAnDC,KAAmD,QAAnDA,KAAmD;AAAA,UAA5CC,WAA4C,QAA5CA,WAA4C;;AAC9D,UACEA,WAAW,CAACC,WAAZ,IACCD,WAAW,CAACE,qBAAZ,IAAqCF,WAAW,CAACE,qBAAZ,CAAkCX,WAF1E,EAGE;AACA,YAAOY,IAAP,GAA4BJ,KAA5B,CAAOI,IAAP;AAAA,YAAaZ,WAAb,GAA4BQ,KAA5B,CAAaR,WAAb;AACA,YAAMa,QAAmC,GAAG,EAA5C;;AAEA,8BAA+B,0BAAeD,IAAf,CAA/B;AAAA,YAAOE,QAAP,mBAAOA,QAAP;AAAA,YAAiBC,UAAjB,mBAAiBA,UAAjB;;AAJA,mDAKqBD,QALrB;AAAA;;AAAA;AAKA,8DAA+B;AAAA,gBAApBE,MAAoB;AAC7BD,YAAAA,UAAU,CAACE,KAAX;AACA,gBAAMb,QAAQ,GAAGJ,WAAW,CAACgB,MAAD,EAASD,UAAT,CAA5B;AACA,gBAAMG,YAAY,GAAG,+BAAoBd,QAApB,EAA8B,IAA9B,CAArB;;AAH6B,wDAKPc,YALO;AAAA;;AAAA;AAK7B,qEAAoC;AAAA,oBAAzBC,OAAyB;AAClCN,gBAAAA,QAAQ,CAACO,IAAT,CAAc,KAAKC,cAAL,CAAoB;AAACF,kBAAAA,OAAO,EAAPA;AAAD,iBAApB,EAA+BH,MAA/B,EAAuCD,UAAU,CAACE,KAAlD,CAAd;AACD;AAP4B;AAAA;AAAA;AAAA;AAAA;AAQ9B;AAbD;AAAA;AAAA;AAAA;AAAA;;AAeA,aAAKK,QAAL,CAAc;AAACT,UAAAA,QAAQ,EAARA;AAAD,SAAd;AACD;AACF;;;WAED,yBAAgD;AAC9C,wBAAiE,KAAKL,KAAtE;AAAA,UAAOe,YAAP,eAAOA,YAAP;AAAA,UAAqBC,YAArB,eAAqBA,YAArB;AAAA,UAAmCC,YAAnC,eAAmCA,YAAnC;AAAA,UAAiDC,YAAjD,eAAiDA,YAAjD;AAEA,aAAO;AACLd,QAAAA,IAAI,EAAE,KAAKe,KAAL,CAAWd,QADZ;AAELe,QAAAA,UAAU,EAAE,oBAAAzB,CAAC;AAAA,iBAAIA,CAAC,CAACgB,OAAN;AAAA,SAFR;AAILI,QAAAA,YAAY,EAAE,KAAKM,mBAAL,CAAyBN,YAAzB,CAJT;AAKLC,QAAAA,YAAY,EAAE,KAAKK,mBAAL,CAAyBL,YAAzB,CALT;AAMLC,QAAAA,YAAY,EAAE,KAAKI,mBAAL,CAAyBJ,YAAzB,CANT;AAOLC,QAAAA,YAAY,EAAE,KAAKG,mBAAL,CAAyBH,YAAzB;AAPT,OAAP;AASD;;;EA9CkFI,sB;;;8BAAhEzB,c,eAIA,gB;8BAJAA,c,kBAKGN,Y","sourcesContent":["import {h3SetToMultiPolygon, H3IndexInput} from 'h3-js';\n\nimport {AccessorFunction, createIterable, UpdateParameters, DefaultProps} from '@deck.gl/core';\nimport {default as H3HexagonLayer} from './h3-hexagon-layer';\nimport GeoCellLayer, {GeoCellLayerProps} from '../geo-cell-layer/GeoCellLayer';\n\nconst defaultProps: DefaultProps<H3ClusterLayerProps> = {\n getHexagons: {type: 'accessor', value: d => d.hexagons}\n};\n\n/** All properties supported by H3ClusterLayer. */\nexport type H3ClusterLayerProps<DataT = any> = _H3ClusterLayerProps<DataT> &\n GeoCellLayerProps<DataT>;\n\n/** Properties added by H3ClusterLayer. */\ntype _H3ClusterLayerProps<DataT> = {\n /**\n * Called for each data object to retrieve the hexagon identifiers.\n *\n * By default, it reads `hexagons` property of data object.\n */\n getHexagons?: AccessorFunction<DataT, H3IndexInput[]>;\n};\n\nexport default class H3ClusterLayer<DataT = any, ExtraProps extends {} = {}> extends GeoCellLayer<\n DataT,\n Required<_H3ClusterLayerProps<DataT>> & ExtraProps\n> {\n static layerName = 'H3ClusterLayer';\n static defaultProps = defaultProps;\n\n initializeState(): void {\n H3HexagonLayer._checkH3Lib();\n }\n\n updateState({props, changeFlags}: UpdateParameters<this>): void {\n if (\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged && changeFlags.updateTriggersChanged.getHexagons)\n ) {\n const {data, getHexagons} = props;\n const polygons: {polygon: number[][][]}[] = [];\n\n const {iterable, objectInfo} = createIterable(data);\n for (const object of iterable) {\n objectInfo.index++;\n const hexagons = getHexagons(object, objectInfo);\n const multiPolygon = h3SetToMultiPolygon(hexagons, true);\n\n for (const polygon of multiPolygon) {\n polygons.push(this.getSubLayerRow({polygon}, object, objectInfo.index));\n }\n }\n\n this.setState({polygons});\n }\n }\n\n indexToBounds(): Partial<GeoCellLayer['props']> {\n const {getElevation, getFillColor, getLineColor, getLineWidth} = this.props;\n\n return {\n data: this.state.polygons,\n getPolygon: d => d.polygon,\n\n getElevation: this.getSubLayerAccessor(getElevation),\n getFillColor: this.getSubLayerAccessor(getFillColor),\n getLineColor: this.getSubLayerAccessor(getLineColor),\n getLineWidth: this.getSubLayerAccessor(getLineWidth)\n };\n }\n}\n"],"file":"h3-cluster-layer.js"}
1
+ {"version":3,"sources":["../../../src/h3-layers/h3-cluster-layer.ts"],"names":["defaultProps","getHexagons","type","value","d","hexagons","H3ClusterLayer","H3HexagonLayer","_checkH3Lib","props","changeFlags","dataChanged","updateTriggersChanged","data","polygons","iterable","objectInfo","object","index","multiPolygon","polygon","ring","push","getSubLayerRow","setState","getElevation","getFillColor","getLineColor","getLineWidth","state","getPolygon","getSubLayerAccessor","GeoCellLayer"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;AACA;;AACA;;AACA;;;;;;;;;;;;AAEA,IAAMA,YAA+C,GAAG;AACtDC,EAAAA,WAAW,EAAE;AAACC,IAAAA,IAAI,EAAE,UAAP;AAAmBC,IAAAA,KAAK,EAAE,eAAAC,CAAC;AAAA,aAAIA,CAAC,CAACC,QAAN;AAAA;AAA3B;AADyC,CAAxD;;IAkBqBC,c;;;;;;;;;;;;WAOnB,2BAAwB;AACtBC,8BAAeC,WAAf;AACD;;;WAED,2BAAgE;AAAA,UAAnDC,KAAmD,QAAnDA,KAAmD;AAAA,UAA5CC,WAA4C,QAA5CA,WAA4C;;AAC9D,UACEA,WAAW,CAACC,WAAZ,IACCD,WAAW,CAACE,qBAAZ,IAAqCF,WAAW,CAACE,qBAAZ,CAAkCX,WAF1E,EAGE;AACA,YAAOY,IAAP,GAA4BJ,KAA5B,CAAOI,IAAP;AAAA,YAAaZ,WAAb,GAA4BQ,KAA5B,CAAaR,WAAb;AACA,YAAMa,QAAmC,GAAG,EAA5C;;AAEA,8BAA+B,0BAAeD,IAAf,CAA/B;AAAA,YAAOE,QAAP,mBAAOA,QAAP;AAAA,YAAiBC,UAAjB,mBAAiBA,UAAjB;;AAJA,mDAKqBD,QALrB;AAAA;;AAAA;AAKA,8DAA+B;AAAA,gBAApBE,MAAoB;AAC7BD,YAAAA,UAAU,CAACE,KAAX;AACA,gBAAMb,QAAQ,GAAGJ,WAAW,CAACgB,MAAD,EAASD,UAAT,CAA5B;AACA,gBAAMG,YAAY,GAAG,+BAAoBd,QAApB,EAA8B,IAA9B,CAArB;;AAH6B,wDAKPc,YALO;AAAA;;AAAA;AAK7B,qEAAoC;AAAA,oBAAzBC,OAAyB;;AAAA,4DAEfA,OAFe;AAAA;;AAAA;AAElC,yEAA4B;AAAA,wBAAjBC,IAAiB;AAC1B,sDAAoBA,IAApB;AACD;AAJiC;AAAA;AAAA;AAAA;AAAA;;AAKlCP,gBAAAA,QAAQ,CAACQ,IAAT,CAAc,KAAKC,cAAL,CAAoB;AAACH,kBAAAA,OAAO,EAAPA;AAAD,iBAApB,EAA+BH,MAA/B,EAAuCD,UAAU,CAACE,KAAlD,CAAd;AACD;AAX4B;AAAA;AAAA;AAAA;AAAA;AAY9B;AAjBD;AAAA;AAAA;AAAA;AAAA;;AAmBA,aAAKM,QAAL,CAAc;AAACV,UAAAA,QAAQ,EAARA;AAAD,SAAd;AACD;AACF;;;WAED,yBAAgD;AAC9C,wBAAiE,KAAKL,KAAtE;AAAA,UAAOgB,YAAP,eAAOA,YAAP;AAAA,UAAqBC,YAArB,eAAqBA,YAArB;AAAA,UAAmCC,YAAnC,eAAmCA,YAAnC;AAAA,UAAiDC,YAAjD,eAAiDA,YAAjD;AAEA,aAAO;AACLf,QAAAA,IAAI,EAAE,KAAKgB,KAAL,CAAWf,QADZ;AAELgB,QAAAA,UAAU,EAAE,oBAAA1B,CAAC;AAAA,iBAAIA,CAAC,CAACgB,OAAN;AAAA,SAFR;AAILK,QAAAA,YAAY,EAAE,KAAKM,mBAAL,CAAyBN,YAAzB,CAJT;AAKLC,QAAAA,YAAY,EAAE,KAAKK,mBAAL,CAAyBL,YAAzB,CALT;AAMLC,QAAAA,YAAY,EAAE,KAAKI,mBAAL,CAAyBJ,YAAzB,CANT;AAOLC,QAAAA,YAAY,EAAE,KAAKG,mBAAL,CAAyBH,YAAzB;AAPT,OAAP;AASD;;;EAlDkFI,sB;;;8BAAhE1B,c,eAIA,gB;8BAJAA,c,kBAKGN,Y","sourcesContent":["import {cellsToMultiPolygon, H3IndexInput} from 'h3-js';\n\nimport {AccessorFunction, createIterable, UpdateParameters, DefaultProps} from '@deck.gl/core';\nimport {default as H3HexagonLayer} from './h3-hexagon-layer';\nimport GeoCellLayer, {GeoCellLayerProps} from '../geo-cell-layer/GeoCellLayer';\nimport {normalizeLongitudes} from './h3-utils';\n\nconst defaultProps: DefaultProps<H3ClusterLayerProps> = {\n getHexagons: {type: 'accessor', value: d => d.hexagons}\n};\n\n/** All properties supported by H3ClusterLayer. */\nexport type H3ClusterLayerProps<DataT = any> = _H3ClusterLayerProps<DataT> &\n GeoCellLayerProps<DataT>;\n\n/** Properties added by H3ClusterLayer. */\ntype _H3ClusterLayerProps<DataT> = {\n /**\n * Called for each data object to retrieve the hexagon identifiers.\n *\n * By default, it reads `hexagons` property of data object.\n */\n getHexagons?: AccessorFunction<DataT, H3IndexInput[]>;\n};\n\nexport default class H3ClusterLayer<DataT = any, ExtraProps extends {} = {}> extends GeoCellLayer<\n DataT,\n Required<_H3ClusterLayerProps<DataT>> & ExtraProps\n> {\n static layerName = 'H3ClusterLayer';\n static defaultProps = defaultProps;\n\n initializeState(): void {\n H3HexagonLayer._checkH3Lib();\n }\n\n updateState({props, changeFlags}: UpdateParameters<this>): void {\n if (\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged && changeFlags.updateTriggersChanged.getHexagons)\n ) {\n const {data, getHexagons} = props;\n const polygons: {polygon: number[][][]}[] = [];\n\n const {iterable, objectInfo} = createIterable(data);\n for (const object of iterable) {\n objectInfo.index++;\n const hexagons = getHexagons(object, objectInfo);\n const multiPolygon = cellsToMultiPolygon(hexagons, true);\n\n for (const polygon of multiPolygon) {\n // Normalize polygons to prevent wrapping over the anti-meridian\n for (const ring of polygon) {\n normalizeLongitudes(ring);\n }\n polygons.push(this.getSubLayerRow({polygon}, object, objectInfo.index));\n }\n }\n\n this.setState({polygons});\n }\n }\n\n indexToBounds(): Partial<GeoCellLayer['props']> {\n const {getElevation, getFillColor, getLineColor, getLineWidth} = this.props;\n\n return {\n data: this.state.polygons,\n getPolygon: d => d.polygon,\n\n getElevation: this.getSubLayerAccessor(getElevation),\n getFillColor: this.getSubLayerAccessor(getFillColor),\n getLineColor: this.getSubLayerAccessor(getLineColor),\n getLineWidth: this.getSubLayerAccessor(getLineWidth)\n };\n }\n}\n"],"file":"h3-cluster-layer.js"}
@@ -5,10 +5,10 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.normalizeLongitudes = normalizeLongitudes;
9
- exports.scalePolygon = scalePolygon;
10
8
  exports.default = void 0;
11
9
 
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+
12
12
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
13
 
14
14
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
@@ -25,23 +25,13 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
25
25
 
26
26
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
27
27
 
28
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
29
-
30
28
  var _h3Js = require("h3-js");
31
29
 
32
- var _core = require("@math.gl/core");
33
-
34
- var _core2 = require("@deck.gl/core");
30
+ var _core = require("@deck.gl/core");
35
31
 
36
32
  var _layers = require("@deck.gl/layers");
37
33
 
38
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
39
-
40
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
41
-
42
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
43
-
44
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
34
+ var _h3Utils = require("./h3-utils");
45
35
 
46
36
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
47
37
 
@@ -49,93 +39,15 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
49
39
 
50
40
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
51
41
 
52
- var UPDATE_THRESHOLD_KM = 10;
53
-
54
- function normalizeLongitudes(vertices, refLng) {
55
- refLng = refLng === undefined ? vertices[0][0] : refLng;
56
-
57
- var _iterator = _createForOfIteratorHelper(vertices),
58
- _step;
59
-
60
- try {
61
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
62
- var pt = _step.value;
63
- var deltaLng = pt[0] - refLng;
64
-
65
- if (deltaLng > 180) {
66
- pt[0] -= 360;
67
- } else if (deltaLng < -180) {
68
- pt[0] += 360;
69
- }
70
- }
71
- } catch (err) {
72
- _iterator.e(err);
73
- } finally {
74
- _iterator.f();
75
- }
76
- }
77
-
78
- function scalePolygon(hexId, vertices, factor) {
79
- var _h3ToGeo = (0, _h3Js.h3ToGeo)(hexId),
80
- _h3ToGeo2 = (0, _slicedToArray2.default)(_h3ToGeo, 2),
81
- lat = _h3ToGeo2[0],
82
- lng = _h3ToGeo2[1];
83
-
84
- var actualCount = vertices.length;
85
- normalizeLongitudes(vertices, lng);
86
- var vertexCount = vertices[0] === vertices[actualCount - 1] ? actualCount - 1 : actualCount;
87
-
88
- for (var i = 0; i < vertexCount; i++) {
89
- vertices[i][0] = (0, _core.lerp)(lng, vertices[i][0], factor);
90
- vertices[i][1] = (0, _core.lerp)(lat, vertices[i][1], factor);
91
- }
92
- }
93
-
94
- function getHexagonCentroid(getHexagon, object, objectInfo) {
95
- var hexagonId = getHexagon(object, objectInfo);
96
-
97
- var _h3ToGeo3 = (0, _h3Js.h3ToGeo)(hexagonId),
98
- _h3ToGeo4 = (0, _slicedToArray2.default)(_h3ToGeo3, 2),
99
- lat = _h3ToGeo4[0],
100
- lng = _h3ToGeo4[1];
101
-
102
- return [lng, lat];
103
- }
104
-
105
- function h3ToPolygon(hexId) {
106
- var coverage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
107
- var vertices = (0, _h3Js.h3ToGeoBoundary)(hexId, true);
108
-
109
- if (coverage !== 1) {
110
- scalePolygon(hexId, vertices, coverage);
111
- } else {
112
- normalizeLongitudes(vertices);
113
- }
114
-
115
- return vertices;
116
- }
42
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
117
43
 
118
- function flattenPolygon(vertices) {
119
- var positions = new Float64Array(vertices.length * 2);
120
- var i = 0;
44
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
121
45
 
122
- var _iterator2 = _createForOfIteratorHelper(vertices),
123
- _step2;
46
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
124
47
 
125
- try {
126
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
127
- var pt = _step2.value;
128
- positions[i++] = pt[0];
129
- positions[i++] = pt[1];
130
- }
131
- } catch (err) {
132
- _iterator2.e(err);
133
- } finally {
134
- _iterator2.f();
135
- }
48
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
136
49
 
137
- return positions;
138
- }
50
+ var UPDATE_THRESHOLD_KM = 10;
139
51
 
140
52
  function mergeTriggers(getHexagon, coverage) {
141
53
  var trigger;
@@ -230,19 +142,19 @@ var H3HexagonLayer = function (_CompositeLayer) {
230
142
  var hasPentagon = false;
231
143
  var hasMultipleRes = false;
232
144
 
233
- var _createIterable = (0, _core2.createIterable)(this.props.data),
145
+ var _createIterable = (0, _core.createIterable)(this.props.data),
234
146
  iterable = _createIterable.iterable,
235
147
  objectInfo = _createIterable.objectInfo;
236
148
 
237
- var _iterator3 = _createForOfIteratorHelper(iterable),
238
- _step3;
149
+ var _iterator = _createForOfIteratorHelper(iterable),
150
+ _step;
239
151
 
240
152
  try {
241
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
242
- var object = _step3.value;
153
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
154
+ var object = _step.value;
243
155
  objectInfo.index++;
244
156
  var hexId = this.props.getHexagon(object, objectInfo);
245
- var hexResolution = (0, _h3Js.h3GetResolution)(hexId);
157
+ var hexResolution = (0, _h3Js.getResolution)(hexId);
246
158
 
247
159
  if (resolution < 0) {
248
160
  resolution = hexResolution;
@@ -252,20 +164,20 @@ var H3HexagonLayer = function (_CompositeLayer) {
252
164
  break;
253
165
  }
254
166
 
255
- if ((0, _h3Js.h3IsPentagon)(hexId)) {
167
+ if ((0, _h3Js.isPentagon)(hexId)) {
256
168
  hasPentagon = true;
257
169
  break;
258
170
  }
259
171
  }
260
172
  } catch (err) {
261
- _iterator3.e(err);
173
+ _iterator.e(err);
262
174
  } finally {
263
- _iterator3.f();
175
+ _iterator.f();
264
176
  }
265
177
 
266
178
  return {
267
179
  resolution: resolution,
268
- edgeLengthKM: resolution >= 0 ? (0, _h3Js.edgeLength)(resolution, 'km') : 0,
180
+ edgeLengthKM: resolution >= 0 ? (0, _h3Js.getHexagonEdgeLengthAvg)(resolution, 'km') : 0,
269
181
  hasMultipleRes: hasMultipleRes,
270
182
  hasPentagon: hasPentagon
271
183
  };
@@ -300,27 +212,29 @@ var H3HexagonLayer = function (_CompositeLayer) {
300
212
  return;
301
213
  }
302
214
 
303
- var hex = this.props.centerHexagon || (0, _h3Js.geoToH3)(viewport.latitude, viewport.longitude, resolution);
215
+ var hex = this.props.centerHexagon || (0, _h3Js.latLngToCell)(viewport.latitude, viewport.longitude, resolution);
304
216
 
305
217
  if (centerHex === hex) {
306
218
  return;
307
219
  }
308
220
 
309
221
  if (centerHex) {
310
- var distance = (0, _h3Js.h3Distance)(centerHex, hex);
222
+ try {
223
+ var distance = (0, _h3Js.gridDistance)(centerHex, hex);
311
224
 
312
- if (distance >= 0 && distance * edgeLengthKM < UPDATE_THRESHOLD_KM) {
313
- return;
314
- }
225
+ if (distance * edgeLengthKM < UPDATE_THRESHOLD_KM) {
226
+ return;
227
+ }
228
+ } catch (_unused) {}
315
229
  }
316
230
 
317
231
  var unitsPerMeter = viewport.distanceScales.unitsPerMeter;
318
- var vertices = h3ToPolygon(hex);
232
+ var vertices = (0, _h3Utils.h3ToPolygon)(hex);
319
233
 
320
- var _h3ToGeo5 = (0, _h3Js.h3ToGeo)(hex),
321
- _h3ToGeo6 = (0, _slicedToArray2.default)(_h3ToGeo5, 2),
322
- centerLat = _h3ToGeo6[0],
323
- centerLng = _h3ToGeo6[1];
234
+ var _cellToLatLng = (0, _h3Js.cellToLatLng)(hex),
235
+ _cellToLatLng2 = (0, _slicedToArray2.default)(_cellToLatLng, 2),
236
+ centerLat = _cellToLatLng2[0],
237
+ centerLng = _cellToLatLng2[1];
324
238
 
325
239
  var _viewport$projectFlat = viewport.projectFlat([centerLng, centerLat]),
326
240
  _viewport$projectFlat2 = (0, _slicedToArray2.default)(_viewport$projectFlat, 2),
@@ -410,7 +324,7 @@ var H3HexagonLayer = function (_CompositeLayer) {
410
324
  positionFormat: 'XY',
411
325
  getPolygon: function getPolygon(object, objectInfo) {
412
326
  var hexagonId = getHexagon(object, objectInfo);
413
- return flattenPolygon(h3ToPolygon(hexagonId, coverage));
327
+ return (0, _h3Utils.flattenPolygon)((0, _h3Utils.h3ToPolygon)(hexagonId, coverage));
414
328
  }
415
329
  });
416
330
  }
@@ -435,12 +349,12 @@ var H3HexagonLayer = function (_CompositeLayer) {
435
349
  diskResolution: 6,
436
350
  radius: 1,
437
351
  vertices: this.state.vertices,
438
- getPosition: getHexagonCentroid.bind(null, getHexagon)
352
+ getPosition: _h3Utils.getHexagonCentroid.bind(null, getHexagon)
439
353
  });
440
354
  }
441
355
  }]);
442
356
  return H3HexagonLayer;
443
- }(_core2.CompositeLayer);
357
+ }(_core.CompositeLayer);
444
358
 
445
359
  exports.default = H3HexagonLayer;
446
360
  (0, _defineProperty2.default)(H3HexagonLayer, "defaultProps", defaultProps);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/h3-layers/h3-hexagon-layer.ts"],"names":["UPDATE_THRESHOLD_KM","normalizeLongitudes","vertices","refLng","undefined","pt","deltaLng","scalePolygon","hexId","factor","lat","lng","actualCount","length","vertexCount","i","getHexagonCentroid","getHexagon","object","objectInfo","hexagonId","h3ToPolygon","coverage","flattenPolygon","positions","Float64Array","mergeTriggers","trigger","defaultProps","PolygonLayer","highPrecision","type","min","max","value","centerHexagon","x","hexagon","extruded","H3HexagonLayer","_checkH3Lib","state","edgeLengthKM","resolution","changeFlags","_shouldUseHighPrecision","propsOrDataChanged","somethingChanged","props","dataChanged","updateTriggersChanged","dataProps","_calculateH3DataProps","setState","_updateVertices","context","viewport","hasPentagon","hasMultipleRes","data","iterable","index","hexResolution","Boolean","centerHex","hex","latitude","longitude","distance","unitsPerMeter","distanceScales","centerLat","centerLng","projectFlat","centerX","centerY","map","p","worldPosition","_renderPolygonLayer","_renderColumnLayer","elevationScale","material","wireframe","stroked","filled","lineWidthUnits","lineWidthScale","lineWidthMinPixels","lineWidthMaxPixels","getFillColor","getElevation","getLineColor","getLineWidth","transitions","updateTriggers","SubLayerClass","getSubLayerClass","forwardProps","_getForwardProps","getPolygon","getSubLayerProps","id","_normalize","_windingOrder","positionFormat","ColumnLayer","getPosition","flatShading","diskResolution","radius","bind","CompositeLayer"],"mappings":"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","sourcesContent":["import {\n h3ToGeoBoundary,\n h3GetResolution,\n h3ToGeo,\n geoToH3,\n h3IsPentagon,\n h3Distance,\n edgeLength,\n H3Index\n} from 'h3-js';\nimport {lerp} from '@math.gl/core';\nimport {\n AccessorFunction,\n CompositeLayer,\n createIterable,\n Layer,\n LayersList,\n UpdateParameters,\n WebMercatorViewport,\n DefaultProps\n} from '@deck.gl/core';\nimport {ColumnLayer, PolygonLayer, PolygonLayerProps} from '@deck.gl/layers';\n\n// There is a cost to updating the instanced geometries when using highPrecision: false\n// This constant defines the distance between two hexagons that leads to \"significant\n// distortion.\" Smaller value makes the column layer more sensitive to viewport change.\nconst UPDATE_THRESHOLD_KM = 10;\n\n// normalize longitudes w.r.t center (refLng), when not provided first vertex\nexport function normalizeLongitudes(vertices: number[][], refLng?: number): void {\n refLng = refLng === undefined ? vertices[0][0] : refLng;\n for (const pt of vertices) {\n const deltaLng = pt[0] - refLng;\n if (deltaLng > 180) {\n pt[0] -= 360;\n } else if (deltaLng < -180) {\n pt[0] += 360;\n }\n }\n}\n\n// scale polygon vertices w.r.t center (hexId)\nexport function scalePolygon(hexId: H3Index, vertices: number[][], factor: number): void {\n const [lat, lng] = h3ToGeo(hexId);\n const actualCount = vertices.length;\n\n // normalize with respect to center\n normalizeLongitudes(vertices, lng);\n\n // `h3ToGeoBoundary` returns same array object for first and last vertex (closed polygon),\n // if so skip scaling the last vertex\n const vertexCount = vertices[0] === vertices[actualCount - 1] ? actualCount - 1 : actualCount;\n for (let i = 0; i < vertexCount; i++) {\n vertices[i][0] = lerp(lng, vertices[i][0], factor);\n vertices[i][1] = lerp(lat, vertices[i][1], factor);\n }\n}\n\nfunction getHexagonCentroid(getHexagon, object, objectInfo) {\n const hexagonId = getHexagon(object, objectInfo);\n const [lat, lng] = h3ToGeo(hexagonId);\n return [lng, lat];\n}\n\nfunction h3ToPolygon(hexId: H3Index, coverage: number = 1): number[][] {\n const vertices = h3ToGeoBoundary(hexId, true);\n\n if (coverage !== 1) {\n // scale and normalize vertices w.r.t to center\n scalePolygon(hexId, vertices, coverage);\n } else {\n // normalize w.r.t to start vertex\n normalizeLongitudes(vertices);\n }\n\n return vertices;\n}\n\nfunction flattenPolygon(vertices: number[][]): Float64Array {\n const positions = new Float64Array(vertices.length * 2);\n let i = 0;\n for (const pt of vertices) {\n positions[i++] = pt[0];\n positions[i++] = pt[1];\n }\n return positions;\n}\n\nfunction mergeTriggers(getHexagon, coverage) {\n let trigger;\n if (getHexagon === undefined || getHexagon === null) {\n trigger = coverage;\n } else if (typeof getHexagon === 'object') {\n trigger = {...getHexagon, coverage};\n } else {\n trigger = {getHexagon, coverage};\n }\n return trigger;\n}\n\nconst defaultProps: DefaultProps<H3HexagonLayerProps> = {\n ...PolygonLayer.defaultProps,\n highPrecision: 'auto',\n coverage: {type: 'number', min: 0, max: 1, value: 1},\n centerHexagon: null,\n getHexagon: {type: 'accessor', value: x => x.hexagon},\n extruded: true\n};\n\n/** All properties supported by H3HexagonLayer */\nexport type H3HexagonLayerProps<DataT = any> = _H3HexagonLayerProps<DataT> &\n PolygonLayerProps<DataT>;\n\n/** Props added by the H3HexagonLayer */\ntype _H3HexagonLayerProps<DataT> = {\n /**\n * Whether or not draw hexagons with high precision.\n * @default 'auto'\n */\n highPrecision?: boolean | 'auto';\n /**\n * Coverage of hexagon in cell.\n * @default 1\n */\n coverage?: number;\n /**\n * Center hexagon that best represents the shape of the set. If not specified, the hexagon closest to the center of the viewport is used.\n */\n centerHexagon?: H3Index | null;\n /**\n * Called for each data object to retrieve the quadkey string identifier.\n *\n * By default, it reads `hexagon` property of data object.\n */\n getHexagon?: AccessorFunction<DataT, string>;\n /**\n * Whether to extrude polygons.\n * @default true\n */\n extruded?: boolean;\n};\n\n/**\n * Render hexagons from the [H3](https://h3geo.org/) geospatial indexing system.\n */\nexport default class H3HexagonLayer<\n DataT = any,\n ExtraPropsT extends {} = {}\n> extends CompositeLayer<ExtraPropsT & Required<H3HexagonLayerProps<DataT>>> {\n static defaultProps = defaultProps;\n static layerName = 'H3HexagonLayer';\n\n // See `main/bundle.ts`\n static _checkH3Lib = () => {};\n\n initializeState() {\n H3HexagonLayer._checkH3Lib();\n this.state = {\n edgeLengthKM: 0,\n resolution: -1\n };\n }\n\n state!: {\n centerHex?: H3Index;\n edgeLengthKM: number;\n hasMultipleRes?: boolean;\n hasPentagon?: boolean;\n resolution: number;\n vertices?: number[][];\n };\n\n shouldUpdateState({changeFlags}: UpdateParameters<this>): boolean {\n return this._shouldUseHighPrecision()\n ? changeFlags.propsOrDataChanged\n : changeFlags.somethingChanged;\n }\n\n updateState({props, changeFlags}: UpdateParameters<this>): void {\n if (\n props.highPrecision !== true &&\n (changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged && changeFlags.updateTriggersChanged.getHexagon))\n ) {\n const dataProps = this._calculateH3DataProps();\n this.setState(dataProps);\n }\n\n this._updateVertices(this.context.viewport as WebMercatorViewport);\n }\n\n private _calculateH3DataProps() {\n let resolution = -1;\n let hasPentagon = false;\n let hasMultipleRes = false;\n\n const {iterable, objectInfo} = createIterable(this.props.data);\n for (const object of iterable) {\n objectInfo.index++;\n const hexId = this.props.getHexagon(object, objectInfo);\n // Take the resolution of the first hex\n const hexResolution = h3GetResolution(hexId);\n if (resolution < 0) {\n resolution = hexResolution;\n if (!this.props.highPrecision) break;\n } else if (resolution !== hexResolution) {\n hasMultipleRes = true;\n break;\n }\n if (h3IsPentagon(hexId)) {\n hasPentagon = true;\n break;\n }\n }\n\n return {\n resolution,\n edgeLengthKM: resolution >= 0 ? edgeLength(resolution, 'km') : 0,\n hasMultipleRes,\n hasPentagon\n };\n }\n\n private _shouldUseHighPrecision(): boolean {\n if (this.props.highPrecision === 'auto') {\n const {resolution, hasPentagon, hasMultipleRes} = this.state;\n const {viewport} = this.context;\n return (\n Boolean(viewport?.resolution) ||\n hasMultipleRes ||\n hasPentagon ||\n (resolution >= 0 && resolution <= 5)\n );\n }\n\n return this.props.highPrecision;\n }\n\n private _updateVertices(viewport: WebMercatorViewport): void {\n if (this._shouldUseHighPrecision()) {\n return;\n }\n const {resolution, edgeLengthKM, centerHex} = this.state;\n if (resolution < 0) {\n return;\n }\n const hex =\n this.props.centerHexagon || geoToH3(viewport.latitude, viewport.longitude, resolution);\n if (centerHex === hex) {\n return;\n }\n if (centerHex) {\n const distance = h3Distance(centerHex, hex);\n // h3Distance returns a negative number if the distance could not be computed\n // due to the two indexes very far apart or on opposite sides of a pentagon.\n if (distance >= 0 && distance * edgeLengthKM < UPDATE_THRESHOLD_KM) {\n return;\n }\n }\n\n const {unitsPerMeter} = viewport.distanceScales;\n\n let vertices = h3ToPolygon(hex);\n const [centerLat, centerLng] = h3ToGeo(hex);\n\n const [centerX, centerY] = viewport.projectFlat([centerLng, centerLat]);\n vertices = vertices.map(p => {\n const worldPosition = viewport.projectFlat(p);\n return [\n (worldPosition[0] - centerX) / unitsPerMeter[0],\n (worldPosition[1] - centerY) / unitsPerMeter[1]\n ];\n });\n\n this.setState({centerHex: hex, vertices});\n }\n\n renderLayers(): Layer | null | LayersList {\n return this._shouldUseHighPrecision() ? this._renderPolygonLayer() : this._renderColumnLayer();\n }\n\n private _getForwardProps() {\n const {\n elevationScale,\n material,\n coverage,\n extruded,\n wireframe,\n stroked,\n filled,\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels,\n getFillColor,\n getElevation,\n getLineColor,\n getLineWidth,\n transitions,\n updateTriggers\n } = this.props;\n\n return {\n elevationScale,\n extruded,\n coverage,\n wireframe,\n stroked,\n filled,\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels,\n material,\n getElevation,\n getFillColor,\n getLineColor,\n getLineWidth,\n transitions,\n updateTriggers: {\n getFillColor: updateTriggers.getFillColor,\n getElevation: updateTriggers.getElevation,\n getLineColor: updateTriggers.getLineColor,\n getLineWidth: updateTriggers.getLineWidth\n } as {\n getFillColor: any;\n getElevation: any;\n getLineColor: any;\n getLineWidth: any;\n getPolygon?: any;\n getPosition?: any;\n }\n };\n }\n\n private _renderPolygonLayer(): PolygonLayer {\n const {data, getHexagon, updateTriggers, coverage} = this.props;\n\n const SubLayerClass = this.getSubLayerClass('hexagon-cell-hifi', PolygonLayer);\n const forwardProps = this._getForwardProps();\n forwardProps.updateTriggers.getPolygon = mergeTriggers(updateTriggers.getHexagon, coverage);\n\n return new SubLayerClass(\n forwardProps,\n this.getSubLayerProps({\n id: 'hexagon-cell-hifi',\n updateTriggers: forwardProps.updateTriggers\n }),\n {\n data,\n _normalize: false,\n _windingOrder: 'CCW',\n positionFormat: 'XY',\n getPolygon: (object, objectInfo) => {\n const hexagonId = getHexagon(object, objectInfo);\n return flattenPolygon(h3ToPolygon(hexagonId, coverage));\n }\n }\n );\n }\n\n private _renderColumnLayer(): ColumnLayer {\n const {data, getHexagon, updateTriggers} = this.props;\n\n const SubLayerClass = this.getSubLayerClass('hexagon-cell', ColumnLayer);\n const forwardProps = this._getForwardProps();\n forwardProps.updateTriggers.getPosition = updateTriggers.getHexagon;\n\n return new SubLayerClass(\n forwardProps,\n this.getSubLayerProps({\n id: 'hexagon-cell',\n flatShading: true,\n updateTriggers: forwardProps.updateTriggers\n }),\n {\n data,\n diskResolution: 6, // generate an extruded hexagon as the base geometry\n radius: 1,\n vertices: this.state.vertices,\n getPosition: getHexagonCentroid.bind(null, getHexagon)\n }\n );\n }\n}\n"],"file":"h3-hexagon-layer.js"}
1
+ {"version":3,"sources":["../../../src/h3-layers/h3-hexagon-layer.ts"],"names":["UPDATE_THRESHOLD_KM","mergeTriggers","getHexagon","coverage","trigger","undefined","defaultProps","PolygonLayer","highPrecision","type","min","max","value","centerHexagon","x","hexagon","extruded","H3HexagonLayer","_checkH3Lib","state","edgeLengthKM","resolution","changeFlags","_shouldUseHighPrecision","propsOrDataChanged","somethingChanged","props","dataChanged","updateTriggersChanged","dataProps","_calculateH3DataProps","setState","_updateVertices","context","viewport","hasPentagon","hasMultipleRes","data","iterable","objectInfo","object","index","hexId","hexResolution","Boolean","centerHex","hex","latitude","longitude","distance","unitsPerMeter","distanceScales","vertices","centerLat","centerLng","projectFlat","centerX","centerY","map","p","worldPosition","_renderPolygonLayer","_renderColumnLayer","elevationScale","material","wireframe","stroked","filled","lineWidthUnits","lineWidthScale","lineWidthMinPixels","lineWidthMaxPixels","getFillColor","getElevation","getLineColor","getLineWidth","transitions","updateTriggers","SubLayerClass","getSubLayerClass","forwardProps","_getForwardProps","getPolygon","getSubLayerProps","id","_normalize","_windingOrder","positionFormat","hexagonId","ColumnLayer","getPosition","flatShading","diskResolution","radius","getHexagonCentroid","bind","CompositeLayer"],"mappings":"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","sourcesContent":["import {\n getResolution,\n cellToLatLng,\n latLngToCell,\n isPentagon,\n gridDistance,\n getHexagonEdgeLengthAvg,\n H3Index\n} from 'h3-js';\nimport {\n AccessorFunction,\n CompositeLayer,\n createIterable,\n Layer,\n LayersList,\n UpdateParameters,\n WebMercatorViewport,\n DefaultProps\n} from '@deck.gl/core';\nimport {ColumnLayer, PolygonLayer, PolygonLayerProps} from '@deck.gl/layers';\nimport {flattenPolygon, getHexagonCentroid, h3ToPolygon} from './h3-utils';\n\n// There is a cost to updating the instanced geometries when using highPrecision: false\n// This constant defines the distance between two hexagons that leads to \"significant\n// distortion.\" Smaller value makes the column layer more sensitive to viewport change.\nconst UPDATE_THRESHOLD_KM = 10;\n\nfunction mergeTriggers(getHexagon, coverage) {\n let trigger;\n if (getHexagon === undefined || getHexagon === null) {\n trigger = coverage;\n } else if (typeof getHexagon === 'object') {\n trigger = {...getHexagon, coverage};\n } else {\n trigger = {getHexagon, coverage};\n }\n return trigger;\n}\n\nconst defaultProps: DefaultProps<H3HexagonLayerProps> = {\n ...PolygonLayer.defaultProps,\n highPrecision: 'auto',\n coverage: {type: 'number', min: 0, max: 1, value: 1},\n centerHexagon: null,\n getHexagon: {type: 'accessor', value: x => x.hexagon},\n extruded: true\n};\n\n/** All properties supported by H3HexagonLayer */\nexport type H3HexagonLayerProps<DataT = any> = _H3HexagonLayerProps<DataT> &\n PolygonLayerProps<DataT>;\n\n/** Props added by the H3HexagonLayer */\ntype _H3HexagonLayerProps<DataT> = {\n /**\n * Whether or not draw hexagons with high precision.\n * @default 'auto'\n */\n highPrecision?: boolean | 'auto';\n /**\n * Coverage of hexagon in cell.\n * @default 1\n */\n coverage?: number;\n /**\n * Center hexagon that best represents the shape of the set. If not specified, the hexagon closest to the center of the viewport is used.\n */\n centerHexagon?: H3Index | null;\n /**\n * Called for each data object to retrieve the quadkey string identifier.\n *\n * By default, it reads `hexagon` property of data object.\n */\n getHexagon?: AccessorFunction<DataT, string>;\n /**\n * Whether to extrude polygons.\n * @default true\n */\n extruded?: boolean;\n};\n\n/**\n * Render hexagons from the [H3](https://h3geo.org/) geospatial indexing system.\n */\nexport default class H3HexagonLayer<\n DataT = any,\n ExtraPropsT extends {} = {}\n> extends CompositeLayer<ExtraPropsT & Required<H3HexagonLayerProps<DataT>>> {\n static defaultProps = defaultProps;\n static layerName = 'H3HexagonLayer';\n\n // See `main/bundle.ts`\n static _checkH3Lib = () => {};\n\n initializeState() {\n H3HexagonLayer._checkH3Lib();\n this.state = {\n edgeLengthKM: 0,\n resolution: -1\n };\n }\n\n state!: {\n centerHex?: H3Index;\n edgeLengthKM: number;\n hasMultipleRes?: boolean;\n hasPentagon?: boolean;\n resolution: number;\n vertices?: number[][];\n };\n\n shouldUpdateState({changeFlags}: UpdateParameters<this>): boolean {\n return this._shouldUseHighPrecision()\n ? changeFlags.propsOrDataChanged\n : changeFlags.somethingChanged;\n }\n\n updateState({props, changeFlags}: UpdateParameters<this>): void {\n if (\n props.highPrecision !== true &&\n (changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged && changeFlags.updateTriggersChanged.getHexagon))\n ) {\n const dataProps = this._calculateH3DataProps();\n this.setState(dataProps);\n }\n\n this._updateVertices(this.context.viewport as WebMercatorViewport);\n }\n\n private _calculateH3DataProps() {\n let resolution = -1;\n let hasPentagon = false;\n let hasMultipleRes = false;\n\n const {iterable, objectInfo} = createIterable(this.props.data);\n for (const object of iterable) {\n objectInfo.index++;\n const hexId = this.props.getHexagon(object, objectInfo);\n // Take the resolution of the first hex\n const hexResolution = getResolution(hexId);\n if (resolution < 0) {\n resolution = hexResolution;\n if (!this.props.highPrecision) break;\n } else if (resolution !== hexResolution) {\n hasMultipleRes = true;\n break;\n }\n if (isPentagon(hexId)) {\n hasPentagon = true;\n break;\n }\n }\n\n return {\n resolution,\n edgeLengthKM: resolution >= 0 ? getHexagonEdgeLengthAvg(resolution, 'km') : 0,\n hasMultipleRes,\n hasPentagon\n };\n }\n\n private _shouldUseHighPrecision(): boolean {\n if (this.props.highPrecision === 'auto') {\n const {resolution, hasPentagon, hasMultipleRes} = this.state;\n const {viewport} = this.context;\n return (\n Boolean(viewport?.resolution) ||\n hasMultipleRes ||\n hasPentagon ||\n (resolution >= 0 && resolution <= 5)\n );\n }\n\n return this.props.highPrecision;\n }\n\n private _updateVertices(viewport: WebMercatorViewport): void {\n if (this._shouldUseHighPrecision()) {\n return;\n }\n const {resolution, edgeLengthKM, centerHex} = this.state;\n if (resolution < 0) {\n return;\n }\n const hex =\n this.props.centerHexagon || latLngToCell(viewport.latitude, viewport.longitude, resolution);\n if (centerHex === hex) {\n return;\n }\n if (centerHex) {\n try {\n const distance = gridDistance(centerHex, hex);\n if (distance * edgeLengthKM < UPDATE_THRESHOLD_KM) {\n return;\n }\n } catch {\n // gridDistance throws if the distance could not be computed\n // due to the two indexes very far apart or on opposite sides of a pentagon.\n }\n }\n\n const {unitsPerMeter} = viewport.distanceScales;\n\n let vertices = h3ToPolygon(hex);\n const [centerLat, centerLng] = cellToLatLng(hex);\n\n const [centerX, centerY] = viewport.projectFlat([centerLng, centerLat]);\n vertices = vertices.map(p => {\n const worldPosition = viewport.projectFlat(p);\n return [\n (worldPosition[0] - centerX) / unitsPerMeter[0],\n (worldPosition[1] - centerY) / unitsPerMeter[1]\n ];\n });\n\n this.setState({centerHex: hex, vertices});\n }\n\n renderLayers(): Layer | null | LayersList {\n return this._shouldUseHighPrecision() ? this._renderPolygonLayer() : this._renderColumnLayer();\n }\n\n private _getForwardProps() {\n const {\n elevationScale,\n material,\n coverage,\n extruded,\n wireframe,\n stroked,\n filled,\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels,\n getFillColor,\n getElevation,\n getLineColor,\n getLineWidth,\n transitions,\n updateTriggers\n } = this.props;\n\n return {\n elevationScale,\n extruded,\n coverage,\n wireframe,\n stroked,\n filled,\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels,\n material,\n getElevation,\n getFillColor,\n getLineColor,\n getLineWidth,\n transitions,\n updateTriggers: {\n getFillColor: updateTriggers.getFillColor,\n getElevation: updateTriggers.getElevation,\n getLineColor: updateTriggers.getLineColor,\n getLineWidth: updateTriggers.getLineWidth\n } as {\n getFillColor: any;\n getElevation: any;\n getLineColor: any;\n getLineWidth: any;\n getPolygon?: any;\n getPosition?: any;\n }\n };\n }\n\n private _renderPolygonLayer(): PolygonLayer {\n const {data, getHexagon, updateTriggers, coverage} = this.props;\n\n const SubLayerClass = this.getSubLayerClass('hexagon-cell-hifi', PolygonLayer);\n const forwardProps = this._getForwardProps();\n forwardProps.updateTriggers.getPolygon = mergeTriggers(updateTriggers.getHexagon, coverage);\n\n return new SubLayerClass(\n forwardProps,\n this.getSubLayerProps({\n id: 'hexagon-cell-hifi',\n updateTriggers: forwardProps.updateTriggers\n }),\n {\n data,\n _normalize: false,\n _windingOrder: 'CCW',\n positionFormat: 'XY',\n getPolygon: (object, objectInfo) => {\n const hexagonId = getHexagon(object, objectInfo);\n return flattenPolygon(h3ToPolygon(hexagonId, coverage));\n }\n }\n );\n }\n\n private _renderColumnLayer(): ColumnLayer {\n const {data, getHexagon, updateTriggers} = this.props;\n\n const SubLayerClass = this.getSubLayerClass('hexagon-cell', ColumnLayer);\n const forwardProps = this._getForwardProps();\n forwardProps.updateTriggers.getPosition = updateTriggers.getHexagon;\n\n return new SubLayerClass(\n forwardProps,\n this.getSubLayerProps({\n id: 'hexagon-cell',\n flatShading: true,\n updateTriggers: forwardProps.updateTriggers\n }),\n {\n data,\n diskResolution: 6, // generate an extruded hexagon as the base geometry\n radius: 1,\n vertices: this.state.vertices,\n getPosition: getHexagonCentroid.bind(null, getHexagon)\n }\n );\n }\n}\n"],"file":"h3-hexagon-layer.js"}