@deck.gl/geo-layers
Version:
deck.gl layers supporting geospatial use cases and GIS formats
55 lines (50 loc) • 1.32 kB
JavaScript
import { h3SetToMultiPolygon } from 'h3-js';
import { createIterable } from '@deck.gl/core';
import GeoCellLayer from '../geo-cell-layer/GeoCellLayer';
const defaultProps = {
getHexagons: {
type: 'accessor',
value: d => d.hexagons
}
};
export default class H3ClusterLayer extends GeoCellLayer {
updateState({
props,
oldProps,
changeFlags
}) {
if (changeFlags.dataChanged || changeFlags.updateTriggers && changeFlags.updateTriggers.getHexagons) {
const {
data,
getHexagons
} = props;
const polygons = [];
const {
iterable,
objectInfo
} = createIterable(data);
for (const object of iterable) {
objectInfo.index++;
const hexagons = getHexagons(object, objectInfo);
const multiPolygon = h3SetToMultiPolygon(hexagons, true);
for (const polygon of multiPolygon) {
polygons.push(this.getSubLayerRow({
polygon
}, object, objectInfo.index));
}
}
this.setState({
polygons
});
}
}
indexToBounds() {
return {
data: this.state.polygons,
getPolygon: d => d.polygon
};
}
}
H3ClusterLayer.defaultProps = defaultProps;
H3ClusterLayer.layerName = 'H3ClusterLayer';
//# sourceMappingURL=h3-cluster-layer.js.map