@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 +38 -27
- package/dist/es5/h3-layers/h3-cluster-layer.js +18 -1
- package/dist/es5/h3-layers/h3-cluster-layer.js.map +1 -1
- package/dist/es5/h3-layers/h3-hexagon-layer.js +34 -120
- package/dist/es5/h3-layers/h3-hexagon-layer.js.map +1 -1
- package/dist/es5/h3-layers/h3-utils.js +111 -0
- package/dist/es5/h3-layers/h3-utils.js.map +1 -0
- package/dist/esm/h3-layers/h3-cluster-layer.js +7 -2
- package/dist/esm/h3-layers/h3-cluster-layer.js.map +1 -1
- package/dist/esm/h3-layers/h3-hexagon-layer.js +13 -65
- package/dist/esm/h3-layers/h3-hexagon-layer.js.map +1 -1
- package/dist/esm/h3-layers/h3-utils.js +54 -0
- package/dist/esm/h3-layers/h3-utils.js.map +1 -0
- package/dist.min.js +56 -55
- package/package.json +3 -3
- package/src/h3-layers/h3-cluster-layer.ts +7 -2
- package/src/h3-layers/h3-hexagon-layer.ts +20 -78
- package/src/h3-layers/h3-utils.ts +63 -0
- package/typed/h3-layers/h3-cluster-layer.d.ts.map +1 -1
- package/typed/h3-layers/h3-hexagon-layer.d.ts +0 -2
- package/typed/h3-layers/h3-hexagon-layer.d.ts.map +1 -1
- package/typed/h3-layers/h3-utils.d.ts +7 -0
- package/typed/h3-layers/h3-utils.d.ts.map +1 -0
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
-
|
|
10627
|
-
|
|
10628
|
-
|
|
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,
|
|
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,
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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;
|
|
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("@
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
145
|
+
var _createIterable = (0, _core.createIterable)(this.props.data),
|
|
234
146
|
iterable = _createIterable.iterable,
|
|
235
147
|
objectInfo = _createIterable.objectInfo;
|
|
236
148
|
|
|
237
|
-
var
|
|
238
|
-
|
|
149
|
+
var _iterator = _createForOfIteratorHelper(iterable),
|
|
150
|
+
_step;
|
|
239
151
|
|
|
240
152
|
try {
|
|
241
|
-
for (
|
|
242
|
-
var object =
|
|
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.
|
|
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.
|
|
167
|
+
if ((0, _h3Js.isPentagon)(hexId)) {
|
|
256
168
|
hasPentagon = true;
|
|
257
169
|
break;
|
|
258
170
|
}
|
|
259
171
|
}
|
|
260
172
|
} catch (err) {
|
|
261
|
-
|
|
173
|
+
_iterator.e(err);
|
|
262
174
|
} finally {
|
|
263
|
-
|
|
175
|
+
_iterator.f();
|
|
264
176
|
}
|
|
265
177
|
|
|
266
178
|
return {
|
|
267
179
|
resolution: resolution,
|
|
268
|
-
edgeLengthKM: resolution >= 0 ? (0, _h3Js.
|
|
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.
|
|
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
|
-
|
|
222
|
+
try {
|
|
223
|
+
var distance = (0, _h3Js.gridDistance)(centerHex, hex);
|
|
311
224
|
|
|
312
|
-
|
|
313
|
-
|
|
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
|
|
321
|
-
|
|
322
|
-
centerLat =
|
|
323
|
-
centerLng =
|
|
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
|
-
}(
|
|
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"}
|