@deck.gl/geo-layers 8.9.18 → 8.10.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.dev.js +27 -24
- package/dist/es5/h3-layers/h3-cluster-layer.js +1 -1
- package/dist/es5/h3-layers/h3-cluster-layer.js.map +1 -1
- package/dist/es5/h3-layers/h3-hexagon-layer.js +23 -21
- package/dist/es5/h3-layers/h3-hexagon-layer.js.map +1 -1
- package/dist/esm/h3-layers/h3-cluster-layer.js +2 -2
- package/dist/esm/h3-layers/h3-cluster-layer.js.map +1 -1
- package/dist/esm/h3-layers/h3-hexagon-layer.js +15 -13
- package/dist/esm/h3-layers/h3-hexagon-layer.js.map +1 -1
- package/dist.min.js +8 -8
- package/package.json +3 -3
- package/src/h3-layers/h3-cluster-layer.ts +2 -2
- package/src/h3-layers/h3-hexagon-layer.ts +24 -21
- package/typed/h3-layers/h3-hexagon-layer.d.ts.map +1 -1
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 {
|
|
@@ -10475,7 +10475,7 @@ varying float vTime;
|
|
|
10475
10475
|
}
|
|
10476
10476
|
}
|
|
10477
10477
|
function scalePolygon(hexId, vertices, factor) {
|
|
10478
|
-
const [lat, lng] = (0, import_h3_js.
|
|
10478
|
+
const [lat, lng] = (0, import_h3_js.cellToLatLng)(hexId);
|
|
10479
10479
|
const actualCount = vertices.length;
|
|
10480
10480
|
normalizeLongitudes(vertices, lng);
|
|
10481
10481
|
const vertexCount = vertices[0] === vertices[actualCount - 1] ? actualCount - 1 : actualCount;
|
|
@@ -10486,11 +10486,11 @@ varying float vTime;
|
|
|
10486
10486
|
}
|
|
10487
10487
|
function getHexagonCentroid(getHexagon, object, objectInfo) {
|
|
10488
10488
|
const hexagonId = getHexagon(object, objectInfo);
|
|
10489
|
-
const [lat, lng] = (0, import_h3_js.
|
|
10489
|
+
const [lat, lng] = (0, import_h3_js.cellToLatLng)(hexagonId);
|
|
10490
10490
|
return [lng, lat];
|
|
10491
10491
|
}
|
|
10492
10492
|
function h3ToPolygon(hexId, coverage = 1) {
|
|
10493
|
-
const vertices = (0, import_h3_js.
|
|
10493
|
+
const vertices = (0, import_h3_js.cellToBoundary)(hexId, true);
|
|
10494
10494
|
if (coverage !== 1) {
|
|
10495
10495
|
scalePolygon(hexId, vertices, coverage);
|
|
10496
10496
|
} else {
|
|
@@ -10574,7 +10574,7 @@ varying float vTime;
|
|
|
10574
10574
|
for (const object of iterable) {
|
|
10575
10575
|
objectInfo.index++;
|
|
10576
10576
|
const hexId = this.props.getHexagon(object, objectInfo);
|
|
10577
|
-
const hexResolution = (0, import_h3_js.
|
|
10577
|
+
const hexResolution = (0, import_h3_js.getResolution)(hexId);
|
|
10578
10578
|
if (resolution < 0) {
|
|
10579
10579
|
resolution = hexResolution;
|
|
10580
10580
|
if (!this.props.highPrecision)
|
|
@@ -10583,14 +10583,14 @@ varying float vTime;
|
|
|
10583
10583
|
hasMultipleRes = true;
|
|
10584
10584
|
break;
|
|
10585
10585
|
}
|
|
10586
|
-
if ((0, import_h3_js.
|
|
10586
|
+
if ((0, import_h3_js.isPentagon)(hexId)) {
|
|
10587
10587
|
hasPentagon = true;
|
|
10588
10588
|
break;
|
|
10589
10589
|
}
|
|
10590
10590
|
}
|
|
10591
10591
|
return {
|
|
10592
10592
|
resolution,
|
|
10593
|
-
edgeLengthKM: resolution >= 0 ? (0, import_h3_js.
|
|
10593
|
+
edgeLengthKM: resolution >= 0 ? (0, import_h3_js.getHexagonEdgeLengthAvg)(resolution, "km") : 0,
|
|
10594
10594
|
hasMultipleRes,
|
|
10595
10595
|
hasPentagon
|
|
10596
10596
|
};
|
|
@@ -10621,21 +10621,24 @@ varying float vTime;
|
|
|
10621
10621
|
if (resolution < 0) {
|
|
10622
10622
|
return;
|
|
10623
10623
|
}
|
|
10624
|
-
const hex = this.props.centerHexagon || (0, import_h3_js.
|
|
10624
|
+
const hex = this.props.centerHexagon || (0, import_h3_js.latLngToCell)(viewport.latitude, viewport.longitude, resolution);
|
|
10625
10625
|
if (centerHex === hex) {
|
|
10626
10626
|
return;
|
|
10627
10627
|
}
|
|
10628
10628
|
if (centerHex) {
|
|
10629
|
-
|
|
10630
|
-
|
|
10631
|
-
|
|
10629
|
+
try {
|
|
10630
|
+
const distance = (0, import_h3_js.gridDistance)(centerHex, hex);
|
|
10631
|
+
if (distance * edgeLengthKM < UPDATE_THRESHOLD_KM) {
|
|
10632
|
+
return;
|
|
10633
|
+
}
|
|
10634
|
+
} catch {
|
|
10632
10635
|
}
|
|
10633
10636
|
}
|
|
10634
10637
|
const {
|
|
10635
10638
|
unitsPerMeter: unitsPerMeter2
|
|
10636
10639
|
} = viewport.distanceScales;
|
|
10637
10640
|
let vertices = h3ToPolygon(hex);
|
|
10638
|
-
const [centerLat, centerLng] = (0, import_h3_js.
|
|
10641
|
+
const [centerLat, centerLng] = (0, import_h3_js.cellToLatLng)(hex);
|
|
10639
10642
|
const [centerX, centerY] = viewport.projectFlat([centerLng, centerLat]);
|
|
10640
10643
|
vertices = vertices.map((p2) => {
|
|
10641
10644
|
const worldPosition = viewport.projectFlat(p2);
|
|
@@ -10774,7 +10777,7 @@ varying float vTime;
|
|
|
10774
10777
|
for (const object of iterable) {
|
|
10775
10778
|
objectInfo.index++;
|
|
10776
10779
|
const hexagons = getHexagons(object, objectInfo);
|
|
10777
|
-
const multiPolygon = (0, import_h3_js2.
|
|
10780
|
+
const multiPolygon = (0, import_h3_js2.cellsToMultiPolygon)(hexagons, true);
|
|
10778
10781
|
for (const polygon of multiPolygon) {
|
|
10779
10782
|
polygons.push(this.getSubLayerRow({
|
|
10780
10783
|
polygon
|
|
@@ -19226,7 +19229,7 @@ void main(void) {
|
|
|
19226
19229
|
};
|
|
19227
19230
|
|
|
19228
19231
|
// ../../node_modules/@loaders.gl/3d-tiles/dist/esm/lib/utils/version.js
|
|
19229
|
-
var VERSION8 = true ? "3.4.
|
|
19232
|
+
var VERSION8 = true ? "3.4.3" : "latest";
|
|
19230
19233
|
|
|
19231
19234
|
// ../../node_modules/@loaders.gl/3d-tiles/dist/esm/lib/constants.js
|
|
19232
19235
|
var TILE3D_TYPE = {
|
|
@@ -19255,7 +19258,7 @@ void main(void) {
|
|
|
19255
19258
|
}
|
|
19256
19259
|
|
|
19257
19260
|
// ../../node_modules/@loaders.gl/draco/dist/esm/lib/utils/version.js
|
|
19258
|
-
var VERSION9 = true ? "3.4.
|
|
19261
|
+
var VERSION9 = true ? "3.4.3" : "latest";
|
|
19259
19262
|
|
|
19260
19263
|
// ../../node_modules/@loaders.gl/draco/dist/esm/draco-loader.js
|
|
19261
19264
|
var DEFAULT_DRACO_OPTIONS = {
|
|
@@ -21421,13 +21424,13 @@ void main(void) {
|
|
|
21421
21424
|
}
|
|
21422
21425
|
|
|
21423
21426
|
// ../../node_modules/@loaders.gl/gltf/dist/esm/lib/utils/version.js
|
|
21424
|
-
var VERSION10 = true ? "3.4.
|
|
21427
|
+
var VERSION10 = true ? "3.4.3" : "latest";
|
|
21425
21428
|
|
|
21426
21429
|
// ../../node_modules/@loaders.gl/textures/dist/esm/lib/utils/version.js
|
|
21427
|
-
var VERSION11 = true ? "3.4.
|
|
21430
|
+
var VERSION11 = true ? "3.4.3" : "latest";
|
|
21428
21431
|
|
|
21429
21432
|
// ../../node_modules/@loaders.gl/textures/dist/esm/lib/parsers/basis-module-loader.js
|
|
21430
|
-
var VERSION12 = true ? "3.4.
|
|
21433
|
+
var VERSION12 = true ? "3.4.3" : "latest";
|
|
21431
21434
|
var BASIS_CDN_ENCODER_WASM = "https://unpkg.com/@loaders.gl/textures@".concat(VERSION12, "/dist/libs/basis_encoder.wasm");
|
|
21432
21435
|
var BASIS_CDN_ENCODER_JS = "https://unpkg.com/@loaders.gl/textures@".concat(VERSION12, "/dist/libs/basis_encoder.js");
|
|
21433
21436
|
var loadBasisTranscoderPromise;
|
|
@@ -27561,7 +27564,7 @@ void main(void) {
|
|
|
27561
27564
|
}
|
|
27562
27565
|
|
|
27563
27566
|
// ../../node_modules/@loaders.gl/terrain/dist/esm/lib/utils/version.js
|
|
27564
|
-
var VERSION13 = true ? "3.4.
|
|
27567
|
+
var VERSION13 = true ? "3.4.3" : "latest";
|
|
27565
27568
|
|
|
27566
27569
|
// ../../node_modules/@loaders.gl/terrain/dist/esm/terrain-loader.js
|
|
27567
27570
|
var TerrainLoader = {
|
|
@@ -29609,7 +29612,7 @@ void main(void) {
|
|
|
29609
29612
|
}
|
|
29610
29613
|
|
|
29611
29614
|
// ../../node_modules/@loaders.gl/mvt/dist/esm/mvt-loader.js
|
|
29612
|
-
var VERSION14 = true ? "3.4.
|
|
29615
|
+
var VERSION14 = true ? "3.4.3" : "latest";
|
|
29613
29616
|
var DEFAULT_MVT_LOADER_OPTIONS = {
|
|
29614
29617
|
mvt: {
|
|
29615
29618
|
shape: "geojson",
|
|
@@ -84,7 +84,7 @@ var H3ClusterLayer = function (_GeoCellLayer) {
|
|
|
84
84
|
var object = _step.value;
|
|
85
85
|
objectInfo.index++;
|
|
86
86
|
var hexagons = getHexagons(object, objectInfo);
|
|
87
|
-
var multiPolygon = (0, _h3Js.
|
|
87
|
+
var multiPolygon = (0, _h3Js.cellsToMultiPolygon)(hexagons, true);
|
|
88
88
|
|
|
89
89
|
var _iterator2 = _createForOfIteratorHelper(multiPolygon),
|
|
90
90
|
_step2;
|
|
@@ -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 {
|
|
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 {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';\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 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"}
|
|
@@ -76,10 +76,10 @@ function normalizeLongitudes(vertices, refLng) {
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
function scalePolygon(hexId, vertices, factor) {
|
|
79
|
-
var
|
|
80
|
-
|
|
81
|
-
lat =
|
|
82
|
-
lng =
|
|
79
|
+
var _cellToLatLng = (0, _h3Js.cellToLatLng)(hexId),
|
|
80
|
+
_cellToLatLng2 = (0, _slicedToArray2.default)(_cellToLatLng, 2),
|
|
81
|
+
lat = _cellToLatLng2[0],
|
|
82
|
+
lng = _cellToLatLng2[1];
|
|
83
83
|
|
|
84
84
|
var actualCount = vertices.length;
|
|
85
85
|
normalizeLongitudes(vertices, lng);
|
|
@@ -94,17 +94,17 @@ function scalePolygon(hexId, vertices, factor) {
|
|
|
94
94
|
function getHexagonCentroid(getHexagon, object, objectInfo) {
|
|
95
95
|
var hexagonId = getHexagon(object, objectInfo);
|
|
96
96
|
|
|
97
|
-
var
|
|
98
|
-
|
|
99
|
-
lat =
|
|
100
|
-
lng =
|
|
97
|
+
var _cellToLatLng3 = (0, _h3Js.cellToLatLng)(hexagonId),
|
|
98
|
+
_cellToLatLng4 = (0, _slicedToArray2.default)(_cellToLatLng3, 2),
|
|
99
|
+
lat = _cellToLatLng4[0],
|
|
100
|
+
lng = _cellToLatLng4[1];
|
|
101
101
|
|
|
102
102
|
return [lng, lat];
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
function h3ToPolygon(hexId) {
|
|
106
106
|
var coverage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
107
|
-
var vertices = (0, _h3Js.
|
|
107
|
+
var vertices = (0, _h3Js.cellToBoundary)(hexId, true);
|
|
108
108
|
|
|
109
109
|
if (coverage !== 1) {
|
|
110
110
|
scalePolygon(hexId, vertices, coverage);
|
|
@@ -242,7 +242,7 @@ var H3HexagonLayer = function (_CompositeLayer) {
|
|
|
242
242
|
var object = _step3.value;
|
|
243
243
|
objectInfo.index++;
|
|
244
244
|
var hexId = this.props.getHexagon(object, objectInfo);
|
|
245
|
-
var hexResolution = (0, _h3Js.
|
|
245
|
+
var hexResolution = (0, _h3Js.getResolution)(hexId);
|
|
246
246
|
|
|
247
247
|
if (resolution < 0) {
|
|
248
248
|
resolution = hexResolution;
|
|
@@ -252,7 +252,7 @@ var H3HexagonLayer = function (_CompositeLayer) {
|
|
|
252
252
|
break;
|
|
253
253
|
}
|
|
254
254
|
|
|
255
|
-
if ((0, _h3Js.
|
|
255
|
+
if ((0, _h3Js.isPentagon)(hexId)) {
|
|
256
256
|
hasPentagon = true;
|
|
257
257
|
break;
|
|
258
258
|
}
|
|
@@ -265,7 +265,7 @@ var H3HexagonLayer = function (_CompositeLayer) {
|
|
|
265
265
|
|
|
266
266
|
return {
|
|
267
267
|
resolution: resolution,
|
|
268
|
-
edgeLengthKM: resolution >= 0 ? (0, _h3Js.
|
|
268
|
+
edgeLengthKM: resolution >= 0 ? (0, _h3Js.getHexagonEdgeLengthAvg)(resolution, 'km') : 0,
|
|
269
269
|
hasMultipleRes: hasMultipleRes,
|
|
270
270
|
hasPentagon: hasPentagon
|
|
271
271
|
};
|
|
@@ -300,27 +300,29 @@ var H3HexagonLayer = function (_CompositeLayer) {
|
|
|
300
300
|
return;
|
|
301
301
|
}
|
|
302
302
|
|
|
303
|
-
var hex = this.props.centerHexagon || (0, _h3Js.
|
|
303
|
+
var hex = this.props.centerHexagon || (0, _h3Js.latLngToCell)(viewport.latitude, viewport.longitude, resolution);
|
|
304
304
|
|
|
305
305
|
if (centerHex === hex) {
|
|
306
306
|
return;
|
|
307
307
|
}
|
|
308
308
|
|
|
309
309
|
if (centerHex) {
|
|
310
|
-
|
|
310
|
+
try {
|
|
311
|
+
var distance = (0, _h3Js.gridDistance)(centerHex, hex);
|
|
311
312
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
313
|
+
if (distance * edgeLengthKM < UPDATE_THRESHOLD_KM) {
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
} catch (_unused) {}
|
|
315
317
|
}
|
|
316
318
|
|
|
317
319
|
var unitsPerMeter = viewport.distanceScales.unitsPerMeter;
|
|
318
320
|
var vertices = h3ToPolygon(hex);
|
|
319
321
|
|
|
320
|
-
var
|
|
321
|
-
|
|
322
|
-
centerLat =
|
|
323
|
-
centerLng =
|
|
322
|
+
var _cellToLatLng5 = (0, _h3Js.cellToLatLng)(hex),
|
|
323
|
+
_cellToLatLng6 = (0, _slicedToArray2.default)(_cellToLatLng5, 2),
|
|
324
|
+
centerLat = _cellToLatLng6[0],
|
|
325
|
+
centerLng = _cellToLatLng6[1];
|
|
324
326
|
|
|
325
327
|
var _viewport$projectFlat = viewport.projectFlat([centerLng, centerLat]),
|
|
326
328
|
_viewport$projectFlat2 = (0, _slicedToArray2.default)(_viewport$projectFlat, 2),
|
|
@@ -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","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 cellToBoundary,\n getResolution,\n cellToLatLng,\n latLngToCell,\n isPentagon,\n gridDistance,\n getHexagonEdgeLengthAvg,\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] = cellToLatLng(hexId);\n const actualCount = vertices.length;\n\n // normalize with respect to center\n normalizeLongitudes(vertices, lng);\n\n // `cellToBoundary` 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] = cellToLatLng(hexagonId);\n return [lng, lat];\n}\n\nfunction h3ToPolygon(hexId: H3Index, coverage: number = 1): number[][] {\n const vertices = cellToBoundary(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 = 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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
-
import {
|
|
2
|
+
import { cellsToMultiPolygon } from 'h3-js';
|
|
3
3
|
import { createIterable } from '@deck.gl/core';
|
|
4
4
|
import { default as H3HexagonLayer } from './h3-hexagon-layer';
|
|
5
5
|
import GeoCellLayer from '../geo-cell-layer/GeoCellLayer';
|
|
@@ -32,7 +32,7 @@ export default class H3ClusterLayer extends GeoCellLayer {
|
|
|
32
32
|
for (const object of iterable) {
|
|
33
33
|
objectInfo.index++;
|
|
34
34
|
const hexagons = getHexagons(object, objectInfo);
|
|
35
|
-
const multiPolygon =
|
|
35
|
+
const multiPolygon = cellsToMultiPolygon(hexagons, true);
|
|
36
36
|
|
|
37
37
|
for (const polygon of multiPolygon) {
|
|
38
38
|
polygons.push(this.getSubLayerRow({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/h3-layers/h3-cluster-layer.ts"],"names":["
|
|
1
|
+
{"version":3,"sources":["../../../src/h3-layers/h3-cluster-layer.ts"],"names":["cellsToMultiPolygon","createIterable","default","H3HexagonLayer","GeoCellLayer","defaultProps","getHexagons","type","value","d","hexagons","H3ClusterLayer","initializeState","_checkH3Lib","updateState","props","changeFlags","dataChanged","updateTriggersChanged","data","polygons","iterable","objectInfo","object","index","multiPolygon","polygon","push","getSubLayerRow","setState","indexToBounds","getElevation","getFillColor","getLineColor","getLineWidth","state","getPolygon","getSubLayerAccessor"],"mappings":";AAAA,SAAQA,mBAAR,QAAgD,OAAhD;AAEA,SAA0BC,cAA1B,QAA+E,eAA/E;AACA,SAAQC,OAAO,IAAIC,cAAnB,QAAwC,oBAAxC;AACA,OAAOC,YAAP,MAA8C,gCAA9C;AAEA,MAAMC,YAA+C,GAAG;AACtDC,EAAAA,WAAW,EAAE;AAACC,IAAAA,IAAI,EAAE,UAAP;AAAmBC,IAAAA,KAAK,EAAEC,CAAC,IAAIA,CAAC,CAACC;AAAjC;AADyC,CAAxD;AAkBA,eAAe,MAAMC,cAAN,SAAsEP,YAAtE,CAGb;AAIAQ,EAAAA,eAAe,GAAS;AACtBT,IAAAA,cAAc,CAACU,WAAf;AACD;;AAEDC,EAAAA,WAAW,CAAC;AAACC,IAAAA,KAAD;AAAQC,IAAAA;AAAR,GAAD,EAAqD;AAC9D,QACEA,WAAW,CAACC,WAAZ,IACCD,WAAW,CAACE,qBAAZ,IAAqCF,WAAW,CAACE,qBAAZ,CAAkCZ,WAF1E,EAGE;AACA,YAAM;AAACa,QAAAA,IAAD;AAAOb,QAAAA;AAAP,UAAsBS,KAA5B;AACA,YAAMK,QAAmC,GAAG,EAA5C;AAEA,YAAM;AAACC,QAAAA,QAAD;AAAWC,QAAAA;AAAX,UAAyBrB,cAAc,CAACkB,IAAD,CAA7C;;AACA,WAAK,MAAMI,MAAX,IAAqBF,QAArB,EAA+B;AAC7BC,QAAAA,UAAU,CAACE,KAAX;AACA,cAAMd,QAAQ,GAAGJ,WAAW,CAACiB,MAAD,EAASD,UAAT,CAA5B;AACA,cAAMG,YAAY,GAAGzB,mBAAmB,CAACU,QAAD,EAAW,IAAX,CAAxC;;AAEA,aAAK,MAAMgB,OAAX,IAAsBD,YAAtB,EAAoC;AAClCL,UAAAA,QAAQ,CAACO,IAAT,CAAc,KAAKC,cAAL,CAAoB;AAACF,YAAAA;AAAD,WAApB,EAA+BH,MAA/B,EAAuCD,UAAU,CAACE,KAAlD,CAAd;AACD;AACF;;AAED,WAAKK,QAAL,CAAc;AAACT,QAAAA;AAAD,OAAd;AACD;AACF;;AAEDU,EAAAA,aAAa,GAAmC;AAC9C,UAAM;AAACC,MAAAA,YAAD;AAAeC,MAAAA,YAAf;AAA6BC,MAAAA,YAA7B;AAA2CC,MAAAA;AAA3C,QAA2D,KAAKnB,KAAtE;AAEA,WAAO;AACLI,MAAAA,IAAI,EAAE,KAAKgB,KAAL,CAAWf,QADZ;AAELgB,MAAAA,UAAU,EAAE3B,CAAC,IAAIA,CAAC,CAACiB,OAFd;AAILK,MAAAA,YAAY,EAAE,KAAKM,mBAAL,CAAyBN,YAAzB,CAJT;AAKLC,MAAAA,YAAY,EAAE,KAAKK,mBAAL,CAAyBL,YAAzB,CALT;AAMLC,MAAAA,YAAY,EAAE,KAAKI,mBAAL,CAAyBJ,YAAzB,CANT;AAOLC,MAAAA,YAAY,EAAE,KAAKG,mBAAL,CAAyBH,YAAzB;AAPT,KAAP;AASD;;AA3CD;;gBAHmBvB,c,eAIA,gB;;gBAJAA,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';\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 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,5 +1,5 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
-
import {
|
|
2
|
+
import { cellToBoundary, getResolution, cellToLatLng, latLngToCell, isPentagon, gridDistance, getHexagonEdgeLengthAvg } from 'h3-js';
|
|
3
3
|
import { lerp } from '@math.gl/core';
|
|
4
4
|
import { CompositeLayer, createIterable } from '@deck.gl/core';
|
|
5
5
|
import { ColumnLayer, PolygonLayer } from '@deck.gl/layers';
|
|
@@ -18,7 +18,7 @@ export function normalizeLongitudes(vertices, refLng) {
|
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
export function scalePolygon(hexId, vertices, factor) {
|
|
21
|
-
const [lat, lng] =
|
|
21
|
+
const [lat, lng] = cellToLatLng(hexId);
|
|
22
22
|
const actualCount = vertices.length;
|
|
23
23
|
normalizeLongitudes(vertices, lng);
|
|
24
24
|
const vertexCount = vertices[0] === vertices[actualCount - 1] ? actualCount - 1 : actualCount;
|
|
@@ -31,12 +31,12 @@ export function scalePolygon(hexId, vertices, factor) {
|
|
|
31
31
|
|
|
32
32
|
function getHexagonCentroid(getHexagon, object, objectInfo) {
|
|
33
33
|
const hexagonId = getHexagon(object, objectInfo);
|
|
34
|
-
const [lat, lng] =
|
|
34
|
+
const [lat, lng] = cellToLatLng(hexagonId);
|
|
35
35
|
return [lng, lat];
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
function h3ToPolygon(hexId, coverage = 1) {
|
|
39
|
-
const vertices =
|
|
39
|
+
const vertices = cellToBoundary(hexId, true);
|
|
40
40
|
|
|
41
41
|
if (coverage !== 1) {
|
|
42
42
|
scalePolygon(hexId, vertices, coverage);
|
|
@@ -140,7 +140,7 @@ export default class H3HexagonLayer extends CompositeLayer {
|
|
|
140
140
|
for (const object of iterable) {
|
|
141
141
|
objectInfo.index++;
|
|
142
142
|
const hexId = this.props.getHexagon(object, objectInfo);
|
|
143
|
-
const hexResolution =
|
|
143
|
+
const hexResolution = getResolution(hexId);
|
|
144
144
|
|
|
145
145
|
if (resolution < 0) {
|
|
146
146
|
resolution = hexResolution;
|
|
@@ -150,7 +150,7 @@ export default class H3HexagonLayer extends CompositeLayer {
|
|
|
150
150
|
break;
|
|
151
151
|
}
|
|
152
152
|
|
|
153
|
-
if (
|
|
153
|
+
if (isPentagon(hexId)) {
|
|
154
154
|
hasPentagon = true;
|
|
155
155
|
break;
|
|
156
156
|
}
|
|
@@ -158,7 +158,7 @@ export default class H3HexagonLayer extends CompositeLayer {
|
|
|
158
158
|
|
|
159
159
|
return {
|
|
160
160
|
resolution,
|
|
161
|
-
edgeLengthKM: resolution >= 0 ?
|
|
161
|
+
edgeLengthKM: resolution >= 0 ? getHexagonEdgeLengthAvg(resolution, 'km') : 0,
|
|
162
162
|
hasMultipleRes,
|
|
163
163
|
hasPentagon
|
|
164
164
|
};
|
|
@@ -195,25 +195,27 @@ export default class H3HexagonLayer extends CompositeLayer {
|
|
|
195
195
|
return;
|
|
196
196
|
}
|
|
197
197
|
|
|
198
|
-
const hex = this.props.centerHexagon ||
|
|
198
|
+
const hex = this.props.centerHexagon || latLngToCell(viewport.latitude, viewport.longitude, resolution);
|
|
199
199
|
|
|
200
200
|
if (centerHex === hex) {
|
|
201
201
|
return;
|
|
202
202
|
}
|
|
203
203
|
|
|
204
204
|
if (centerHex) {
|
|
205
|
-
|
|
205
|
+
try {
|
|
206
|
+
const distance = gridDistance(centerHex, hex);
|
|
206
207
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
208
|
+
if (distance * edgeLengthKM < UPDATE_THRESHOLD_KM) {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
} catch {}
|
|
210
212
|
}
|
|
211
213
|
|
|
212
214
|
const {
|
|
213
215
|
unitsPerMeter
|
|
214
216
|
} = viewport.distanceScales;
|
|
215
217
|
let vertices = h3ToPolygon(hex);
|
|
216
|
-
const [centerLat, centerLng] =
|
|
218
|
+
const [centerLat, centerLng] = cellToLatLng(hex);
|
|
217
219
|
const [centerX, centerY] = viewport.projectFlat([centerLng, centerLat]);
|
|
218
220
|
vertices = vertices.map(p => {
|
|
219
221
|
const worldPosition = viewport.projectFlat(p);
|