UNPKG

kepler.gl

Version:

kepler.gl is a webgl based application to visualize large scale location data in the browser

135 lines (134 loc) 19.8 kB
"use strict"; 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 _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _layers = require("@deck.gl/layers"); var _core = require("@deck.gl/core"); var _ = require("../"); 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; })(); } function _superPropGet(t, e, r, o) { var p = (0, _get2["default"])((0, _getPrototypeOf2["default"])(1 & o ? t.prototype : t), e, r); return 2 & o ? function (t) { return p.apply(r, t); } : p; } // SPDX-License-Identifier: MIT // Copyright contributors to the kepler.gl project function addInstanceCoverage(vs) { var addDecl = (0, _.editShader)(vs, 'hexagon cell vs add instance 1', 'in vec3 instancePickingColors;', "in vec3 instancePickingColors;\n in float instanceCoverage;"); return (0, _.editShader)(addDecl, 'hexagon cell vs add instance 2', 'float dotRadius = column.radius * column.coverage * shouldRender;', 'float dotRadius = column.radius * column.coverage * instanceCoverage * shouldRender;'); } var EnhancedColumnLayer = /*#__PURE__*/function (_ColumnLayer) { function EnhancedColumnLayer() { (0, _classCallCheck2["default"])(this, EnhancedColumnLayer); return _callSuper(this, EnhancedColumnLayer, arguments); } (0, _inherits2["default"])(EnhancedColumnLayer, _ColumnLayer); return (0, _createClass2["default"])(EnhancedColumnLayer, [{ key: "getShaders", value: function getShaders() { var shaders = _superPropGet(EnhancedColumnLayer, "getShaders", this, 3)([]); return _objectSpread(_objectSpread({}, shaders), {}, { vs: addInstanceCoverage(shaders.vs) }); } }, { key: "initializeState", value: function initializeState() { var _this$getAttributeMan; _superPropGet(EnhancedColumnLayer, "initializeState", this, 3)([]); (_this$getAttributeMan = this.getAttributeManager()) === null || _this$getAttributeMan === void 0 || _this$getAttributeMan.addInstanced({ instanceCoverage: { size: 1, accessor: 'getCoverage' } }); } }, { key: "draw", value: function draw(_ref) { var _uniforms = _ref.uniforms; var _this$props = this.props, lineWidthUnits = _this$props.lineWidthUnits, lineWidthScale = _this$props.lineWidthScale, lineWidthMinPixels = _this$props.lineWidthMinPixels, lineWidthMaxPixels = _this$props.lineWidthMaxPixels, radiusUnits = _this$props.radiusUnits, elevationScale = _this$props.elevationScale, extruded = _this$props.extruded, filled = _this$props.filled, stroked = _this$props.stroked, strokeOpacity = _this$props.strokeOpacity, wireframe = _this$props.wireframe, offset = _this$props.offset, coverage = _this$props.coverage, radius = _this$props.radius, angle = _this$props.angle; var fillModel = this.state.fillModel; var wireframeModel = this.state.wireframeModel; var _this$state = this.state, fillVertexCount = _this$state.fillVertexCount, edgeDistance = _this$state.edgeDistance; var columnProps = { radius: radius, angle: angle / 180 * Math.PI, offset: offset, extruded: extruded, stroked: stroked, coverage: coverage, elevationScale: elevationScale, edgeDistance: edgeDistance, radiusUnits: _core.UNIT[radiusUnits], widthUnits: _core.UNIT[lineWidthUnits], widthScale: lineWidthScale, widthMinPixels: lineWidthMinPixels, widthMaxPixels: lineWidthMaxPixels }; if (extruded && wireframe && wireframeModel) { wireframeModel.shaderInputs.setProps({ column: _objectSpread(_objectSpread({}, columnProps), {}, { isStroke: true }) }); wireframeModel.draw(this.context.renderPass); } if (filled && fillModel) { fillModel.setVertexCount(fillVertexCount); fillModel.shaderInputs.setProps({ column: _objectSpread(_objectSpread({}, columnProps), {}, { isStroke: false }) }); fillModel.draw(this.context.renderPass); } if (!extruded && stroked && fillModel) { fillModel.setVertexCount(fillVertexCount * 2 / 3); fillModel.shaderInputs.setProps({ column: _objectSpread(_objectSpread({}, columnProps), {}, { isStroke: true }), layer: { opacity: strokeOpacity !== null && strokeOpacity !== void 0 ? strokeOpacity : this.props.opacity } }); fillModel.draw(this.context.renderPass); // Restore original vertex count and opacity so subsequent passes are unaffected fillModel.setVertexCount(fillVertexCount); fillModel.shaderInputs.setProps({ layer: { opacity: this.props.opacity } }); } } }]); }(_layers.ColumnLayer); EnhancedColumnLayer.layerName = 'EnhancedColumnLayer'; var _default = exports["default"] = EnhancedColumnLayer; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGF5ZXJzIiwicmVxdWlyZSIsIl9jb3JlIiwiXyIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJjYWxsIiwiX3N1cGVyUHJvcEdldCIsInAiLCJfZ2V0MiIsImFkZEluc3RhbmNlQ292ZXJhZ2UiLCJ2cyIsImFkZERlY2wiLCJlZGl0U2hhZGVyIiwiRW5oYW5jZWRDb2x1bW5MYXllciIsIl9Db2x1bW5MYXllciIsIl9jbGFzc0NhbGxDaGVjazIiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInZhbHVlIiwiZ2V0U2hhZGVycyIsInNoYWRlcnMiLCJpbml0aWFsaXplU3RhdGUiLCJfdGhpcyRnZXRBdHRyaWJ1dGVNYW4iLCJnZXRBdHRyaWJ1dGVNYW5hZ2VyIiwiYWRkSW5zdGFuY2VkIiwiaW5zdGFuY2VDb3ZlcmFnZSIsInNpemUiLCJhY2Nlc3NvciIsImRyYXciLCJfcmVmIiwiX3VuaWZvcm1zIiwidW5pZm9ybXMiLCJfdGhpcyRwcm9wcyIsInByb3BzIiwibGluZVdpZHRoVW5pdHMiLCJsaW5lV2lkdGhTY2FsZSIsImxpbmVXaWR0aE1pblBpeGVscyIsImxpbmVXaWR0aE1heFBpeGVscyIsInJhZGl1c1VuaXRzIiwiZWxldmF0aW9uU2NhbGUiLCJleHRydWRlZCIsImZpbGxlZCIsInN0cm9rZWQiLCJzdHJva2VPcGFjaXR5Iiwid2lyZWZyYW1lIiwib2Zmc2V0IiwiY292ZXJhZ2UiLCJyYWRpdXMiLCJhbmdsZSIsImZpbGxNb2RlbCIsInN0YXRlIiwid2lyZWZyYW1lTW9kZWwiLCJfdGhpcyRzdGF0ZSIsImZpbGxWZXJ0ZXhDb3VudCIsImVkZ2VEaXN0YW5jZSIsImNvbHVtblByb3BzIiwiTWF0aCIsIlBJIiwiVU5JVCIsIndpZHRoVW5pdHMiLCJ3aWR0aFNjYWxlIiwid2lkdGhNaW5QaXhlbHMiLCJ3aWR0aE1heFBpeGVscyIsInNoYWRlcklucHV0cyIsInNldFByb3BzIiwiY29sdW1uIiwiaXNTdHJva2UiLCJjb250ZXh0IiwicmVuZGVyUGFzcyIsInNldFZlcnRleENvdW50IiwibGF5ZXIiLCJvcGFjaXR5IiwiQ29sdW1uTGF5ZXIiLCJsYXllck5hbWUiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29sdW1uLWxheWVyL2VuaGFuY2VkLWNvbHVtbi1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge0NvbHVtbkxheWVyLCBDb2x1bW5MYXllclByb3BzfSBmcm9tICdAZGVjay5nbC9sYXllcnMnO1xuaW1wb3J0IHtVTklUfSBmcm9tICdAZGVjay5nbC9jb3JlJztcblxuaW1wb3J0IHtlZGl0U2hhZGVyfSBmcm9tICcuLi8nO1xuXG5mdW5jdGlvbiBhZGRJbnN0YW5jZUNvdmVyYWdlKHZzOiBzdHJpbmcpIHtcbiAgY29uc3QgYWRkRGVjbCA9IGVkaXRTaGFkZXIoXG4gICAgdnMsXG4gICAgJ2hleGFnb24gY2VsbCB2cyBhZGQgaW5zdGFuY2UgMScsXG4gICAgJ2luIHZlYzMgaW5zdGFuY2VQaWNraW5nQ29sb3JzOycsXG4gICAgYGluIHZlYzMgaW5zdGFuY2VQaWNraW5nQ29sb3JzO1xuICAgICBpbiBmbG9hdCBpbnN0YW5jZUNvdmVyYWdlO2BcbiAgKTtcblxuICByZXR1cm4gZWRpdFNoYWRlcihcbiAgICBhZGREZWNsLFxuICAgICdoZXhhZ29uIGNlbGwgdnMgYWRkIGluc3RhbmNlIDInLFxuICAgICdmbG9hdCBkb3RSYWRpdXMgPSBjb2x1bW4ucmFkaXVzICogY29sdW1uLmNvdmVyYWdlICogc2hvdWxkUmVuZGVyOycsXG4gICAgJ2Zsb2F0IGRvdFJhZGl1cyA9IGNvbHVtbi5yYWRpdXMgKiBjb2x1bW4uY292ZXJhZ2UgKiBpbnN0YW5jZUNvdmVyYWdlICogc2hvdWxkUmVuZGVyOydcbiAgKTtcbn1cblxudHlwZSBFbmhhbmNlZENvbHVtbkxheWVyUHJvcHMgPSBDb2x1bW5MYXllclByb3BzPGFueT4gJiB7XG4gIHN0cm9rZU9wYWNpdHk6IG51bWJlcjtcbn07XG5cbmNsYXNzIEVuaGFuY2VkQ29sdW1uTGF5ZXIgZXh0ZW5kcyBDb2x1bW5MYXllcjxhbnksIEVuaGFuY2VkQ29sdW1uTGF5ZXJQcm9wcz4ge1xuICBnZXRTaGFkZXJzKCkge1xuICAgIGNvbnN0IHNoYWRlcnMgPSBzdXBlci5nZXRTaGFkZXJzKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc2hhZGVycyxcbiAgICAgIHZzOiBhZGRJbnN0YW5jZUNvdmVyYWdlKHNoYWRlcnMudnMpXG4gICAgfTtcbiAgfVxuXG4gIGluaXRpYWxpemVTdGF0ZSgpIHtcbiAgICBzdXBlci5pbml0aWFsaXplU3RhdGUoKTtcblxuICAgIHRoaXMuZ2V0QXR0cmlidXRlTWFuYWdlcigpPy5hZGRJbnN0YW5jZWQoe1xuICAgICAgaW5zdGFuY2VDb3ZlcmFnZToge3NpemU6IDEsIGFjY2Vzc29yOiAnZ2V0Q292ZXJhZ2UnfVxuICAgIH0pO1xuICB9XG5cbiAgZHJhdyh7dW5pZm9ybXM6IF91bmlmb3Jtc30pIHtcbiAgICBjb25zdCB7XG4gICAgICBsaW5lV2lkdGhVbml0cyxcbiAgICAgIGxpbmVXaWR0aFNjYWxlLFxuICAgICAgbGluZVdpZHRoTWluUGl4ZWxzLFxuICAgICAgbGluZVdpZHRoTWF4UGl4ZWxzLFxuICAgICAgcmFkaXVzVW5pdHMsXG4gICAgICBlbGV2YXRpb25TY2FsZSxcbiAgICAgIGV4dHJ1ZGVkLFxuICAgICAgZmlsbGVkLFxuICAgICAgc3Ryb2tlZCxcbiAgICAgIHN0cm9rZU9wYWNpdHksXG4gICAgICB3aXJlZnJhbWUsXG4gICAgICBvZmZzZXQsXG4gICAgICBjb3ZlcmFnZSxcbiAgICAgIHJhZGl1cyxcbiAgICAgIGFuZ2xlXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgZmlsbE1vZGVsID0gdGhpcy5zdGF0ZS5maWxsTW9kZWw7XG4gICAgY29uc3Qgd2lyZWZyYW1lTW9kZWwgPSB0aGlzLnN0YXRlLndpcmVmcmFtZU1vZGVsO1xuICAgIGNvbnN0IHtmaWxsVmVydGV4Q291bnQsIGVkZ2VEaXN0YW5jZX0gPSB0aGlzLnN0YXRlO1xuXG4gICAgY29uc3QgY29sdW1uUHJvcHMgPSB7XG4gICAgICByYWRpdXMsXG4gICAgICBhbmdsZTogKGFuZ2xlIC8gMTgwKSAqIE1hdGguUEksXG4gICAgICBvZmZzZXQsXG4gICAgICBleHRydWRlZCxcbiAgICAgIHN0cm9rZWQsXG4gICAgICBjb3ZlcmFnZSxcbiAgICAgIGVsZXZhdGlvblNjYWxlLFxuICAgICAgZWRnZURpc3RhbmNlLFxuICAgICAgcmFkaXVzVW5pdHM6IFVOSVRbcmFkaXVzVW5pdHNdLFxuICAgICAgd2lkdGhVbml0czogVU5JVFtsaW5lV2lkdGhVbml0c10sXG4gICAgICB3aWR0aFNjYWxlOiBsaW5lV2lkdGhTY2FsZSxcbiAgICAgIHdpZHRoTWluUGl4ZWxzOiBsaW5lV2lkdGhNaW5QaXhlbHMsXG4gICAgICB3aWR0aE1heFBpeGVsczogbGluZVdpZHRoTWF4UGl4ZWxzXG4gICAgfTtcblxuICAgIGlmIChleHRydWRlZCAmJiB3aXJlZnJhbWUgJiYgd2lyZWZyYW1lTW9kZWwpIHtcbiAgICAgIHdpcmVmcmFtZU1vZGVsLnNoYWRlcklucHV0cy5zZXRQcm9wcyh7XG4gICAgICAgIGNvbHVtbjogey4uLmNvbHVtblByb3BzLCBpc1N0cm9rZTogdHJ1ZX1cbiAgICAgIH0pO1xuICAgICAgd2lyZWZyYW1lTW9kZWwuZHJhdyh0aGlzLmNvbnRleHQucmVuZGVyUGFzcyk7XG4gICAgfVxuICAgIGlmIChmaWxsZWQgJiYgZmlsbE1vZGVsKSB7XG4gICAgICBmaWxsTW9kZWwuc2V0VmVydGV4Q291bnQoZmlsbFZlcnRleENvdW50KTtcbiAgICAgIGZpbGxNb2RlbC5zaGFkZXJJbnB1dHMuc2V0UHJvcHMoe1xuICAgICAgICBjb2x1bW46IHsuLi5jb2x1bW5Qcm9wcywgaXNTdHJva2U6IGZhbHNlfVxuICAgICAgfSk7XG4gICAgICBmaWxsTW9kZWwuZHJhdyh0aGlzLmNvbnRleHQucmVuZGVyUGFzcyk7XG4gICAgfVxuICAgIGlmICghZXh0cnVkZWQgJiYgc3Ryb2tlZCAmJiBmaWxsTW9kZWwpIHtcbiAgICAgIGZpbGxNb2RlbC5zZXRWZXJ0ZXhDb3VudCgoZmlsbFZlcnRleENvdW50ICogMikgLyAzKTtcbiAgICAgIGZpbGxNb2RlbC5zaGFkZXJJbnB1dHMuc2V0UHJvcHMoe1xuICAgICAgICBjb2x1bW46IHsuLi5jb2x1bW5Qcm9wcywgaXNTdHJva2U6IHRydWV9LFxuICAgICAgICBsYXllcjoge29wYWNpdHk6IHN0cm9rZU9wYWNpdHkgPz8gdGhpcy5wcm9wcy5vcGFjaXR5fVxuICAgICAgfSk7XG4gICAgICBmaWxsTW9kZWwuZHJhdyh0aGlzLmNvbnRleHQucmVuZGVyUGFzcyk7XG4gICAgICAvLyBSZXN0b3JlIG9yaWdpbmFsIHZlcnRleCBjb3VudCBhbmQgb3BhY2l0eSBzbyBzdWJzZXF1ZW50IHBhc3NlcyBhcmUgdW5hZmZlY3RlZFxuICAgICAgZmlsbE1vZGVsLnNldFZlcnRleENvdW50KGZpbGxWZXJ0ZXhDb3VudCk7XG4gICAgICBmaWxsTW9kZWwuc2hhZGVySW5wdXRzLnNldFByb3BzKHtcbiAgICAgICAgbGF5ZXI6IHtvcGFjaXR5OiB0aGlzLnByb3BzLm9wYWNpdHl9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuRW5oYW5jZWRDb2x1bW5MYXllci5sYXllck5hbWUgPSAnRW5oYW5jZWRDb2x1bW5MYXllcic7XG5cbmV4cG9ydCBkZWZhdWx0IEVuaGFuY2VkQ29sdW1uTGF5ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRCxPQUFBO0FBRUEsSUFBQUUsQ0FBQSxHQUFBRixPQUFBO0FBQStCLFNBQUFHLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFMLENBQUEsR0FBQUMsQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBTixDQUFBLFdBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFRLFVBQUEsT0FBQVAsQ0FBQSxDQUFBUSxJQUFBLENBQUFDLEtBQUEsQ0FBQVQsQ0FBQSxFQUFBSSxDQUFBLFlBQUFKLENBQUE7QUFBQSxTQUFBVSxjQUFBWixDQUFBLGFBQUFDLENBQUEsTUFBQUEsQ0FBQSxHQUFBWSxTQUFBLENBQUFDLE1BQUEsRUFBQWIsQ0FBQSxVQUFBQyxDQUFBLFdBQUFXLFNBQUEsQ0FBQVosQ0FBQSxJQUFBWSxTQUFBLENBQUFaLENBQUEsUUFBQUEsQ0FBQSxPQUFBRixPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxPQUFBYSxPQUFBLFdBQUFkLENBQUEsUUFBQWUsZ0JBQUEsYUFBQWhCLENBQUEsRUFBQUMsQ0FBQSxFQUFB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