kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
93 lines (90 loc) • 10.3 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
exports.getGeoJSON = getGeoJSON;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _supercluster = _interopRequireDefault(require("supercluster"));
var _lodash = _interopRequireDefault(require("lodash.memoize"));
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
function getGeoJSON(data, getPosition, filterData) {
var raw = typeof filterData === 'function' ? data.filter(filterData) : data;
return raw.map(function (d) {
return {
type: 'Point',
properties: {
data: d,
points: [d],
point_count: 1,
point_count_abbreviated: '1'
},
geometry: {
coordinates: getPosition(d)
}
};
}).filter(function (d) {
return d.geometry.coordinates.every(Number.isFinite);
});
}
var clusterResolver = function clusterResolver(_ref) {
var clusterRadius = _ref.clusterRadius;
return "".concat(clusterRadius);
};
var getClusterer = function getClusterer(_ref2) {
var clusterRadius = _ref2.clusterRadius,
geoJSON = _ref2.geoJSON;
return new _supercluster["default"]({
maxZoom: 20,
radius: clusterRadius,
reduce: function reduce(accumulated, props) {
accumulated.points = [].concat((0, _toConsumableArray2["default"])(accumulated.points), (0, _toConsumableArray2["default"])(props.points));
},
map: function map(props) {
return {
points: [props.data]
};
}
}).load(geoJSON);
};
var ClusterBuilder = exports["default"] = /*#__PURE__*/function () {
function ClusterBuilder() {
(0, _classCallCheck2["default"])(this, ClusterBuilder);
(0, _defineProperty2["default"])(this, "clusterer", void 0);
this.clusterer = (0, _lodash["default"])(getClusterer, clusterResolver);
}
return (0, _createClass2["default"])(ClusterBuilder, [{
key: "clustersAtZoom",
value: function clustersAtZoom(_ref3) {
var bbox = _ref3.bbox,
clusterRadius = _ref3.clusterRadius,
geoJSON = _ref3.geoJSON,
zoom = _ref3.zoom;
var clusterer = this.clusterer({
clusterRadius: clusterRadius,
geoJSON: geoJSON
});
// map clusters to formatted bins to be passed to deck.gl bin-sorter
var clusters = clusterer.getClusters(bbox, zoom).map(function (c, i) {
return {
points: c.properties.points,
position: c.geometry.coordinates,
index: i
};
});
return clusters;
}
}, {
key: "clearClustererCache",
value: function clearClustererCache() {
var _this$clusterer$cache, _this$clusterer$cache2;
(_this$clusterer$cache = (_this$clusterer$cache2 = this.clusterer.cache).clear) === null || _this$clusterer$cache === void 0 || _this$clusterer$cache.call(_this$clusterer$cache2);
}
}]);
}();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3VwZXJjbHVzdGVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfbG9kYXNoIiwiZ2V0R2VvSlNPTiIsImRhdGEiLCJnZXRQb3NpdGlvbiIsImZpbHRlckRhdGEiLCJyYXciLCJmaWx0ZXIiLCJtYXAiLCJkIiwidHlwZSIsInByb3BlcnRpZXMiLCJwb2ludHMiLCJwb2ludF9jb3VudCIsInBvaW50X2NvdW50X2FiYnJldmlhdGVkIiwiZ2VvbWV0cnkiLCJjb29yZGluYXRlcyIsImV2ZXJ5IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJjbHVzdGVyUmVzb2x2ZXIiLCJfcmVmIiwiY2x1c3RlclJhZGl1cyIsImNvbmNhdCIsImdldENsdXN0ZXJlciIsIl9yZWYyIiwiZ2VvSlNPTiIsIlN1cGVyY2x1c3RlciIsIm1heFpvb20iLCJyYWRpdXMiLCJyZWR1Y2UiLCJhY2N1bXVsYXRlZCIsInByb3BzIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImxvYWQiLCJDbHVzdGVyQnVpbGRlciIsImV4cG9ydHMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2RlZmluZVByb3BlcnR5MiIsImNsdXN0ZXJlciIsIm1lbW9pemUiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJjbHVzdGVyc0F0Wm9vbSIsIl9yZWYzIiwiYmJveCIsInpvb20iLCJjbHVzdGVycyIsImdldENsdXN0ZXJzIiwiYyIsImkiLCJwb3NpdGlvbiIsImluZGV4IiwiY2xlYXJDbHVzdGVyZXJDYWNoZSIsIl90aGlzJGNsdXN0ZXJlciRjYWNoZSIsIl90aGlzJGNsdXN0ZXJlciRjYWNoZTIiLCJjYWNoZSIsImNsZWFyIiwiY2FsbCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYXllci11dGlscy9jbHVzdGVyLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBTdXBlcmNsdXN0ZXIgZnJvbSAnc3VwZXJjbHVzdGVyJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ2xvZGFzaC5tZW1vaXplJztcbmltcG9ydCB7TWVtb2l6ZWRGdW5jdGlvbn0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7QkJveCwgUG9zaXRpb259IGZyb20gJ2dlb2pzb24nO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2VvSlNPTihkYXRhLCBnZXRQb3NpdGlvbiwgZmlsdGVyRGF0YSkge1xuICBjb25zdCByYXcgPSB0eXBlb2YgZmlsdGVyRGF0YSA9PT0gJ2Z1bmN0aW9uJyA/IGRhdGEuZmlsdGVyKGZpbHRlckRhdGEpIDogZGF0YTtcblxuICByZXR1cm4gcmF3XG4gICAgLm1hcChkID0+ICh7XG4gICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBkYXRhOiBkLFxuICAgICAgICBwb2ludHM6IFtkXSxcbiAgICAgICAgcG9pbnRfY291bnQ6IDEsXG4gICAgICAgIHBvaW50X2NvdW50X2FiYnJldmlhdGVkOiAnMSdcbiAgICAgIH0sXG4gICAgICBnZW9tZXRyeToge1xuICAgICAgICBjb29yZGluYXRlczogZ2V0UG9zaXRpb24oZClcbiAgICAgIH1cbiAgICB9KSlcbiAgICAuZmlsdGVyKGQgPT4gZC5nZW9tZXRyeS5jb29yZGluYXRlcy5ldmVyeShOdW1iZXIuaXNGaW5pdGUpKTtcbn1cblxuY29uc3QgY2x1c3RlclJlc29sdmVyID0gKHtjbHVzdGVyUmFkaXVzfToge2NsdXN0ZXJSYWRpdXM6IG51bWJlcn0pID0+IGAke2NsdXN0ZXJSYWRpdXN9YDtcblxuY29uc3QgZ2V0Q2x1c3RlcmVyID0gKHtjbHVzdGVyUmFkaXVzLCBnZW9KU09OfToge2NsdXN0ZXJSYWRpdXM6IG51bWJlcjsgZ2VvSlNPTn0pID0+XG4gIG5ldyBTdXBlcmNsdXN0ZXIoe1xuICAgIG1heFpvb206IDIwLFxuICAgIHJhZGl1czogY2x1c3RlclJhZGl1cyxcbiAgICByZWR1Y2U6IChhY2N1bXVsYXRlZCwgcHJvcHMpID0+IHtcbiAgICAgIGFjY3VtdWxhdGVkLnBvaW50cyA9IFsuLi5hY2N1bXVsYXRlZC5wb2ludHMsIC4uLnByb3BzLnBvaW50c107XG4gICAgfSxcbiAgICBtYXA6IHByb3BzID0+ICh7cG9pbnRzOiBbcHJvcHMuZGF0YV19KVxuICB9KS5sb2FkKGdlb0pTT04pO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDbHVzdGVyQnVpbGRlciB7XG4gIGNsdXN0ZXJlcjogKCh7Y2x1c3RlclJhZGl1cywgZ2VvSlNPTn06IHtjbHVzdGVyUmFkaXVzOiBudW1iZXI7IGdlb0pTT059KSA9PiBTdXBlcmNsdXN0ZXIpICZcbiAgICBNZW1vaXplZEZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY2x1c3RlcmVyID0gbWVtb2l6ZShnZXRDbHVzdGVyZXIsIGNsdXN0ZXJSZXNvbHZlcik7XG4gIH1cblxuICBjbHVzdGVyc0F0Wm9vbSh7XG4gICAgYmJveCxcbiAgICBjbHVzdGVyUmFkaXVzLFxuICAgIGdlb0pTT04sXG4gICAgem9vbVxuICB9OiB7XG4gICAgYmJveDogQkJveDtcbiAgICBjbHVzdGVyUmFkaXVzOiBudW1iZXI7XG4gICAgZ2VvSlNPTjtcbiAgICB6b29tOiBudW1iZXI7XG4gIH0pOiB7XG4gICAgcG9pbnRzOiBhbnk7XG4gICAgcG9zaXRpb246IFBvc2l0aW9uO1xuICAgIGluZGV4OiBudW1iZXI7XG4gIH1bXSB7XG4gICAgY29uc3QgY2x1c3RlcmVyID0gdGhpcy5jbHVzdGVyZXIoe2NsdXN0ZXJSYWRpdXMsIGdlb0pTT059KTtcblxuICAgIC8vIG1hcCBjbHVzdGVycyB0byBmb3JtYXR0ZWQgYmlucyB0byBiZSBwYXNzZWQgdG8gZGVjay5nbCBiaW4tc29ydGVyXG4gICAgY29uc3QgY2x1c3RlcnMgPSBjbHVzdGVyZXIuZ2V0Q2x1c3RlcnMoYmJveCwgem9vbSkubWFwKChjLCBpKSA9PiAoe1xuICAgICAgcG9pbnRzOiBjLnByb3BlcnRpZXMucG9pbnRzLFxuICAgICAgcG9zaXRpb246IGMuZ2VvbWV0cnkuY29vcmRpbmF0ZXMsXG4gICAgICBpbmRleDogaVxuICAgIH0pKTtcblxuICAgIHJldHVybiBjbHVzdGVycztcbiAgfVxuXG4gIGNsZWFyQ2x1c3RlcmVyQ2FjaGUoKSB7XG4gICAgdGhpcy5jbHVzdGVyZXIuY2FjaGUuY2xlYXI/LigpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLGFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUpBO0FBQ0E7O0FBT08sU0FBU0UsVUFBVUEsQ0FBQ0MsSUFBSSxFQUFFQyxXQUFXLEVBQUVDLFVBQVUsRUFBRTtFQUN4RCxJQUFNQyxHQUFHLEdBQUcsT0FBT0QsVUFBVSxLQUFLLFVBQVUsR0FBR0YsSUFBSSxDQUFDSSxNQUFNLENBQUNGLFVBQVUsQ0FBQyxHQUFHRixJQUFJO0VBRTdFLE9BQU9HLEdBQUcsQ0FDUEUsR0FBRyxDQUFDLFVBQUFDLENBQUM7SUFBQSxPQUFLO01BQ1RDLElBQUksRUFBRSxPQUFPO01BQ2JDLFVBQVUsRUFBRTtRQUNWUixJQUFJLEVBQUVNLENBQUM7UUFDUEcsTUFBTSxFQUFFLENBQUNILENBQUMsQ0FBQztRQUNYSSxXQUFXLEVBQUUsQ0FBQztRQUNkQyx1QkFBdUIsRUFBRTtNQUMzQixDQUFDO01BQ0RDLFFBQVEsRUFBRTtRQUNSQyxXQUFXLEVBQUVaLFdBQVcsQ0FBQ0ssQ0FBQztNQUM1QjtJQUNGLENBQUM7RUFBQSxDQUFDLENBQUMsQ0FDRkYsTUFBTSxDQUFDLFVBQUFFLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNNLFFBQVEsQ0FBQ0MsV0FBVyxDQUFDQyxLQUFLLENBQUNDLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDO0VBQUEsRUFBQztBQUMvRDtBQUVBLElBQU1DLGVBQWUsR0FBRyxTQUFsQkEsZUFBZUEsQ0FBQUMsSUFB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
;