kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
102 lines (101 loc) • 14.8 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _core = require("@deck.gl/core");
var _scatterplotIconLayer = _interopRequireDefault(require("./scatterplot-icon-layer"));
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } // SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
// default icon geometry is a square
var DEFAULT_ICON_GEOMETRY = [1, 1, 0, 1, -1, 0, -1, -1, 0, -1, -1, 0, -1, 1, 0, 1, 1, 0];
var defaultProps = {
getIconGeometry: function getIconGeometry() {
return DEFAULT_ICON_GEOMETRY;
},
getIcon: function getIcon(d) {
return d.icon;
}
};
var SvgIconLayer = exports["default"] = /*#__PURE__*/function (_CompositeLayer) {
function SvgIconLayer() {
(0, _classCallCheck2["default"])(this, SvgIconLayer);
return _callSuper(this, SvgIconLayer, arguments);
}
(0, _inherits2["default"])(SvgIconLayer, _CompositeLayer);
return (0, _createClass2["default"])(SvgIconLayer, [{
key: "initializeState",
value:
// Must be defined
function initializeState() {
this.state = {
data: {}
};
}
}, {
key: "updateState",
value: function updateState(_ref) {
var changeFlags = _ref.changeFlags;
if (changeFlags.dataChanged) {
this._extractSublayers();
}
}
}, {
key: "_extractSublayers",
value: function _extractSublayers() {
var _this$props = this.props,
data = _this$props.data,
getIconGeometry = _this$props.getIconGeometry,
getIcon = _this$props.getIcon;
var iconLayers = {};
for (var i = 0; i < data.length; i++) {
var iconId = getIcon(data[i]);
iconLayers[iconId] = iconLayers[iconId] || {
id: iconId,
geometry: getIconGeometry(iconId) || DEFAULT_ICON_GEOMETRY,
data: []
};
iconLayers[iconId].data.push(data[i]);
}
this.setState({
data: Object.values(iconLayers)
});
}
}, {
key: "_updateAutoHighlight",
value: function _updateAutoHighlight(info) {
var _info$sourceLayer;
info === null || info === void 0 || (_info$sourceLayer = info.sourceLayer) === null || _info$sourceLayer === void 0 || _info$sourceLayer.updateAutoHighlight(info);
}
}, {
key: "renderLayers",
value: function renderLayers() {
var _this = this;
var layerId = this.props.id;
var layers = this.state.data && this.state.data.length && this.state.data.map(function (_ref2) {
var id = _ref2.id,
data = _ref2.data,
geometry = _ref2.geometry;
return new _scatterplotIconLayer["default"](_objectSpread(_objectSpread({}, _this.props), {}, {
id: "".concat(layerId, "-").concat(id),
data: data,
iconGeometry: geometry
}));
});
return layers && layers.length > 0 ? layers : null;
}
}]);
}(_core.CompositeLayer);
SvgIconLayer.layerName = 'SvgIconLayer';
SvgIconLayer.defaultProps = defaultProps;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29yZSIsInJlcXVpcmUiLCJfc2NhdHRlcnBsb3RJY29uTGF5ZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0Iiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsImNhbGwiLCJERUZBVUxUX0lDT05fR0VPTUVUUlkiLCJkZWZhdWx0UHJvcHMiLCJnZXRJY29uR2VvbWV0cnkiLCJnZXRJY29uIiwiZCIsImljb24iLCJTdmdJY29uTGF5ZXIiLCJleHBvcnRzIiwiX0NvbXBvc2l0ZUxheWVyIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJpbml0aWFsaXplU3RhdGUiLCJzdGF0ZSIsImRhdGEiLCJ1cGRhdGVTdGF0ZSIsIl9yZWYiLCJjaGFuZ2VGbGFncyIsImRhdGFDaGFuZ2VkIiwiX2V4dHJhY3RTdWJsYXllcnMiLCJfdGhpcyRwcm9wcyIsInByb3BzIiwiaWNvbkxheWVycyIsImkiLCJpY29uSWQiLCJpZCIsImdlb21ldHJ5Iiwic2V0U3RhdGUiLCJ2YWx1ZXMiLCJfdXBkYXRlQXV0b0hpZ2hsaWdodCIsImluZm8iLCJfaW5mbyRzb3VyY2VMYXllciIsInNvdXJjZUxheWVyIiwidXBkYXRlQXV0b0hpZ2hsaWdodCIsInJlbmRlckxheWVycyIsIl90aGlzIiwibGF5ZXJJZCIsImxheWVycyIsIm1hcCIsIl9yZWYyIiwiU2NhdHRlcnBsb3RJY29uTGF5ZXIiLCJjb25jYXQiLCJpY29uR2VvbWV0cnkiLCJDb21wb3NpdGVMYXllciIsImxheWVyTmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdmctaWNvbi1sYXllci9zdmctaWNvbi1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge0NvbXBvc2l0ZUxheWVyLCBQb3NpdGlvbn0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQge0NvbXBvc2l0ZUxheWVyUHJvcHN9IGZyb20gJ0BkZWNrLmdsL2NvcmUvbGliL2NvbXBvc2l0ZS1sYXllcic7XG5cbmltcG9ydCB7UkdCQ29sb3IsIFJHQkFDb2xvcn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQgU2NhdHRlcnBsb3RJY29uTGF5ZXIgZnJvbSAnLi9zY2F0dGVycGxvdC1pY29uLWxheWVyJztcblxuLy8gZGVmYXVsdCBpY29uIGdlb21ldHJ5IGlzIGEgc3F1YXJlXG5jb25zdCBERUZBVUxUX0lDT05fR0VPTUVUUlkgPSBbMSwgMSwgMCwgMSwgLTEsIDAsIC0xLCAtMSwgMCwgLTEsIC0xLCAwLCAtMSwgMSwgMCwgMSwgMSwgMF07XG5cbmNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgZ2V0SWNvbkdlb21ldHJ5OiAoKSA9PiBERUZBVUxUX0lDT05fR0VPTUVUUlksXG4gIGdldEljb246IChkOiB7aWNvbjogc3RyaW5nfSkgPT4gZC5pY29uXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFN2Z0ljb25MYXllclByb3BzIGV4dGVuZHMgQ29tcG9zaXRlTGF5ZXJQcm9wczxhbnk+IHtcbiAgZ2V0SWNvbkdlb21ldHJ5OiAoaTogc3RyaW5nKSA9PiBudW1iZXJbXTtcbiAgZ2V0SWNvbjogKGQ6IHtpY29uOiBzdHJpbmd9KSA9PiBzdHJpbmc7XG4gIGdldFBvc2l0aW9uOiAoZDogYW55KSA9PiBQb3NpdGlvbjtcbiAgZ2V0UmFkaXVzOiAoKGQ6IGFueSkgPT4gbnVtYmVyKSB8IG51bWJlcjtcbiAgZ2V0RmlsbENvbG9yOiBSR0JDb2xvciB8IFJHQkFDb2xvcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ZnSWNvbkxheWVyIGV4dGVuZHMgQ29tcG9zaXRlTGF5ZXI8YW55LCBTdmdJY29uTGF5ZXJQcm9wcz4ge1xuICAvLyBNdXN0IGJlIGRlZmluZWRcbiAgaW5pdGlhbGl6ZVN0YXRlKCkge1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBkYXRhOiB7fVxuICAgIH07XG4gIH1cblxuICB1cGRhdGVTdGF0ZSh7Y2hhbmdlRmxhZ3N9KSB7XG4gICAgaWYgKGNoYW5nZUZsYWdzLmRhdGFDaGFuZ2VkKSB7XG4gICAgICB0aGlzLl9leHRyYWN0U3VibGF5ZXJzKCk7XG4gICAgfVxuICB9XG5cbiAgX2V4dHJhY3RTdWJsYXllcnMoKSB7XG4gICAgY29uc3Qge2RhdGEsIGdldEljb25HZW9tZXRyeSwgZ2V0SWNvbn0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgaWNvbkxheWVycyA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaWNvbklkID0gZ2V0SWNvbihkYXRhW2ldKTtcbiAgICAgIGljb25MYXllcnNbaWNvbklkXSA9IGljb25MYXllcnNbaWNvbklkXSB8fCB7XG4gICAgICAgIGlkOiBpY29uSWQsXG4gICAgICAgIGdlb21ldHJ5OiBnZXRJY29uR2VvbWV0cnkoaWNvbklkKSB8fCBERUZBVUxUX0lDT05fR0VPTUVUUlksXG4gICAgICAgIGRhdGE6IFtdXG4gICAgICB9O1xuICAgICAgaWNvbkxheWVyc1tpY29uSWRdLmRhdGEucHVzaChkYXRhW2ldKTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBkYXRhOiBPYmplY3QudmFsdWVzKGljb25MYXllcnMpXG4gICAgfSk7XG4gIH1cblxuICBfdXBkYXRlQXV0b0hpZ2hsaWdodChpbmZvKSB7XG4gICAgaW5mbz8uc291cmNlTGF5ZXI/LnVwZGF0ZUF1dG9IaWdobGlnaHQoaW5mbyk7XG4gIH1cblxuICByZW5kZXJMYXllcnMoKSB7XG4gICAgY29uc3QgbGF5ZXJJZCA9IHRoaXMucHJvcHMuaWQ7XG5cbiAgICBjb25zdCBsYXllcnMgPVxuICAgICAgdGhpcy5zdGF0ZS5kYXRhICYmXG4gICAgICB0aGlzLnN0YXRlLmRhdGEubGVuZ3RoICYmXG4gICAgICB0aGlzLnN0YXRlLmRhdGEubWFwKFxuICAgICAgICAoe2lkLCBkYXRhLCBnZW9tZXRyeX0pID0+XG4gICAgICAgICAgbmV3IFNjYXR0ZXJwbG90SWNvbkxheWVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMucHJvcHMsXG4gICAgICAgICAgICBpZDogYCR7bGF5ZXJJZH0tJHtpZH1gLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGljb25HZW9tZXRyeTogZ2VvbWV0cnlcbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIHJldHVybiBsYXllcnMgJiYgbGF5ZXJzLmxlbmd0aCA+IDAgPyBsYXllcnMgOiBudWxsO1xuICB9XG59XG5cblN2Z0ljb25MYXllci5sYXllck5hbWUgPSAnU3ZnSWNvbkxheWVyJztcblN2Z0ljb25MYXllci5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLE9BQUE7QUFJQSxJQUFBQyxxQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQTRELFNBQUFHLFFBQUFDLENBQUEsRUFBQUMsQ0FB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LElBQUksQ0FBQ3FDLElBQUksQ0FBQ1MsQ0FBQyxDQUFDLENBQUM7TUFDdkM7TUFDQSxJQUFJLENBQUNJLFFBQVEsQ0FBQztRQUNaYixJQUFJLEVBQUU1QyxNQUFNLENBQUMwRCxNQUFNLENBQUNOLFVBQVU7TUFDaEMsQ0FBQyxDQUFDO0lBQ0o7RUFBQztJQUFBWixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBa0Isb0JBQW9CQSxDQUFDQyxJQUFJLEVBQUU7TUFBQSxJQUFBQyxpQkFBQTtNQUN6QkQsSUFBSSxhQUFKQSxJQUFJLGdCQUFBQyxpQkFBQSxHQUFKRCxJQUFJLENBQUVFLFdBQVcsY0FBQUQsaUJBQUEsZUFBakJBLGlCQUFBLENBQW1CRSxtQkFBbUIsQ0FBQ0gsSUFBSSxDQUFDO0lBQzlDO0VBQUM7SUFBQXBCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUF1QixZQUFZQSxDQUFBLEVBQUc7TUFBQSxJQUFBQyxLQUFBO01BQ2IsSUFBTUMsT0FBTyxHQUFHLElBQUksQ0FBQ2YsS0FBSyxDQUFDSSxFQUFFO01BRTdCLElBQU1ZLE1BQU0sR0FDVixJQUFJLENBQUN4QixLQUFLLENBQUNDLElBQUksSUFDZixJQUFJLENBQUNELEtBQUssQ0FBQ0MsSUFBSSxDQUFDakMsTUFBTSxJQUN0QixJQUFJLENBQUNnQyxLQUFLLENBQUNDLElBQUksQ0FBQ3dCLEdBQUcsQ0FDakIsVUFBQUMsS0FBQTtRQUFBLElBQUVkLEVBQUUsR0FBQWMsS0FBQSxDQUFGZCxFQUFFO1VBQUVYLElBQUksR0FBQXlCLEtBQUEsQ0FBSnpCLElBQUk7VUFBRVksUUFBUSxHQUFBYSxLQUFBLENBQVJiLFFBQVE7UUFBQSxPQUNsQixJQUFJYyxnQ0FBb0IsQ0FBQTdELGFBQUEsQ0FBQUEsYUFBQSxLQUNuQndELEtBQUksQ0FBQ2QsS0FBSztVQUNiSSxFQUFFLEtBQUFnQixNQUFBLENBQUtMLE9BQU8sT0FBQUssTUFBQSxDQUFJaEIsRUFBRSxDQUFFO1VBQ3RCWCxJQUFJLEVBQUpBLElBQUk7VUFDSjRCLFlBQVksRUFBRWhCO1FBQVEsRUFDdkIsQ0FBQztNQUFBLENBQ04sQ0FBQztNQUVILE9BQU9XLE1BQU0sSUFBSUEsTUFBTSxDQUFDeEQsTUFBTSxHQUFHLENBQUMsR0FBR3dELE1BQU0sR0FBRyxJQUFJO0lBQ3BEO0VBQUM7QUFBQSxFQXJEdUNNLG9CQUFjO0FBd0R4RHZDLFlBQVksQ0FBQ3dDLFNBQVMsR0FBRyxjQUFjO0FBQ3ZDeEMsWUFBWSxDQUFDTCxZQUFZLEdBQUdBLFlBQVkiLCJpZ25vcmVMaXN0IjpbXX0=
;