UNPKG

kepler.gl

Version:

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

95 lines (94 loc) 16.4 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); 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 _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _layers = require("@deck.gl/layers"); var _ = require("../"); 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; } 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; } // SPDX-License-Identifier: MIT // Copyright contributors to the kepler.gl project var elevationScaleUniforms = { name: 'elevationScale', vs: "uniform elevationScaleUniforms {\n float elevationScale;\n} elevationScaleProps;\n", uniformTypes: { elevationScale: 'f32' } }; var defaultProps = _objectSpread(_objectSpread({}, _layers.LineLayer.defaultProps), {}, { getTargetColor: function getTargetColor(x) { return x.color || [0, 0, 0, 255]; } }); function addInstanceColorShader(vs) { var targetColorVs = (0, _.editShader)(vs, 'line target color vs', 'in vec4 instanceColors;', 'in vec4 instanceColors; in vec4 instanceTargetColors;'); return (0, _.editShader)(targetColorVs, 'line color vs', 'vColor = vec4(instanceColors.rgb, instanceColors.a * layer.opacity);', "vec4 color = mix(instanceColors, instanceTargetColors, positions.x);" + "vColor = vec4(color.rgb, color.a * layer.opacity);"); } function addElevationScale(vs) { return (0, _.editShader)(vs, 'line elevation scale vs - multiply by elevation scale', "geometry.worldPosition = instanceSourcePositions;\ngeometry.worldPositionAlt = instanceTargetPositions;\nvec3 source_world = instanceSourcePositions;\nvec3 target_world = instanceTargetPositions;", "vec3 source_world = instanceSourcePositions;\nvec3 target_world = instanceTargetPositions;\nsource_world.z *= elevationScaleProps.elevationScale;\ntarget_world.z *= elevationScaleProps.elevationScale;\ngeometry.worldPosition = source_world;\ngeometry.worldPositionAlt = target_world;"); } var EnhancedLineLayer = exports["default"] = /*#__PURE__*/function (_LineLayer) { function EnhancedLineLayer() { (0, _classCallCheck2["default"])(this, EnhancedLineLayer); return _callSuper(this, EnhancedLineLayer, arguments); } (0, _inherits2["default"])(EnhancedLineLayer, _LineLayer); return (0, _createClass2["default"])(EnhancedLineLayer, [{ key: "getShaders", value: function getShaders() { var shaders = _superPropGet(EnhancedLineLayer, "getShaders", this, 3)([]); var vs = addInstanceColorShader(shaders.vs); vs = addElevationScale(vs); return _objectSpread(_objectSpread({}, shaders), {}, { vs: vs, modules: [].concat((0, _toConsumableArray2["default"])(shaders.modules || []), [elevationScaleUniforms]) }); } }, { key: "draw", value: function draw(opts) { var model = this.state.model; if (model) { var _this$props$elevation; model.shaderInputs.setProps({ elevationScale: { elevationScale: (_this$props$elevation = this.props.elevationScale) !== null && _this$props$elevation !== void 0 ? _this$props$elevation : 1 } }); } _superPropGet(EnhancedLineLayer, "draw", this, 3)([opts]); } }, { key: "initializeState", value: function initializeState() { var _this$props$colorForm; _superPropGet(EnhancedLineLayer, "initializeState", this, 3)([]); var _ref = this.state, attributeManager = _ref.attributeManager; attributeManager.addInstanced({ instanceTargetColors: { size: (_this$props$colorForm = this.props.colorFormat) === null || _this$props$colorForm === void 0 ? void 0 : _this$props$colorForm.length, type: 'unorm8', transition: true, accessor: 'getTargetColor', defaultValue: [0, 0, 0, 255] } }); } }]); }(_layers.LineLayer); EnhancedLineLayer.layerName = 'EnhancedLineLayer'; EnhancedLineLayer.defaultProps = defaultProps; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGF5ZXJzIiwicmVxdWlyZSIsIl8iLCJfY2FsbFN1cGVyIiwidCIsIm8iLCJlIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiY2FsbCIsIl9zdXBlclByb3BHZXQiLCJyIiwicCIsIl9nZXQyIiwib3duS2V5cyIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJlbGV2YXRpb25TY2FsZVVuaWZvcm1zIiwibmFtZSIsInZzIiwidW5pZm9ybVR5cGVzIiwiZWxldmF0aW9uU2NhbGUiLCJkZWZhdWx0UHJvcHMiLCJMaW5lTGF5ZXIiLCJnZXRUYXJnZXRDb2xvciIsIngiLCJjb2xvciIsImFkZEluc3RhbmNlQ29sb3JTaGFkZXIiLCJ0YXJnZXRDb2xvclZzIiwiZWRpdFNoYWRlciIsImFkZEVsZXZhdGlvblNjYWxlIiwiRW5oYW5jZWRMaW5lTGF5ZXIiLCJleHBvcnRzIiwiX0xpbmVMYXllciIsIl9jbGFzc0NhbGxDaGVjazIiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInZhbHVlIiwiZ2V0U2hhZGVycyIsInNoYWRlcnMiLCJtb2R1bGVzIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImRyYXciLCJvcHRzIiwibW9kZWwiLCJzdGF0ZSIsIl90aGlzJHByb3BzJGVsZXZhdGlvbiIsInNoYWRlcklucHV0cyIsInNldFByb3BzIiwicHJvcHMiLCJpbml0aWFsaXplU3RhdGUiLCJfdGhpcyRwcm9wcyRjb2xvckZvcm0iLCJfcmVmIiwiYXR0cmlidXRlTWFuYWdlciIsImFkZEluc3RhbmNlZCIsImluc3RhbmNlVGFyZ2V0Q29sb3JzIiwic2l6ZSIsImNvbG9yRm9ybWF0IiwidHlwZSIsInRyYW5zaXRpb24iLCJhY2Nlc3NvciIsImRlZmF1bHRWYWx1ZSIsImxheWVyTmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saW5lLWxheWVyL2xpbmUtbGF5ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtMaW5lTGF5ZXIsIExpbmVMYXllclByb3BzfSBmcm9tICdAZGVjay5nbC9sYXllcnMnO1xuaW1wb3J0IHR5cGUge0NvbG9yLCBBdHRyaWJ1dGVNYW5hZ2VyfSBmcm9tICdAZGVjay5nbC9jb3JlJztcbmltcG9ydCB7ZWRpdFNoYWRlcn0gZnJvbSAnLi4vJztcblxudHlwZSBSR0JBQ29sb3IgPSBDb2xvcjtcblxuY29uc3QgZWxldmF0aW9uU2NhbGVVbmlmb3JtcyA9IHtcbiAgbmFtZTogJ2VsZXZhdGlvblNjYWxlJyxcbiAgdnM6IGB1bmlmb3JtIGVsZXZhdGlvblNjYWxlVW5pZm9ybXMge1xuICBmbG9hdCBlbGV2YXRpb25TY2FsZTtcbn0gZWxldmF0aW9uU2NhbGVQcm9wcztcbmAsXG4gIHVuaWZvcm1UeXBlczoge1xuICAgIGVsZXZhdGlvblNjYWxlOiAnZjMyJ1xuICB9XG59O1xuXG5jb25zdCBkZWZhdWx0UHJvcHMgPSB7XG4gIC4uLkxpbmVMYXllci5kZWZhdWx0UHJvcHMsXG4gIGdldFRhcmdldENvbG9yOiB4ID0+IHguY29sb3IgfHwgWzAsIDAsIDAsIDI1NV1cbn07XG5cbmZ1bmN0aW9uIGFkZEluc3RhbmNlQ29sb3JTaGFkZXIodnMpIHtcbiAgY29uc3QgdGFyZ2V0Q29sb3JWcyA9IGVkaXRTaGFkZXIoXG4gICAgdnMsXG4gICAgJ2xpbmUgdGFyZ2V0IGNvbG9yIHZzJyxcbiAgICAnaW4gdmVjNCBpbnN0YW5jZUNvbG9yczsnLFxuICAgICdpbiB2ZWM0IGluc3RhbmNlQ29sb3JzOyBpbiB2ZWM0IGluc3RhbmNlVGFyZ2V0Q29sb3JzOydcbiAgKTtcblxuICByZXR1cm4gZWRpdFNoYWRlcihcbiAgICB0YXJnZXRDb2xvclZzLFxuICAgICdsaW5lIGNvbG9yIHZzJyxcbiAgICAndkNvbG9yID0gdmVjNChpbnN0YW5jZUNvbG9ycy5yZ2IsIGluc3RhbmNlQ29sb3JzLmEgKiBsYXllci5vcGFjaXR5KTsnLFxuICAgIGB2ZWM0IGNvbG9yID0gbWl4KGluc3RhbmNlQ29sb3JzLCBpbnN0YW5jZVRhcmdldENvbG9ycywgcG9zaXRpb25zLngpO2AgK1xuICAgICAgYHZDb2xvciA9IHZlYzQoY29sb3IucmdiLCBjb2xvci5hICogbGF5ZXIub3BhY2l0eSk7YFxuICApO1xufVxuXG5mdW5jdGlvbiBhZGRFbGV2YXRpb25TY2FsZSh2cykge1xuICByZXR1cm4gZWRpdFNoYWRlcihcbiAgICB2cyxcbiAgICAnbGluZSBlbGV2YXRpb24gc2NhbGUgdnMgLSBtdWx0aXBseSBieSBlbGV2YXRpb24gc2NhbGUnLFxuICAgIGBnZW9tZXRyeS53b3JsZFBvc2l0aW9uID0gaW5zdGFuY2VTb3VyY2VQb3NpdGlvbnM7XG5nZW9tZXRyeS53b3JsZFBvc2l0aW9uQWx0ID0gaW5zdGFuY2VUYXJnZXRQb3NpdGlvbnM7XG52ZWMzIHNvdXJjZV93b3JsZCA9IGluc3RhbmNlU291cmNlUG9zaXRpb25zO1xudmVjMyB0YXJnZXRfd29ybGQgPSBpbnN0YW5jZVRhcmdldFBvc2l0aW9ucztgLFxuICAgIGB2ZWMzIHNvdXJjZV93b3JsZCA9IGluc3RhbmNlU291cmNlUG9zaXRpb25zO1xudmVjMyB0YXJnZXRfd29ybGQgPSBpbnN0YW5jZVRhcmdldFBvc2l0aW9ucztcbnNvdXJjZV93b3JsZC56ICo9IGVsZXZhdGlvblNjYWxlUHJvcHMuZWxldmF0aW9uU2NhbGU7XG50YXJnZXRfd29ybGQueiAqPSBlbGV2YXRpb25TY2FsZVByb3BzLmVsZXZhdGlvblNjYWxlO1xuZ2VvbWV0cnkud29ybGRQb3NpdGlvbiA9IHNvdXJjZV93b3JsZDtcbmdlb21ldHJ5LndvcmxkUG9zaXRpb25BbHQgPSB0YXJnZXRfd29ybGQ7YFxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmhhbmNlZExpbmVMYXllciBleHRlbmRzIExpbmVMYXllcjxcbiAgYW55LFxuICBMaW5lTGF5ZXJQcm9wczxhbnk+ICYge2VsZXZhdGlvblNjYWxlOiBudW1iZXI7IGdldFRhcmdldENvbG9yOiBSR0JBQ29sb3J9XG4+IHtcbiAgZ2V0U2hhZGVycygpIHtcbiAgICBjb25zdCBzaGFkZXJzID0gc3VwZXIuZ2V0U2hhZGVycygpO1xuXG4gICAgbGV0IHZzID0gYWRkSW5zdGFuY2VDb2xvclNoYWRlcihzaGFkZXJzLnZzKTtcbiAgICB2cyA9IGFkZEVsZXZhdGlvblNjYWxlKHZzKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zaGFkZXJzLFxuICAgICAgdnMsXG4gICAgICBtb2R1bGVzOiBbLi4uKHNoYWRlcnMubW9kdWxlcyB8fCBbXSksIGVsZXZhdGlvblNjYWxlVW5pZm9ybXNdXG4gICAgfTtcbiAgfVxuXG4gIGRyYXcob3B0cykge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5zdGF0ZS5tb2RlbDtcbiAgICBpZiAobW9kZWwpIHtcbiAgICAgIG1vZGVsLnNoYWRlcklucHV0cy5zZXRQcm9wcyh7XG4gICAgICAgIGVsZXZhdGlvblNjYWxlOiB7XG4gICAgICAgICAgZWxldmF0aW9uU2NhbGU6IHRoaXMucHJvcHMuZWxldmF0aW9uU2NhbGUgPz8gMVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgc3VwZXIuZHJhdyhvcHRzKTtcbiAgfVxuXG4gIGluaXRpYWxpemVTdGF0ZSgpIHtcbiAgICBzdXBlci5pbml0aWFsaXplU3RhdGUoKTtcbiAgICBjb25zdCB7YXR0cmlidXRlTWFuYWdlcn0gPSB0aGlzLnN0YXRlIGFzIHthdHRyaWJ1dGVNYW5hZ2VyOiBBdHRyaWJ1dGVNYW5hZ2VyfTtcbiAgICBhdHRyaWJ1dGVNYW5hZ2VyLmFkZEluc3RhbmNlZCh7XG4gICAgICBpbnN0YW5jZVRhcmdldENvbG9yczoge1xuICAgICAgICBzaXplOiB0aGlzLnByb3BzLmNvbG9yRm9ybWF0Py5sZW5ndGgsXG4gICAgICAgIHR5cGU6ICd1bm9ybTgnLFxuICAgICAgICB0cmFuc2l0aW9uOiB0cnVlLFxuICAgICAgICBhY2Nlc3NvcjogJ2dldFRhcmdldENvbG9yJyxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBbMCwgMCwgMCwgMjU1XVxuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbkVuaGFuY2VkTGluZUxheWVyLmxheWVyTmFtZSA9ICdFbmhhbmNlZExpbmVMYXllcic7XG5FbmhhbmNlZExpbmVMYXllci5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLENBQUEsR0FBQUQsT0FBQTtBQUErQixTQUFBRSxXQUFBQyxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxXQUFBRCxDQUFBLE9BQUFFLGdCQUFBLGFBQUFGLENBQUEsT0FBQUcsMkJBQUEsYUFBQUosQ0FBQSxFQUFBSyx5QkFBQSxLQUFBQyxPQUFBLENBQUFDLFNBQUEsQ0FBQU4sQ0FBQSxFQUFBQyxDQUFBLFlBQUFDLGdCQUFBLGFBQUFILENBQUEsRUFBQVEsV0FBQSxJQUFBUCxDQUFBLENBQUFRLEtBQUEsQ0FBQVQsQ0FBQSxFQUFBRSxDQUFBO0FBQUEsU0FBQUcsMEJBQUEsY0FBQUwsQ0FBQSxJQUFBVSxPQUFBLENBQUFDLFNBQUEsQ0FBQUMsT0FB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