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
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 _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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