UNPKG

kepler.gl

Version:

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

87 lines (86 loc) 16.1 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; 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 _constants = _interopRequireDefault(require("@luma.gl/constants")); 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 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', 'attribute vec4 instanceColors;', 'attribute vec4 instanceColors; attribute vec4 instanceTargetColors;'); return (0, _.editShader)(targetColorVs, 'line color vs', 'vColor = vec4(instanceColors.rgb, instanceColors.a * opacity);', "vec4 color = mix(instanceColors, instanceTargetColors, positions.x);" + "vColor = vec4(color.rgb, color.a * opacity);"); } function addElevationScale(vs) { var elevationVs = (0, _.editShader)(vs, 'line elevation scale 1 vs - inject elevation scale', 'uniform float widthMaxPixels;', "uniform float widthMaxPixels;\n uniform float elevationScale;"); elevationVs = (0, _.editShader)(elevationVs, 'line elevation scale 2 vs - multiply by elevation scale', "geometry.worldPosition = instanceSourcePositions;\n geometry.worldPositionAlt = instanceTargetPositions;", "vec3 source_world = instanceSourcePositions;\n vec3 target_world = instanceTargetPositions;\n source_world.z *= elevationScale;\n target_world.z *= elevationScale;\n \n geometry.worldPosition = source_world;\n geometry.worldPositionAlt = target_world;"); elevationVs = (0, _.editShader)(elevationVs, 'line elevation scale 3 vs', "vec3 source_world = instanceSourcePositions;\n vec3 target_world = instanceTargetPositions;", ''); return elevationVs; } 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 }); } }, { key: "draw", value: function draw(_ref) { var uniforms = _ref.uniforms; var elevationScale = this.props.elevationScale; _superPropGet(EnhancedLineLayer, "draw", this, 3)([{ uniforms: _objectSpread(_objectSpread({}, uniforms), {}, { elevationScale: elevationScale }) }]); } }, { key: "initializeState", value: function initializeState() { var _this$props$colorForm; _superPropGet(EnhancedLineLayer, "initializeState", this, 3)([undefined]); var attributeManager = this.state.attributeManager; attributeManager.addInstanced({ instanceTargetColors: { size: (_this$props$colorForm = this.props.colorFormat) === null || _this$props$colorForm === void 0 ? void 0 : _this$props$colorForm.length, type: _constants["default"].UNSIGNED_BYTE, normalized: true, 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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGF5ZXJzIiwicmVxdWlyZSIsIl9jb25zdGFudHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiXyIsIl9jYWxsU3VwZXIiLCJ0IiwibyIsImUiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsImFwcGx5IiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJjYWxsIiwiX3N1cGVyUHJvcEdldCIsInIiLCJwIiwiX2dldDIiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsImRlZmF1bHRQcm9wcyIsIkxpbmVMYXllciIsImdldFRhcmdldENvbG9yIiwieCIsImNvbG9yIiwiYWRkSW5zdGFuY2VDb2xvclNoYWRlciIsInZzIiwidGFyZ2V0Q29sb3JWcyIsImVkaXRTaGFkZXIiLCJhZGRFbGV2YXRpb25TY2FsZSIsImVsZXZhdGlvblZzIiwiRW5oYW5jZWRMaW5lTGF5ZXIiLCJleHBvcnRzIiwiX0xpbmVMYXllciIsIl9jbGFzc0NhbGxDaGVjazIiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInZhbHVlIiwiZ2V0U2hhZGVycyIsInNoYWRlcnMiLCJkcmF3IiwiX3JlZiIsInVuaWZvcm1zIiwiZWxldmF0aW9uU2NhbGUiLCJwcm9wcyIsImluaXRpYWxpemVTdGF0ZSIsIl90aGlzJHByb3BzJGNvbG9yRm9ybSIsInVuZGVmaW5lZCIsImF0dHJpYnV0ZU1hbmFnZXIiLCJzdGF0ZSIsImFkZEluc3RhbmNlZCIsImluc3RhbmNlVGFyZ2V0Q29sb3JzIiwic2l6ZSIsImNvbG9yRm9ybWF0IiwidHlwZSIsIkdMIiwiVU5TSUdORURfQllURSIsIm5vcm1hbGl6ZWQiLCJ0cmFuc2l0aW9uIiwiYWNjZXNzb3IiLCJkZWZhdWx0VmFsdWUiLCJsYXllck5hbWUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbGluZS1sYXllci9saW5lLWxheWVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7TGluZUxheWVyLCBMaW5lTGF5ZXJQcm9wc30gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzJztcbmltcG9ydCBHTCBmcm9tICdAbHVtYS5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtSR0JBQ29sb3J9IGZyb20gJ2RlY2suZ2wnO1xuaW1wb3J0IHtlZGl0U2hhZGVyfSBmcm9tICcuLi8nO1xuXG5jb25zdCBkZWZhdWx0UHJvcHMgPSB7XG4gIC4uLkxpbmVMYXllci5kZWZhdWx0UHJvcHMsXG4gIGdldFRhcmdldENvbG9yOiB4ID0+IHguY29sb3IgfHwgWzAsIDAsIDAsIDI1NV1cbn07XG5cbmZ1bmN0aW9uIGFkZEluc3RhbmNlQ29sb3JTaGFkZXIodnMpIHtcbiAgY29uc3QgdGFyZ2V0Q29sb3JWcyA9IGVkaXRTaGFkZXIoXG4gICAgdnMsXG4gICAgJ2xpbmUgdGFyZ2V0IGNvbG9yIHZzJyxcbiAgICAnYXR0cmlidXRlIHZlYzQgaW5zdGFuY2VDb2xvcnM7JyxcbiAgICAnYXR0cmlidXRlIHZlYzQgaW5zdGFuY2VDb2xvcnM7IGF0dHJpYnV0ZSB2ZWM0IGluc3RhbmNlVGFyZ2V0Q29sb3JzOydcbiAgKTtcblxuICByZXR1cm4gZWRpdFNoYWRlcihcbiAgICB0YXJnZXRDb2xvclZzLFxuICAgICdsaW5lIGNvbG9yIHZzJyxcbiAgICAndkNvbG9yID0gdmVjNChpbnN0YW5jZUNvbG9ycy5yZ2IsIGluc3RhbmNlQ29sb3JzLmEgKiBvcGFjaXR5KTsnLFxuICAgIGB2ZWM0IGNvbG9yID0gbWl4KGluc3RhbmNlQ29sb3JzLCBpbnN0YW5jZVRhcmdldENvbG9ycywgcG9zaXRpb25zLngpO2AgK1xuICAgICAgYHZDb2xvciA9IHZlYzQoY29sb3IucmdiLCBjb2xvci5hICogb3BhY2l0eSk7YFxuICApO1xufVxuXG5mdW5jdGlvbiBhZGRFbGV2YXRpb25TY2FsZSh2cykge1xuICBsZXQgZWxldmF0aW9uVnMgPSBlZGl0U2hhZGVyKFxuICAgIHZzLFxuICAgICdsaW5lIGVsZXZhdGlvbiBzY2FsZSAxIHZzIC0gaW5qZWN0IGVsZXZhdGlvbiBzY2FsZScsXG4gICAgJ3VuaWZvcm0gZmxvYXQgd2lkdGhNYXhQaXhlbHM7JyxcbiAgICBgdW5pZm9ybSBmbG9hdCB3aWR0aE1heFBpeGVscztcbiAgICAgdW5pZm9ybSBmbG9hdCBlbGV2YXRpb25TY2FsZTtgXG4gICk7XG5cbiAgZWxldmF0aW9uVnMgPSBlZGl0U2hhZGVyKFxuICAgIGVsZXZhdGlvblZzLFxuICAgICdsaW5lIGVsZXZhdGlvbiBzY2FsZSAyIHZzIC0gbXVsdGlwbHkgYnkgZWxldmF0aW9uIHNjYWxlJyxcbiAgICBgZ2VvbWV0cnkud29ybGRQb3NpdGlvbiA9IGluc3RhbmNlU291cmNlUG9zaXRpb25zO1xuICBnZW9tZXRyeS53b3JsZFBvc2l0aW9uQWx0ID0gaW5zdGFuY2VUYXJnZXRQb3NpdGlvbnM7YCxcbiAgICBgdmVjMyBzb3VyY2Vfd29ybGQgPSBpbnN0YW5jZVNvdXJjZVBvc2l0aW9ucztcbiAgICAgdmVjMyB0YXJnZXRfd29ybGQgPSBpbnN0YW5jZVRhcmdldFBvc2l0aW9ucztcbiAgICAgc291cmNlX3dvcmxkLnogKj0gZWxldmF0aW9uU2NhbGU7XG4gICAgIHRhcmdldF93b3JsZC56ICo9IGVsZXZhdGlvblNjYWxlO1xuICAgICBcbiAgICAgZ2VvbWV0cnkud29ybGRQb3NpdGlvbiA9IHNvdXJjZV93b3JsZDtcbiAgICAgZ2VvbWV0cnkud29ybGRQb3NpdGlvbkFsdCA9IHRhcmdldF93b3JsZDtgXG4gICk7XG5cbiAgZWxldmF0aW9uVnMgPSBlZGl0U2hhZGVyKFxuICAgIGVsZXZhdGlvblZzLFxuICAgICdsaW5lIGVsZXZhdGlvbiBzY2FsZSAzIHZzJyxcbiAgICBgdmVjMyBzb3VyY2Vfd29ybGQgPSBpbnN0YW5jZVNvdXJjZVBvc2l0aW9ucztcbiAgdmVjMyB0YXJnZXRfd29ybGQgPSBpbnN0YW5jZVRhcmdldFBvc2l0aW9ucztgLFxuICAgICcnXG4gICk7XG5cbiAgcmV0dXJuIGVsZXZhdGlvblZzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmhhbmNlZExpbmVMYXllciBleHRlbmRzIExpbmVMYXllcjxcbiAgYW55LFxuICBMaW5lTGF5ZXJQcm9wczxhbnk+ICYge2VsZXZhdGlvblNjYWxlOiBudW1iZXI7IGdldFRhcmdldENvbG9yOiBSR0JBQ29sb3J9XG4+IHtcbiAgZ2V0U2hhZGVycygpIHtcbiAgICBjb25zdCBzaGFkZXJzID0gc3VwZXIuZ2V0U2hhZGVycygpO1xuXG4gICAgbGV0IHZzID0gYWRkSW5zdGFuY2VDb2xvclNoYWRlcihzaGFkZXJzLnZzKTtcbiAgICB2cyA9IGFkZEVsZXZhdGlvblNjYWxlKHZzKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zaGFkZXJzLFxuICAgICAgdnNcbiAgICB9O1xuICB9XG5cbiAgZHJhdyh7dW5pZm9ybXN9KSB7XG4gICAgY29uc3Qge2VsZXZhdGlvblNjYWxlfSA9IHRoaXMucHJvcHM7XG4gICAgc3VwZXIuZHJhdyh7dW5pZm9ybXM6IHsuLi51bmlmb3JtcywgZWxldmF0aW9uU2NhbGV9fSk7XG4gIH1cblxuICBpbml0aWFsaXplU3RhdGUoKSB7XG4gICAgc3VwZXIuaW5pdGlhbGl6ZVN0YXRlKHVuZGVmaW5lZCk7XG4gICAgY29uc3Qge2F0dHJpYnV0ZU1hbmFnZXJ9ID0gdGhpcy5zdGF0ZTtcbiAgICBhdHRyaWJ1dGVNYW5hZ2VyLmFkZEluc3RhbmNlZCh7XG4gICAgICBpbnN0YW5jZVRhcmdldENvbG9yczoge1xuICAgICAgICBzaXplOiB0aGlzLnByb3BzLmNvbG9yRm9ybWF0Py5sZW5ndGgsXG4gICAgICAgIHR5cGU6IEdMLlVOU0lHTkVEX0JZVEUsXG4gICAgICAgIG5vcm1hbGl6ZWQ6IHRydWUsXG4gICAgICAgIHRyYW5zaXRpb246IHRydWUsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0VGFyZ2V0Q29sb3InLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IFswLCAwLCAwLCAyNTVdXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuRW5oYW5jZWRMaW5lTGF5ZXIubGF5ZXJOYW1lID0gJ0VuaGFuY2VkTGluZUxheWVyJztcbkVuaGFuY2VkTGluZUxheWVyLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFBRyxDQUFBLEdBQUFILE9BQUE7QUFBK0IsU0FBQUksV0FBQUMsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsV0FBQUQsQ0FBQSxPQUFBRSxnQkFBQSxhQUFBRixDQUFBLE9BQUFHLDJCQUFBLGFBQUFKLENBQUEsRUFBQUsseUJBQUEsS0FBQUMsT0FBQSxDQUFBQyxTQUFBLENBQUFOLENBQUEsRUFBQUMsQ0FBQSxZQUFBQyxnQkFBQSxhQUFBSCxDQUFBLEVBQUFRLFdBQUEsSUFBQVAsQ0FBQSxDQUFBUSxLQUFBLENBQUFULENBQUEsRUFBQUUsQ0FBQTtBQUFBLFNBQUFHLDBCQUFBLGNBQUFMLENBQUEsSUFBQVUsT0FBQSxDQUFBQyxTQUFBLENBQUFDLE9BQUEsQ0FBQUMsSUFBQSxDQUFBUCxPQUFBLENBQUFDLFNBQUEsQ0FBQUcsT0FBQSxp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