@deck.gl/geo-layers 9.4.0-alpha.2 → 9.4.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.dev.js +6375 -5029
- package/dist/geo-cell-layer/GeoCellLayer.d.ts.map +1 -1
- package/dist/geo-cell-layer/GeoCellLayer.js +2 -1
- package/dist/geo-cell-layer/GeoCellLayer.js.map +1 -1
- package/dist/index.cjs +21181 -1889
- package/dist/index.cjs.map +3 -4
- package/dist/mesh-layer/mesh-layer-uniforms.d.ts +1 -0
- package/dist/mesh-layer/mesh-layer-uniforms.d.ts.map +1 -1
- package/dist/mesh-layer/mesh-layer-uniforms.js +8 -0
- package/dist/mesh-layer/mesh-layer-uniforms.js.map +1 -1
- package/dist/mesh-layer/mesh-layer.d.ts.map +1 -1
- package/dist/mesh-layer/mesh-layer.js +15 -6
- package/dist/mesh-layer/mesh-layer.js.map +1 -1
- package/dist/mesh-layer/mesh-layer.wgsl.d.ts +3 -0
- package/dist/mesh-layer/mesh-layer.wgsl.d.ts.map +1 -0
- package/dist/mesh-layer/mesh-layer.wgsl.js +130 -0
- package/dist/mesh-layer/mesh-layer.wgsl.js.map +1 -0
- package/dist/mesh-layer/mesh-pbr-material.d.ts +252 -0
- package/dist/mesh-layer/mesh-pbr-material.d.ts.map +1 -0
- package/dist/mesh-layer/mesh-pbr-material.js +27 -0
- package/dist/mesh-layer/mesh-pbr-material.js.map +1 -0
- package/dist/trips-layer/trips-layer-uniforms.d.ts +1 -0
- package/dist/trips-layer/trips-layer-uniforms.d.ts.map +1 -1
- package/dist/trips-layer/trips-layer-uniforms.js +14 -3
- package/dist/trips-layer/trips-layer-uniforms.js.map +1 -1
- package/dist/trips-layer/trips-layer.d.ts +6 -1
- package/dist/trips-layer/trips-layer.d.ts.map +1 -1
- package/dist/trips-layer/trips-layer.js +57 -24
- package/dist/trips-layer/trips-layer.js.map +1 -1
- package/dist/trips-layer/trips-layer.wgsl.d.ts +11 -0
- package/dist/trips-layer/trips-layer.wgsl.d.ts.map +1 -0
- package/dist/trips-layer/trips-layer.wgsl.js +48 -0
- package/dist/trips-layer/trips-layer.wgsl.js.map +1 -0
- package/dist.min.js +1415 -149
- package/dist.webgl-only/a5-layer/a5-layer.js +30 -0
- package/dist.webgl-only/a5-layer/a5-layer.js.map +1 -0
- package/dist.webgl-only/geo-cell-layer/GeoCellLayer.js +57 -0
- package/dist.webgl-only/geo-cell-layer/GeoCellLayer.js.map +1 -0
- package/dist.webgl-only/geohash-layer/geohash-layer.js +24 -0
- package/dist.webgl-only/geohash-layer/geohash-layer.js.map +1 -0
- package/dist.webgl-only/geohash-layer/geohash-utils.js +54 -0
- package/dist.webgl-only/geohash-layer/geohash-utils.js.map +1 -0
- package/dist.webgl-only/great-circle-layer/great-circle-layer.js +17 -0
- package/dist.webgl-only/great-circle-layer/great-circle-layer.js.map +1 -0
- package/dist.webgl-only/h3-layers/h3-cluster-layer.js +52 -0
- package/dist.webgl-only/h3-layers/h3-cluster-layer.js.map +1 -0
- package/dist.webgl-only/h3-layers/h3-hexagon-layer.js +209 -0
- package/dist.webgl-only/h3-layers/h3-hexagon-layer.js.map +1 -0
- package/dist.webgl-only/h3-layers/h3-utils.js +60 -0
- package/dist.webgl-only/h3-layers/h3-utils.js.map +1 -0
- package/dist.webgl-only/index.cjs +22542 -0
- package/dist.webgl-only/index.cjs.map +6 -0
- package/dist.webgl-only/index.js +22 -0
- package/dist.webgl-only/index.js.map +1 -0
- package/dist.webgl-only/mesh-layer/mesh-layer-fragment.glsl.js +34 -0
- package/dist.webgl-only/mesh-layer/mesh-layer-fragment.glsl.js.map +1 -0
- package/dist.webgl-only/mesh-layer/mesh-layer-uniforms.js +19 -0
- package/dist.webgl-only/mesh-layer/mesh-layer-uniforms.js.map +1 -0
- package/dist.webgl-only/mesh-layer/mesh-layer-vertex.glsl.js +64 -0
- package/dist.webgl-only/mesh-layer/mesh-layer-vertex.glsl.js.map +1 -0
- package/dist.webgl-only/mesh-layer/mesh-layer.js +149 -0
- package/dist.webgl-only/mesh-layer/mesh-layer.js.map +1 -0
- package/dist.webgl-only/mesh-layer/mesh-layer.wgsl.js +5 -0
- package/dist.webgl-only/mesh-layer/mesh-layer.wgsl.js.map +1 -0
- package/dist.webgl-only/mesh-layer/mesh-pbr-material.js +27 -0
- package/dist.webgl-only/mesh-layer/mesh-pbr-material.js.map +1 -0
- package/dist.webgl-only/mvt-layer/coordinate-transform.js +45 -0
- package/dist.webgl-only/mvt-layer/coordinate-transform.js.map +1 -0
- package/dist.webgl-only/mvt-layer/find-index-binary.js +100 -0
- package/dist.webgl-only/mvt-layer/find-index-binary.js.map +1 -0
- package/dist.webgl-only/mvt-layer/mvt-layer.js +315 -0
- package/dist.webgl-only/mvt-layer/mvt-layer.js.map +1 -0
- package/dist.webgl-only/quadkey-layer/quadkey-layer.js +27 -0
- package/dist.webgl-only/quadkey-layer/quadkey-layer.js.map +1 -0
- package/dist.webgl-only/quadkey-layer/quadkey-utils.js +30 -0
- package/dist.webgl-only/quadkey-layer/quadkey-utils.js.map +1 -0
- package/dist.webgl-only/s2-layer/s2-geometry.js +127 -0
- package/dist.webgl-only/s2-layer/s2-geometry.js.map +1 -0
- package/dist.webgl-only/s2-layer/s2-layer.js +24 -0
- package/dist.webgl-only/s2-layer/s2-layer.js.map +1 -0
- package/dist.webgl-only/s2-layer/s2-utils.js +91 -0
- package/dist.webgl-only/s2-layer/s2-utils.js.map +1 -0
- package/dist.webgl-only/terrain-layer/terrain-layer.js +260 -0
- package/dist.webgl-only/terrain-layer/terrain-layer.js.map +1 -0
- package/dist.webgl-only/tile-3d-layer/tile-3d-layer.js +343 -0
- package/dist.webgl-only/tile-3d-layer/tile-3d-layer.js.map +1 -0
- package/dist.webgl-only/tile-layer/tile-layer.js +233 -0
- package/dist.webgl-only/tile-layer/tile-layer.js.map +1 -0
- package/dist.webgl-only/tileset-2d/index.js +7 -0
- package/dist.webgl-only/tileset-2d/index.js.map +1 -0
- package/dist.webgl-only/tileset-2d/memoize.js +45 -0
- package/dist.webgl-only/tileset-2d/memoize.js.map +1 -0
- package/dist.webgl-only/tileset-2d/tile-2d-header.js +141 -0
- package/dist.webgl-only/tileset-2d/tile-2d-header.js.map +1 -0
- package/dist.webgl-only/tileset-2d/tile-2d-traversal.js +208 -0
- package/dist.webgl-only/tileset-2d/tile-2d-traversal.js.map +1 -0
- package/dist.webgl-only/tileset-2d/tileset-2d.js +557 -0
- package/dist.webgl-only/tileset-2d/tileset-2d.js.map +1 -0
- package/dist.webgl-only/tileset-2d/types.js +5 -0
- package/dist.webgl-only/tileset-2d/types.js.map +1 -0
- package/dist.webgl-only/tileset-2d/utils.js +246 -0
- package/dist.webgl-only/tileset-2d/utils.js.map +1 -0
- package/dist.webgl-only/trips-layer/trips-layer-uniforms.js +23 -0
- package/dist.webgl-only/trips-layer/trips-layer-uniforms.js.map +1 -0
- package/dist.webgl-only/trips-layer/trips-layer.js +97 -0
- package/dist.webgl-only/trips-layer/trips-layer.js.map +1 -0
- package/dist.webgl-only/trips-layer/trips-layer.wgsl.js +3 -0
- package/dist.webgl-only/trips-layer/trips-layer.wgsl.js.map +1 -0
- package/dist.webgl-only/wms-layer/utils.js +17 -0
- package/dist.webgl-only/wms-layer/utils.js.map +1 -0
- package/dist.webgl-only/wms-layer/wms-layer.js +198 -0
- package/dist.webgl-only/wms-layer/wms-layer.js.map +1 -0
- package/package.json +11 -6
- package/src/geo-cell-layer/GeoCellLayer.ts +2 -0
- package/src/mesh-layer/mesh-layer-uniforms.ts +9 -0
- package/src/mesh-layer/mesh-layer.ts +15 -6
- package/src/mesh-layer/mesh-layer.wgsl.ts +130 -0
- package/src/mesh-layer/mesh-pbr-material.ts +39 -0
- package/src/trips-layer/trips-layer-uniforms.ts +15 -3
- package/src/trips-layer/trips-layer.ts +84 -38
- package/src/trips-layer/trips-layer.wgsl.ts +63 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// deck.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
import GeoCellLayer from "../geo-cell-layer/GeoCellLayer.js";
|
|
5
|
+
import { cellToBoundary, hexToU64 } from 'a5-js';
|
|
6
|
+
import { flattenPolygon } from "../h3-layers/h3-utils.js";
|
|
7
|
+
const defaultProps = {
|
|
8
|
+
getPentagon: { type: 'accessor', value: (d) => d.pentagon }
|
|
9
|
+
};
|
|
10
|
+
/** Render filled and/or stroked polygons based on the [A5](https://a5geo.org) geospatial indexing system. */
|
|
11
|
+
class A5Layer extends GeoCellLayer {
|
|
12
|
+
indexToBounds() {
|
|
13
|
+
const { data, getPentagon } = this.props;
|
|
14
|
+
return {
|
|
15
|
+
data,
|
|
16
|
+
_normalize: false,
|
|
17
|
+
_windingOrder: 'CCW',
|
|
18
|
+
positionFormat: 'XY',
|
|
19
|
+
getPolygon: (x, objectInfo) => {
|
|
20
|
+
const pentagon = getPentagon(x, objectInfo);
|
|
21
|
+
const boundary = cellToBoundary(typeof pentagon === 'string' ? hexToU64(pentagon) : pentagon, { closedRing: true, segments: 'auto' });
|
|
22
|
+
return flattenPolygon(boundary);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
A5Layer.layerName = 'A5Layer';
|
|
28
|
+
A5Layer.defaultProps = defaultProps;
|
|
29
|
+
export default A5Layer;
|
|
30
|
+
//# sourceMappingURL=a5-layer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a5-layer.js","sourceRoot":"","sources":["../../src/a5-layer/a5-layer.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,YAAiC,0CAAuC;AAC/E,OAAO,EAAC,cAAc,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAC,cAAc,EAAC,iCAA8B;AAErD,MAAM,YAAY,GAA+B;IAC/C,WAAW,EAAE,EAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAC;CAC/D,CAAC;AAeF,6GAA6G;AAC7G,MAAqB,OAAiD,SAAQ,YAG7E;IAIC,aAAa;QACX,MAAM,EAAC,IAAI,EAAE,WAAW,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAEvC,OAAO;YACL,IAAI;YACJ,UAAU,EAAE,KAAK;YACjB,aAAa,EAAE,KAAK;YACpB,cAAc,EAAE,IAAI;YACpB,UAAU,EAAE,CAAC,CAAQ,EAAE,UAAU,EAAE,EAAE;gBACnC,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBAC5C,MAAM,QAAQ,GAAG,cAAc,CAC7B,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAC5D,EAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAC,CACrC,CAAC;gBACF,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC;SACF,CAAC;IACJ,CAAC;;AApBM,iBAAS,GAAG,SAAS,CAAC;AACtB,oBAAY,GAAG,YAAY,CAAC;eALhB,OAAO"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// deck.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
import { CompositeLayer } from '@deck.gl/core';
|
|
5
|
+
import { PolygonLayer } from '@deck.gl/layers';
|
|
6
|
+
const defaultProps = {
|
|
7
|
+
...PolygonLayer.defaultProps
|
|
8
|
+
};
|
|
9
|
+
class GeoCellLayer extends CompositeLayer {
|
|
10
|
+
/** Implement to generate props to create geometry. */
|
|
11
|
+
indexToBounds() {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
renderLayers() {
|
|
15
|
+
// Rendering props underlying layer
|
|
16
|
+
const { elevationScale, extruded, wireframe, filled, stroked, lineWidthUnits, lineWidthScale, lineWidthMinPixels, lineWidthMaxPixels, lineAntialiasing, lineJointRounded, lineMiterLimit, lineDashJustified, getElevation, getFillColor, getLineColor, getLineWidth } = this.props;
|
|
17
|
+
// Accessor props for underlying layers
|
|
18
|
+
const { updateTriggers, material, transitions } = this.props;
|
|
19
|
+
// Filled Polygon Layer
|
|
20
|
+
const CellLayer = this.getSubLayerClass('cell', PolygonLayer);
|
|
21
|
+
const { updateTriggers: boundsUpdateTriggers, ...boundsProps } = this.indexToBounds() || {};
|
|
22
|
+
return new CellLayer({
|
|
23
|
+
filled,
|
|
24
|
+
wireframe,
|
|
25
|
+
extruded,
|
|
26
|
+
elevationScale,
|
|
27
|
+
stroked,
|
|
28
|
+
lineWidthUnits,
|
|
29
|
+
lineWidthScale,
|
|
30
|
+
lineWidthMinPixels,
|
|
31
|
+
lineWidthMaxPixels,
|
|
32
|
+
lineAntialiasing,
|
|
33
|
+
lineJointRounded,
|
|
34
|
+
lineMiterLimit,
|
|
35
|
+
lineDashJustified,
|
|
36
|
+
material,
|
|
37
|
+
transitions,
|
|
38
|
+
getElevation,
|
|
39
|
+
getFillColor,
|
|
40
|
+
getLineColor,
|
|
41
|
+
getLineWidth
|
|
42
|
+
}, this.getSubLayerProps({
|
|
43
|
+
id: 'cell',
|
|
44
|
+
updateTriggers: updateTriggers && {
|
|
45
|
+
...boundsUpdateTriggers,
|
|
46
|
+
getElevation: updateTriggers.getElevation,
|
|
47
|
+
getFillColor: updateTriggers.getFillColor,
|
|
48
|
+
getLineColor: updateTriggers.getLineColor,
|
|
49
|
+
getLineWidth: updateTriggers.getLineWidth
|
|
50
|
+
}
|
|
51
|
+
}), boundsProps);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
GeoCellLayer.layerName = 'GeoCellLayer';
|
|
55
|
+
GeoCellLayer.defaultProps = defaultProps;
|
|
56
|
+
export default GeoCellLayer;
|
|
57
|
+
//# sourceMappingURL=GeoCellLayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeoCellLayer.js","sourceRoot":"","sources":["../../src/geo-cell-layer/GeoCellLayer.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,cAAc,EAAkC,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAC,YAAY,EAAoB,MAAM,iBAAiB,CAAC;AAEhE,MAAM,YAAY,GAAoC;IACpD,GAAG,YAAY,CAAC,YAAY;CAC7B,CAAC;AAKF,MAAqB,YAAsD,SAAQ,cAElF;IAIC,sDAAsD;IACtD,aAAa;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY;QACV,mCAAmC;QACnC,MAAM,EACJ,cAAc,EACd,QAAQ,EACR,SAAS,EACT,MAAM,EACN,OAAO,EACP,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACb,GAAG,IAAI,CAAC,KAAK,CAAC;QAEf,uCAAuC;QACvC,MAAM,EAAC,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAE3D,uBAAuB;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAC9D,MAAM,EAAC,cAAc,EAAE,oBAAoB,EAAE,GAAG,WAAW,EAAC,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;QAC1F,OAAO,IAAI,SAAS,CAClB;YACE,MAAM;YACN,SAAS;YAET,QAAQ;YACR,cAAc;YAEd,OAAO;YACP,cAAc;YACd,cAAc;YACd,kBAAkB;YAClB,kBAAkB;YAClB,gBAAgB;YAChB,gBAAgB;YAChB,cAAc;YACd,iBAAiB;YAEjB,QAAQ;YACR,WAAW;YAEX,YAAY;YACZ,YAAY;YACZ,YAAY;YACZ,YAAY;SACb,EACD,IAAI,CAAC,gBAAgB,CAAC;YACpB,EAAE,EAAE,MAAM;YACV,cAAc,EAAE,cAAc,IAAI;gBAChC,GAAG,oBAAoB;gBACvB,YAAY,EAAE,cAAc,CAAC,YAAY;gBACzC,YAAY,EAAE,cAAc,CAAC,YAAY;gBACzC,YAAY,EAAE,cAAc,CAAC,YAAY;gBACzC,YAAY,EAAE,cAAc,CAAC,YAAY;aAC1C;SACF,CAAC,EACF,WAAW,CACZ,CAAC;IACJ,CAAC;;AA1EM,sBAAS,GAAG,cAAc,CAAC;AAC3B,yBAAY,GAAiB,YAAY,CAAC;eAJ9B,YAAY"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// deck.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
import GeoCellLayer from "../geo-cell-layer/GeoCellLayer.js";
|
|
5
|
+
import { getGeohashPolygon } from "./geohash-utils.js";
|
|
6
|
+
const defaultProps = {
|
|
7
|
+
getGeohash: { type: 'accessor', value: (d) => d.geohash }
|
|
8
|
+
};
|
|
9
|
+
/** Render filled and/or stroked polygons based on the [Geohash](https://en.wikipedia.org/wiki/Geohash) geospatial indexing system. */
|
|
10
|
+
class GeohashLayer extends GeoCellLayer {
|
|
11
|
+
indexToBounds() {
|
|
12
|
+
const { data, getGeohash } = this.props;
|
|
13
|
+
return {
|
|
14
|
+
data,
|
|
15
|
+
_normalize: false,
|
|
16
|
+
positionFormat: 'XY',
|
|
17
|
+
getPolygon: (x, objectInfo) => getGeohashPolygon(getGeohash(x, objectInfo))
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
GeohashLayer.layerName = 'GeohashLayer';
|
|
22
|
+
GeohashLayer.defaultProps = defaultProps;
|
|
23
|
+
export default GeohashLayer;
|
|
24
|
+
//# sourceMappingURL=geohash-layer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geohash-layer.js","sourceRoot":"","sources":["../../src/geohash-layer/geohash-layer.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,YAAiC,0CAAuC;AAC/E,OAAO,EAAC,iBAAiB,EAAC,2BAAwB;AAElD,MAAM,YAAY,GAAoC;IACpD,UAAU,EAAE,EAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAC;CAC7D,CAAC;AAgBF,sIAAsI;AACtI,MAAqB,YAAsD,SAAQ,YAGlF;IAIC,aAAa;QACX,MAAM,EAAC,IAAI,EAAE,UAAU,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAEtC,OAAO;YACL,IAAI;YACJ,UAAU,EAAE,KAAK;YACjB,cAAc,EAAE,IAAI;YACpB,UAAU,EAAE,CAAC,CAAQ,EAAE,UAAU,EAAE,EAAE,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;SACnF,CAAC;IACJ,CAAC;;AAZM,sBAAS,GAAG,cAAc,CAAC;AAC3B,yBAAY,GAAG,YAAY,CAAC;eALhB,YAAY"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// deck.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
const BASE32_CODES = '0123456789bcdefghjkmnpqrstuvwxyz';
|
|
5
|
+
const BASE32_CODES_DICT = {};
|
|
6
|
+
for (let i = 0; i < BASE32_CODES.length; i++) {
|
|
7
|
+
BASE32_CODES_DICT[BASE32_CODES.charAt(i)] = i;
|
|
8
|
+
}
|
|
9
|
+
const MIN_LAT = -90;
|
|
10
|
+
const MAX_LAT = 90;
|
|
11
|
+
const MIN_LON = -180;
|
|
12
|
+
const MAX_LON = 180;
|
|
13
|
+
// Adapted from ngeohash decode_bbox
|
|
14
|
+
export function getGeohashBounds(geohash) {
|
|
15
|
+
let isLon = true;
|
|
16
|
+
let maxLat = MAX_LAT;
|
|
17
|
+
let minLat = MIN_LAT;
|
|
18
|
+
let maxLon = MAX_LON;
|
|
19
|
+
let minLon = MIN_LON;
|
|
20
|
+
let mid;
|
|
21
|
+
let hashValue = 0;
|
|
22
|
+
for (let i = 0, l = geohash.length; i < l; i++) {
|
|
23
|
+
const code = geohash[i].toLowerCase();
|
|
24
|
+
hashValue = BASE32_CODES_DICT[code];
|
|
25
|
+
for (let bits = 4; bits >= 0; bits--) {
|
|
26
|
+
const bit = (hashValue >> bits) & 1;
|
|
27
|
+
if (isLon) {
|
|
28
|
+
mid = (maxLon + minLon) / 2;
|
|
29
|
+
if (bit === 1) {
|
|
30
|
+
minLon = mid;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
maxLon = mid;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
mid = (maxLat + minLat) / 2;
|
|
38
|
+
if (bit === 1) {
|
|
39
|
+
minLat = mid;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
maxLat = mid;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
isLon = !isLon;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return [minLat, minLon, maxLat, maxLon];
|
|
49
|
+
}
|
|
50
|
+
export function getGeohashPolygon(geohash) {
|
|
51
|
+
const [s, w, n, e] = getGeohashBounds(geohash);
|
|
52
|
+
return [e, n, e, s, w, s, w, n, e, n];
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=geohash-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geohash-utils.js","sourceRoot":"","sources":["../../src/geohash-layer/geohash-utils.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,MAAM,YAAY,GAAG,kCAAkC,CAAC;AACxD,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;IAC7C,iBAAiB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,EAAE,CAAC;AACpB,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC;AACrB,MAAM,OAAO,GAAG,GAAG,CAAC;AAEpB,oCAAoC;AACpC,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,IAAI,MAAM,GAAG,OAAO,CAAC;IACrB,IAAI,MAAM,GAAG,OAAO,CAAC;IACrB,IAAI,MAAM,GAAG,OAAO,CAAC;IACrB,IAAI,MAAM,GAAG,OAAO,CAAC;IACrB,IAAI,GAAW,CAAC;IAEhB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACtC,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAEpC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,KAAK,EAAE,CAAC;gBACV,GAAG,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC5B,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;oBACd,MAAM,GAAG,GAAG,CAAC;gBACf,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,GAAG,CAAC;gBACf,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,GAAG,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC5B,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;oBACd,MAAM,GAAG,GAAG,CAAC;gBACf,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,GAAG,CAAC;gBACf,CAAC;YACH,CAAC;YACD,KAAK,GAAG,CAAC,KAAK,CAAC;QACjB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAE/C,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// deck.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
import { ArcLayer } from '@deck.gl/layers';
|
|
5
|
+
const defaultProps = {
|
|
6
|
+
getHeight: { type: 'accessor', value: 0 },
|
|
7
|
+
greatCircle: true
|
|
8
|
+
};
|
|
9
|
+
// This layer has been merged into the core ArcLayer
|
|
10
|
+
// Keeping for backward-compatibility
|
|
11
|
+
/** @deprecated Use ArcLayer with `greatCircle: true` instead */
|
|
12
|
+
class GreatCircleLayer extends ArcLayer {
|
|
13
|
+
}
|
|
14
|
+
GreatCircleLayer.layerName = 'GreatCircleLayer';
|
|
15
|
+
GreatCircleLayer.defaultProps = defaultProps;
|
|
16
|
+
export default GreatCircleLayer;
|
|
17
|
+
//# sourceMappingURL=great-circle-layer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"great-circle-layer.js","sourceRoot":"","sources":["../../src/great-circle-layer/great-circle-layer.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,QAAQ,EAAgB,MAAM,iBAAiB,CAAC;AAExD,MAAM,YAAY,GAAgC;IAChD,SAAS,EAAE,EAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAC;IACvC,WAAW,EAAE,IAAI;CAClB,CAAC;AAKF,oDAAoD;AACpD,qCAAqC;AACrC,gEAAgE;AAChE,MAAqB,gBAA0D,SAAQ,QAGtF;;AACQ,0BAAS,GAAG,kBAAkB,CAAC;AAC/B,6BAAY,GAAG,YAAY,CAAC;eALhB,gBAAgB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// deck.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
import { cellsToMultiPolygon } from 'h3-js';
|
|
5
|
+
import { createIterable } from '@deck.gl/core';
|
|
6
|
+
import { default as H3HexagonLayer } from "./h3-hexagon-layer.js";
|
|
7
|
+
import GeoCellLayer from "../geo-cell-layer/GeoCellLayer.js";
|
|
8
|
+
import { normalizeLongitudes } from "./h3-utils.js";
|
|
9
|
+
const defaultProps = {
|
|
10
|
+
getHexagons: { type: 'accessor', value: (d) => d.hexagons }
|
|
11
|
+
};
|
|
12
|
+
class H3ClusterLayer extends GeoCellLayer {
|
|
13
|
+
initializeState() {
|
|
14
|
+
H3HexagonLayer._checkH3Lib();
|
|
15
|
+
}
|
|
16
|
+
updateState({ props, changeFlags }) {
|
|
17
|
+
if (changeFlags.dataChanged ||
|
|
18
|
+
(changeFlags.updateTriggersChanged && changeFlags.updateTriggersChanged.getHexagons)) {
|
|
19
|
+
const { data, getHexagons } = props;
|
|
20
|
+
const polygons = [];
|
|
21
|
+
const { iterable, objectInfo } = createIterable(data);
|
|
22
|
+
for (const object of iterable) {
|
|
23
|
+
objectInfo.index++;
|
|
24
|
+
const hexagons = getHexagons(object, objectInfo);
|
|
25
|
+
const multiPolygon = cellsToMultiPolygon(hexagons, true);
|
|
26
|
+
for (const polygon of multiPolygon) {
|
|
27
|
+
// Normalize polygons to prevent wrapping over the anti-meridian
|
|
28
|
+
for (const ring of polygon) {
|
|
29
|
+
normalizeLongitudes(ring);
|
|
30
|
+
}
|
|
31
|
+
polygons.push(this.getSubLayerRow({ polygon }, object, objectInfo.index));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
this.setState({ polygons });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
indexToBounds() {
|
|
38
|
+
const { getElevation, getFillColor, getLineColor, getLineWidth } = this.props;
|
|
39
|
+
return {
|
|
40
|
+
data: this.state.polygons,
|
|
41
|
+
getPolygon: d => d.polygon,
|
|
42
|
+
getElevation: this.getSubLayerAccessor(getElevation),
|
|
43
|
+
getFillColor: this.getSubLayerAccessor(getFillColor),
|
|
44
|
+
getLineColor: this.getSubLayerAccessor(getLineColor),
|
|
45
|
+
getLineWidth: this.getSubLayerAccessor(getLineWidth)
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
H3ClusterLayer.layerName = 'H3ClusterLayer';
|
|
50
|
+
H3ClusterLayer.defaultProps = defaultProps;
|
|
51
|
+
export default H3ClusterLayer;
|
|
52
|
+
//# sourceMappingURL=h3-cluster-layer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"h3-cluster-layer.js","sourceRoot":"","sources":["../../src/h3-layers/h3-cluster-layer.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,mBAAmB,EAAe,MAAM,OAAO,CAAC;AAExD,OAAO,EAAmB,cAAc,EAAiC,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAC,OAAO,IAAI,cAAc,EAAC,8BAA2B;AAC7D,OAAO,YAAiC,0CAAuC;AAC/E,OAAO,EAAC,mBAAmB,EAAC,sBAAmB;AAE/C,MAAM,YAAY,GAAsC;IACtD,WAAW,EAAE,EAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAC;CAC/D,CAAC;AAgBF,MAAqB,cAAwD,SAAQ,YAGpF;IAQC,eAAe;QACb,cAAc,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC;IAED,WAAW,CAAC,EAAC,KAAK,EAAE,WAAW,EAAyB;QACtD,IACE,WAAW,CAAC,WAAW;YACvB,CAAC,WAAW,CAAC,qBAAqB,IAAI,WAAW,CAAC,qBAAqB,CAAC,WAAW,CAAC,EACpF,CAAC;YACD,MAAM,EAAC,IAAI,EAAE,WAAW,EAAC,GAAG,KAAK,CAAC;YAClC,MAAM,QAAQ,GAA8B,EAAE,CAAC;YAE/C,MAAM,EAAC,QAAQ,EAAE,UAAU,EAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YACpD,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;gBAC9B,UAAU,CAAC,KAAK,EAAE,CAAC;gBACnB,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;gBACjD,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAEzD,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;oBACnC,gEAAgE;oBAChE,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;wBAC3B,mBAAmB,CAAC,IAAI,CAAC,CAAC;oBAC5B,CAAC;oBACD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,EAAC,OAAO,EAAC,EAAE,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC1E,CAAC;YACH,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,EAAC,QAAQ,EAAC,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,aAAa;QACX,MAAM,EAAC,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAE5E,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;YACzB,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO;YAE1B,YAAY,EAAE,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;YACpD,YAAY,EAAE,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;YACpD,YAAY,EAAE,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;YACpD,YAAY,EAAE,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;SACrD,CAAC;IACJ,CAAC;;AAlDM,wBAAS,GAAG,gBAAgB,CAAC;AAC7B,2BAAY,GAAG,YAAY,CAAC;eALhB,cAAc"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
// deck.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
import { getResolution, cellToLatLng, latLngToCell, isPentagon, gridDistance, getHexagonEdgeLengthAvg } from 'h3-js';
|
|
5
|
+
import { CompositeLayer, createIterable } from '@deck.gl/core';
|
|
6
|
+
import { ColumnLayer, PolygonLayer } from '@deck.gl/layers';
|
|
7
|
+
import { flattenPolygon, getHexagonCentroid, h3ToPolygon } from "./h3-utils.js";
|
|
8
|
+
// There is a cost to updating the instanced geometries when using highPrecision: false
|
|
9
|
+
// This constant defines the distance between two hexagons that leads to "significant
|
|
10
|
+
// distortion." Smaller value makes the column layer more sensitive to viewport change.
|
|
11
|
+
const UPDATE_THRESHOLD_KM = 10;
|
|
12
|
+
function mergeTriggers(getHexagon, coverage) {
|
|
13
|
+
let trigger;
|
|
14
|
+
if (getHexagon === undefined || getHexagon === null) {
|
|
15
|
+
trigger = coverage;
|
|
16
|
+
}
|
|
17
|
+
else if (typeof getHexagon === 'object') {
|
|
18
|
+
trigger = { ...getHexagon, coverage };
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
trigger = { getHexagon, coverage };
|
|
22
|
+
}
|
|
23
|
+
return trigger;
|
|
24
|
+
}
|
|
25
|
+
const defaultProps = {
|
|
26
|
+
...PolygonLayer.defaultProps,
|
|
27
|
+
highPrecision: 'auto',
|
|
28
|
+
coverage: { type: 'number', min: 0, max: 1, value: 1 },
|
|
29
|
+
centerHexagon: null,
|
|
30
|
+
getHexagon: { type: 'accessor', value: (x) => x.hexagon },
|
|
31
|
+
extruded: true
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Render hexagons from the [H3](https://h3geo.org/) geospatial indexing system.
|
|
35
|
+
*/
|
|
36
|
+
class H3HexagonLayer extends CompositeLayer {
|
|
37
|
+
initializeState() {
|
|
38
|
+
H3HexagonLayer._checkH3Lib();
|
|
39
|
+
this.state = {
|
|
40
|
+
edgeLengthKM: 0,
|
|
41
|
+
resolution: -1
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
shouldUpdateState({ changeFlags }) {
|
|
45
|
+
return this._shouldUseHighPrecision()
|
|
46
|
+
? changeFlags.propsOrDataChanged
|
|
47
|
+
: changeFlags.somethingChanged;
|
|
48
|
+
}
|
|
49
|
+
updateState({ props, changeFlags }) {
|
|
50
|
+
if (props.highPrecision !== true &&
|
|
51
|
+
(changeFlags.dataChanged ||
|
|
52
|
+
(changeFlags.updateTriggersChanged && changeFlags.updateTriggersChanged.getHexagon))) {
|
|
53
|
+
const dataProps = this._calculateH3DataProps();
|
|
54
|
+
this.setState(dataProps);
|
|
55
|
+
}
|
|
56
|
+
this._updateVertices(this.context.viewport);
|
|
57
|
+
}
|
|
58
|
+
_calculateH3DataProps() {
|
|
59
|
+
let resolution = -1;
|
|
60
|
+
let hasPentagon = false;
|
|
61
|
+
let hasMultipleRes = false;
|
|
62
|
+
const { iterable, objectInfo } = createIterable(this.props.data);
|
|
63
|
+
for (const object of iterable) {
|
|
64
|
+
objectInfo.index++;
|
|
65
|
+
const hexId = this.props.getHexagon(object, objectInfo);
|
|
66
|
+
// Take the resolution of the first hex
|
|
67
|
+
const hexResolution = getResolution(hexId);
|
|
68
|
+
if (resolution < 0) {
|
|
69
|
+
resolution = hexResolution;
|
|
70
|
+
if (!this.props.highPrecision)
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
else if (resolution !== hexResolution) {
|
|
74
|
+
hasMultipleRes = true;
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
if (isPentagon(hexId)) {
|
|
78
|
+
hasPentagon = true;
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
resolution,
|
|
84
|
+
edgeLengthKM: resolution >= 0 ? getHexagonEdgeLengthAvg(resolution, 'km') : 0,
|
|
85
|
+
hasMultipleRes,
|
|
86
|
+
hasPentagon
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
_shouldUseHighPrecision() {
|
|
90
|
+
if (this.props.highPrecision === 'auto') {
|
|
91
|
+
const { resolution, hasPentagon, hasMultipleRes } = this.state;
|
|
92
|
+
const { viewport } = this.context;
|
|
93
|
+
return (Boolean(viewport?.resolution) ||
|
|
94
|
+
hasMultipleRes ||
|
|
95
|
+
hasPentagon ||
|
|
96
|
+
(resolution >= 0 && resolution <= 5));
|
|
97
|
+
}
|
|
98
|
+
return this.props.highPrecision;
|
|
99
|
+
}
|
|
100
|
+
_updateVertices(viewport) {
|
|
101
|
+
if (this._shouldUseHighPrecision()) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const { resolution, edgeLengthKM, centerHex } = this.state;
|
|
105
|
+
if (resolution < 0) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const hex = this.props.centerHexagon || latLngToCell(viewport.latitude, viewport.longitude, resolution);
|
|
109
|
+
if (centerHex === hex) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
if (centerHex) {
|
|
113
|
+
try {
|
|
114
|
+
const distance = gridDistance(centerHex, hex);
|
|
115
|
+
if (distance * edgeLengthKM < UPDATE_THRESHOLD_KM) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
// gridDistance throws if the distance could not be computed
|
|
121
|
+
// due to the two indexes very far apart or on opposite sides of a pentagon.
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const { unitsPerMeter } = viewport.distanceScales;
|
|
125
|
+
let vertices = h3ToPolygon(hex);
|
|
126
|
+
const [centerLat, centerLng] = cellToLatLng(hex);
|
|
127
|
+
const [centerX, centerY] = viewport.projectFlat([centerLng, centerLat]);
|
|
128
|
+
vertices = vertices.map(p => {
|
|
129
|
+
const worldPosition = viewport.projectFlat(p);
|
|
130
|
+
return [
|
|
131
|
+
(worldPosition[0] - centerX) / unitsPerMeter[0],
|
|
132
|
+
(worldPosition[1] - centerY) / unitsPerMeter[1]
|
|
133
|
+
];
|
|
134
|
+
});
|
|
135
|
+
this.setState({ centerHex: hex, vertices });
|
|
136
|
+
}
|
|
137
|
+
renderLayers() {
|
|
138
|
+
return this._shouldUseHighPrecision() ? this._renderPolygonLayer() : this._renderColumnLayer();
|
|
139
|
+
}
|
|
140
|
+
_getForwardProps() {
|
|
141
|
+
const { elevationScale, material, coverage, extruded, wireframe, stroked, filled, lineWidthUnits, lineWidthScale, lineWidthMinPixels, lineWidthMaxPixels, getFillColor, getElevation, getLineColor, getLineWidth, transitions, updateTriggers } = this.props;
|
|
142
|
+
return {
|
|
143
|
+
elevationScale,
|
|
144
|
+
extruded,
|
|
145
|
+
coverage,
|
|
146
|
+
wireframe,
|
|
147
|
+
stroked,
|
|
148
|
+
filled,
|
|
149
|
+
lineWidthUnits,
|
|
150
|
+
lineWidthScale,
|
|
151
|
+
lineWidthMinPixels,
|
|
152
|
+
lineWidthMaxPixels,
|
|
153
|
+
material,
|
|
154
|
+
getElevation,
|
|
155
|
+
getFillColor,
|
|
156
|
+
getLineColor,
|
|
157
|
+
getLineWidth,
|
|
158
|
+
transitions,
|
|
159
|
+
updateTriggers: {
|
|
160
|
+
getFillColor: updateTriggers.getFillColor,
|
|
161
|
+
getElevation: updateTriggers.getElevation,
|
|
162
|
+
getLineColor: updateTriggers.getLineColor,
|
|
163
|
+
getLineWidth: updateTriggers.getLineWidth
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
_renderPolygonLayer() {
|
|
168
|
+
const { data, getHexagon, updateTriggers, coverage } = this.props;
|
|
169
|
+
const SubLayerClass = this.getSubLayerClass('hexagon-cell-hifi', PolygonLayer);
|
|
170
|
+
const forwardProps = this._getForwardProps();
|
|
171
|
+
forwardProps.updateTriggers.getPolygon = mergeTriggers(updateTriggers.getHexagon, coverage);
|
|
172
|
+
return new SubLayerClass(forwardProps, this.getSubLayerProps({
|
|
173
|
+
id: 'hexagon-cell-hifi',
|
|
174
|
+
updateTriggers: forwardProps.updateTriggers
|
|
175
|
+
}), {
|
|
176
|
+
data,
|
|
177
|
+
_normalize: false,
|
|
178
|
+
_windingOrder: 'CCW',
|
|
179
|
+
positionFormat: 'XY',
|
|
180
|
+
getPolygon: (object, objectInfo) => {
|
|
181
|
+
const hexagonId = getHexagon(object, objectInfo);
|
|
182
|
+
return flattenPolygon(h3ToPolygon(hexagonId, coverage));
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
_renderColumnLayer() {
|
|
187
|
+
const { data, getHexagon, updateTriggers } = this.props;
|
|
188
|
+
const SubLayerClass = this.getSubLayerClass('hexagon-cell', ColumnLayer);
|
|
189
|
+
const forwardProps = this._getForwardProps();
|
|
190
|
+
forwardProps.updateTriggers.getPosition = updateTriggers.getHexagon;
|
|
191
|
+
return new SubLayerClass(forwardProps, this.getSubLayerProps({
|
|
192
|
+
id: 'hexagon-cell',
|
|
193
|
+
flatShading: true,
|
|
194
|
+
updateTriggers: forwardProps.updateTriggers
|
|
195
|
+
}), {
|
|
196
|
+
data,
|
|
197
|
+
diskResolution: 6, // generate an extruded hexagon as the base geometry
|
|
198
|
+
radius: 1,
|
|
199
|
+
vertices: this.state.vertices,
|
|
200
|
+
getPosition: getHexagonCentroid.bind(null, getHexagon)
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
H3HexagonLayer.defaultProps = defaultProps;
|
|
205
|
+
H3HexagonLayer.layerName = 'H3HexagonLayer';
|
|
206
|
+
// See `main/bundle.ts`
|
|
207
|
+
H3HexagonLayer._checkH3Lib = () => { };
|
|
208
|
+
export default H3HexagonLayer;
|
|
209
|
+
//# sourceMappingURL=h3-hexagon-layer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"h3-hexagon-layer.js","sourceRoot":"","sources":["../../src/h3-layers/h3-hexagon-layer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// deck.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
import { cellToBoundary, cellToLatLng } from 'h3-js';
|
|
5
|
+
import { lerp } from '@math.gl/core';
|
|
6
|
+
// normalize longitudes w.r.t center (refLng), when not provided first vertex
|
|
7
|
+
export function normalizeLongitudes(vertices, refLng) {
|
|
8
|
+
refLng = refLng === undefined ? vertices[0][0] : refLng;
|
|
9
|
+
for (const pt of vertices) {
|
|
10
|
+
const deltaLng = pt[0] - refLng;
|
|
11
|
+
if (deltaLng > 180) {
|
|
12
|
+
pt[0] -= 360;
|
|
13
|
+
}
|
|
14
|
+
else if (deltaLng < -180) {
|
|
15
|
+
pt[0] += 360;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
// scale polygon vertices w.r.t center (hexId)
|
|
20
|
+
export function scalePolygon(hexId, vertices, factor) {
|
|
21
|
+
const [lat, lng] = cellToLatLng(hexId);
|
|
22
|
+
const actualCount = vertices.length;
|
|
23
|
+
// normalize with respect to center
|
|
24
|
+
normalizeLongitudes(vertices, lng);
|
|
25
|
+
// `cellToBoundary` returns same array object for first and last vertex (closed polygon),
|
|
26
|
+
// if so skip scaling the last vertex
|
|
27
|
+
const vertexCount = vertices[0] === vertices[actualCount - 1] ? actualCount - 1 : actualCount;
|
|
28
|
+
for (let i = 0; i < vertexCount; i++) {
|
|
29
|
+
vertices[i][0] = lerp(lng, vertices[i][0], factor);
|
|
30
|
+
vertices[i][1] = lerp(lat, vertices[i][1], factor);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// gets hexagon centroid
|
|
34
|
+
export function getHexagonCentroid(getHexagon, object, objectInfo) {
|
|
35
|
+
const hexagonId = getHexagon(object, objectInfo);
|
|
36
|
+
const [lat, lng] = cellToLatLng(hexagonId);
|
|
37
|
+
return [lng, lat];
|
|
38
|
+
}
|
|
39
|
+
export function h3ToPolygon(hexId, coverage = 1) {
|
|
40
|
+
const vertices = cellToBoundary(hexId, true);
|
|
41
|
+
if (coverage !== 1) {
|
|
42
|
+
// scale and normalize vertices w.r.t to center
|
|
43
|
+
scalePolygon(hexId, vertices, coverage);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
// normalize w.r.t to start vertex
|
|
47
|
+
normalizeLongitudes(vertices);
|
|
48
|
+
}
|
|
49
|
+
return vertices;
|
|
50
|
+
}
|
|
51
|
+
export function flattenPolygon(vertices) {
|
|
52
|
+
const positions = new Float64Array(vertices.length * 2);
|
|
53
|
+
let i = 0;
|
|
54
|
+
for (const pt of vertices) {
|
|
55
|
+
positions[i++] = pt[0];
|
|
56
|
+
positions[i++] = pt[1];
|
|
57
|
+
}
|
|
58
|
+
return positions;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=h3-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"h3-utils.js","sourceRoot":"","sources":["../../src/h3-layers/h3-utils.ts"],"names":[],"mappings":"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"}
|