UNPKG

kepler.gl

Version:

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

104 lines (102 loc) 14.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.MVTLayer = void 0; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _readOnlyError2 = _interopRequireDefault(require("@babel/runtime/helpers/readOnlyError")); 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 _typed = require("@deck.gl/extensions/typed"); var _typed2 = require("@deck.gl/geo-layers/typed"); 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 /* Custom MVT layer that works with MVTSource and PMTileSource. Changes: - getTileData: handles props.getTileData. - renderSubLayers: removed coordinates logic present in original MVTLayer:renderSubLayers. - renderSubLayers: set clipBounds. - loaders.gl & older deck.gl: geojson-table: data = data.features */ // @ts-expect-error need to patch private methods because of newer loaders.gl var MVTLayer = exports.MVTLayer = /*#__PURE__*/function (_MVTLayer2) { function MVTLayer() { (0, _classCallCheck2["default"])(this, MVTLayer); return _callSuper(this, MVTLayer, arguments); } (0, _inherits2["default"])(MVTLayer, _MVTLayer2); return (0, _createClass2["default"])(MVTLayer, [{ key: "getTileData", value: function getTileData(tile) { var getTileData = this.props.getTileData; var data = this.state.data; tile.url = typeof data === 'string' || Array.isArray(data) ? (0, _typed2._getURLFromTemplate)(data, tile) : null; if (getTileData) { return getTileData(tile); } return null; } }, { key: "renderSubLayers", value: function renderSubLayers(props) { var boundingBox = props.tile.boundingBox; props.autoHighlight = true; if (boundingBox) { props.clipBounds = [].concat((0, _toConsumableArray2["default"])(boundingBox[0]), (0, _toConsumableArray2["default"])(boundingBox[1])); props.extensions = [].concat((0, _toConsumableArray2["default"])(props.extensions || []), [new _typed.ClipExtension()]); } return this.props.renderSubLayers(props); } }, { key: "getHighlightedObjectIndex", value: function getHighlightedObjectIndex(tile) { var _data; var _this$state = this.state, hoveredFeatureId = _this$state.hoveredFeatureId, hoveredFeatureLayerName = _this$state.hoveredFeatureLayerName; var _this$props = this.props, uniqueIdProperty = _this$props.uniqueIdProperty, highlightedFeatureId = _this$props.highlightedFeatureId; var data = tile.content; data = ((_data = data) === null || _data === void 0 ? void 0 : _data.shape) === 'geojson-table' ? data.features : data; var isHighlighted = isFeatureIdDefined(highlightedFeatureId); var isFeatureIdPresent = isFeatureIdDefined(hoveredFeatureId) || isHighlighted; if (!isFeatureIdPresent) { return -1; } var featureIdToHighlight = isHighlighted ? highlightedFeatureId : hoveredFeatureId; // Iterable data if (Array.isArray(data)) { return data.findIndex(function (feature) { var isMatchingId = getFeatureUniqueId(feature, uniqueIdProperty) === featureIdToHighlight; var isMatchingLayer = isHighlighted || getFeatureLayerName(feature) === hoveredFeatureLayerName; return isMatchingId && isMatchingLayer; }); } return -1; } }]); }(_typed2.MVTLayer); function getFeatureUniqueId(feature, uniqueIdProperty) { if (feature.properties && uniqueIdProperty) { return feature.properties[uniqueIdProperty]; } if ('id' in feature) { return feature.id; } return undefined; } function getFeatureLayerName(feature) { var _feature$properties; return ((_feature$properties = feature.properties) === null || _feature$properties === void 0 ? void 0 : _feature$properties.layerName) || null; } function isFeatureIdDefined(value) { return value !== undefined && value !== null && value !== ''; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZWQiLCJyZXF1aXJlIiwiX3R5cGVkMiIsIl9jYWxsU3VwZXIiLCJ0IiwibyIsImUiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsImFwcGx5IiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJjYWxsIiwiTVZUTGF5ZXIiLCJleHBvcnRzIiwiX01WVExheWVyMiIsIl9jbGFzc0NhbGxDaGVjazIiLCJhcmd1bWVudHMiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInZhbHVlIiwiZ2V0VGlsZURhdGEiLCJ0aWxlIiwicHJvcHMiLCJkYXRhIiwic3RhdGUiLCJ1cmwiLCJBcnJheSIsImlzQXJyYXkiLCJfZ2V0VVJMRnJvbVRlbXBsYXRlIiwicmVuZGVyU3ViTGF5ZXJzIiwiYm91bmRpbmdCb3giLCJhdXRvSGlnaGxpZ2h0IiwiY2xpcEJvdW5kcyIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJleHRlbnNpb25zIiwiQ2xpcEV4dGVuc2lvbiIsImdldEhpZ2hsaWdodGVkT2JqZWN0SW5kZXgiLCJfZGF0YSIsIl90aGlzJHN0YXRlIiwiaG92ZXJlZEZlYXR1cmVJZCIsImhvdmVyZWRGZWF0dXJlTGF5ZXJOYW1lIiwiX3RoaXMkcHJvcHMiLCJ1bmlxdWVJZFByb3BlcnR5IiwiaGlnaGxpZ2h0ZWRGZWF0dXJlSWQiLCJjb250ZW50Iiwic2hhcGUiLCJmZWF0dXJlcyIsImlzSGlnaGxpZ2h0ZWQiLCJpc0ZlYXR1cmVJZERlZmluZWQiLCJpc0ZlYXR1cmVJZFByZXNlbnQiLCJmZWF0dXJlSWRUb0hpZ2hsaWdodCIsImZpbmRJbmRleCIsImZlYXR1cmUiLCJpc01hdGNoaW5nSWQiLCJnZXRGZWF0dXJlVW5pcXVlSWQiLCJpc01hdGNoaW5nTGF5ZXIiLCJnZXRGZWF0dXJlTGF5ZXJOYW1lIiwiX01WVExheWVyIiwicHJvcGVydGllcyIsImlkIiwidW5kZWZpbmVkIiwiX2ZlYXR1cmUkcHJvcGVydGllcyIsImxheWVyTmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZWN0b3ItdGlsZS9tdnQtbGF5ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtMYXllciwgTGF5ZXJzTGlzdH0gZnJvbSAnQGRlY2suZ2wvY29yZS90eXBlZCc7XG5pbXBvcnQge0NsaXBFeHRlbnNpb259IGZyb20gJ0BkZWNrLmdsL2V4dGVuc2lvbnMvdHlwZWQnO1xuaW1wb3J0IHtcbiAgTVZUTGF5ZXIgYXMgX01WVExheWVyLFxuICBUaWxlTGF5ZXIsXG4gIF9nZXRVUkxGcm9tVGVtcGxhdGUsXG4gIF9UaWxlTG9hZFByb3BzLFxuICBfVGlsZTJESGVhZGVyXG59IGZyb20gJ0BkZWNrLmdsL2dlby1sYXllcnMvdHlwZWQnO1xuXG4vKlxuICBDdXN0b20gTVZUIGxheWVyIHRoYXQgd29ya3Mgd2l0aCBNVlRTb3VyY2UgYW5kIFBNVGlsZVNvdXJjZS5cbiAgQ2hhbmdlczpcbiAgICAtIGdldFRpbGVEYXRhOiBoYW5kbGVzIHByb3BzLmdldFRpbGVEYXRhLlxuICAgIC0gcmVuZGVyU3ViTGF5ZXJzOiByZW1vdmVkIGNvb3JkaW5hdGVzIGxvZ2ljIHByZXNlbnQgaW4gb3JpZ2luYWwgTVZUTGF5ZXI6cmVuZGVyU3ViTGF5ZXJzLlxuICAgIC0gcmVuZGVyU3ViTGF5ZXJzOiBzZXQgY2xpcEJvdW5kcy5cbiAgICAtIGxvYWRlcnMuZ2wgJiBvbGRlciBkZWNrLmdsOiBnZW9qc29uLXRhYmxlOiBkYXRhID0gZGF0YS5mZWF0dXJlc1xuKi9cblxuLy8gQHRzLWV4cGVjdC1lcnJvciBuZWVkIHRvIHBhdGNoIHByaXZhdGUgbWV0aG9kcyBiZWNhdXNlIG9mIG5ld2VyIGxvYWRlcnMuZ2xcbmV4cG9ydCBjbGFzcyBNVlRMYXllcjxFeHRyYVByb3BzPiBleHRlbmRzIF9NVlRMYXllcjxFeHRyYVByb3BzPiB7XG4gIGdldFRpbGVEYXRhKHRpbGU6IF9UaWxlTG9hZFByb3BzKTogYW55IHtcbiAgICBjb25zdCB7Z2V0VGlsZURhdGF9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7ZGF0YX0gPSB0aGlzLnN0YXRlO1xuXG4gICAgdGlsZS51cmwgPVxuICAgICAgdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnIHx8IEFycmF5LmlzQXJyYXkoZGF0YSkgPyBfZ2V0VVJMRnJvbVRlbXBsYXRlKGRhdGEsIHRpbGUpIDogbnVsbDtcbiAgICBpZiAoZ2V0VGlsZURhdGEpIHtcbiAgICAgIHJldHVybiBnZXRUaWxlRGF0YSh0aWxlKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZW5kZXJTdWJMYXllcnMoXG4gICAgcHJvcHM6IFRpbGVMYXllclsncHJvcHMnXSAmIHtcbiAgICAgIGlkOiBzdHJpbmc7XG4gICAgICBkYXRhOiBhbnk7XG4gICAgICBfb2Zmc2V0OiBudW1iZXI7XG4gICAgICB0aWxlOiBhbnk7XG4gICAgICBjbGlwQm91bmRzPzogbnVtYmVyW107XG4gICAgfVxuICApOiBMYXllciB8IG51bGwgfCBMYXllcnNMaXN0IHtcbiAgICBjb25zdCB7Ym91bmRpbmdCb3h9ID0gcHJvcHMudGlsZTtcblxuICAgIHByb3BzLmF1dG9IaWdobGlnaHQgPSB0cnVlO1xuXG4gICAgaWYgKGJvdW5kaW5nQm94KSB7XG4gICAgICBwcm9wcy5jbGlwQm91bmRzID0gWy4uLmJvdW5kaW5nQm94WzBdLCAuLi5ib3VuZGluZ0JveFsxXV07XG4gICAgICBwcm9wcy5leHRlbnNpb25zID0gWy4uLihwcm9wcy5leHRlbnNpb25zIHx8IFtdKSwgbmV3IENsaXBFeHRlbnNpb24oKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucHJvcHMucmVuZGVyU3ViTGF5ZXJzKHByb3BzKTtcbiAgfVxuXG4gIGdldEhpZ2hsaWdodGVkT2JqZWN0SW5kZXgodGlsZTogX1RpbGUyREhlYWRlcik6IG51bWJlciB7XG4gICAgY29uc3Qge2hvdmVyZWRGZWF0dXJlSWQsIGhvdmVyZWRGZWF0dXJlTGF5ZXJOYW1lfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge3VuaXF1ZUlkUHJvcGVydHksIGhpZ2hsaWdodGVkRmVhdHVyZUlkfSA9IHRoaXMucHJvcHM7XG4gICAgbGV0IGRhdGEgPSB0aWxlLmNvbnRlbnQ7XG4gICAgZGF0YSA9IGRhdGE/LnNoYXBlID09PSAnZ2VvanNvbi10YWJsZScgPyBkYXRhLmZlYXR1cmVzIDogZGF0YTtcblxuICAgIGNvbnN0IGlzSGlnaGxpZ2h0ZWQgPSBpc0ZlYXR1cmVJZERlZmluZWQoaGlnaGxpZ2h0ZWRGZWF0dXJlSWQpO1xuICAgIGNvbnN0IGlzRmVhdHVyZUlkUHJlc2VudCA9IGlzRmVhdHVyZUlkRGVmaW5lZChob3ZlcmVkRmVhdHVyZUlkKSB8fCBpc0hpZ2hsaWdodGVkO1xuXG4gICAgaWYgKCFpc0ZlYXR1cmVJZFByZXNlbnQpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICBjb25zdCBmZWF0dXJlSWRUb0hpZ2hsaWdodCA9IGlzSGlnaGxpZ2h0ZWQgPyBoaWdobGlnaHRlZEZlYXR1cmVJZCA6IGhvdmVyZWRGZWF0dXJlSWQ7XG5cbiAgICAvLyBJdGVyYWJsZSBkYXRhXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmZpbmRJbmRleChmZWF0dXJlID0+IHtcbiAgICAgICAgY29uc3QgaXNNYXRjaGluZ0lkID0gZ2V0RmVhdHVyZVVuaXF1ZUlkKGZlYXR1cmUsIHVuaXF1ZUlkUHJvcGVydHkpID09PSBmZWF0dXJlSWRUb0hpZ2hsaWdodDtcbiAgICAgICAgY29uc3QgaXNNYXRjaGluZ0xheWVyID1cbiAgICAgICAgICBpc0hpZ2hsaWdodGVkIHx8IGdldEZlYXR1cmVMYXllck5hbWUoZmVhdHVyZSkgPT09IGhvdmVyZWRGZWF0dXJlTGF5ZXJOYW1lO1xuICAgICAgICByZXR1cm4gaXNNYXRjaGluZ0lkICYmIGlzTWF0Y2hpbmdMYXllcjtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiAtMTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRGZWF0dXJlVW5pcXVlSWQoZmVhdHVyZSwgdW5pcXVlSWRQcm9wZXJ0eTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gIGlmIChmZWF0dXJlLnByb3BlcnRpZXMgJiYgdW5pcXVlSWRQcm9wZXJ0eSkge1xuICAgIHJldHVybiBmZWF0dXJlLnByb3BlcnRpZXNbdW5pcXVlSWRQcm9wZXJ0eV07XG4gIH1cblxuICBpZiAoJ2lkJyBpbiBmZWF0dXJlKSB7XG4gICAgcmV0dXJuIGZlYXR1cmUuaWQ7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRGZWF0dXJlTGF5ZXJOYW1lKGZlYXR1cmUpOiBzdHJpbmcgfCBudWxsIHtcbiAgcmV0dXJuIGZlYXR1cmUucHJvcGVydGllcz8ubGF5ZXJOYW1lIHx8IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzRmVhdHVyZUlkRGVmaW5lZCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gJyc7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBSUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBTW1DLFNBQUFFLFdBQUFDLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFdBQUFELENBQUEsT0FBQUUsZ0JBQUEsYUFBQUYsQ0FBQSxPQUFBRywyQkFBQSxhQUFBSixDQUFBLEVBQUFLLHlCQUFBLEtBQUFDLE9BQUEsQ0FBQUMsU0FBQSxDQUFBTixDQUFBLEVBQUFDLENBQUEsWUFBQUMsZ0JBQUEsYUFB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QUFhLEdBQUdDLGtCQUFrQixDQUFDTCxvQkFBb0IsQ0FBQztNQUM5RCxJQUFNTSxrQkFBa0IsR0FBR0Qsa0JBQWtCLENBQUNULGdCQUFnQixDQUFDLElBQUlRLGFBQWE7TUFFaEYsSUFBSSxDQUFDRSxrQkFBa0IsRUFBRTtRQUN2QixPQUFPLENBQUMsQ0FBQztNQUNYO01BRUEsSUFBTUMsb0JBQW9CLEdBQUdILGFBQWEsR0FBR0osb0JBQW9CLEdBQUdKLGdCQUFnQjs7TUFFcEY7TUFDQSxJQUFJZCxLQUFLLENBQUNDLE9BQU8sQ0FBQ0osSUFBSSxDQUFDLEVBQUU7UUFDdkIsT0FBT0EsSUFBSSxDQUFDNkIsU0FBUyxDQUFDLFVBQUFDLE9BQU8sRUFBSTtVQUMvQixJQUFNQyxZQUFZLEdBQUdDLGtCQUFrQixDQUFDRixPQUFPLEVBQUVWLGdCQUFnQixDQUFDLEtBQUtRLG9CQUFvQjtVQUMzRixJQUFNSyxlQUFlLEdBQ25CUixhQUFhLElBQUlTLG1CQUFtQixDQUFDSixPQUFPLENBQUMsS0FBS1osdUJBQXVCO1VBQzNFLE9BQU9hLFlBQVksSUFBSUUsZUFBZTtRQUN4QyxDQUFDLENBQUM7TUFDSjtNQUVBLE9BQU8sQ0FBQyxDQUFDO0lBQ1g7RUFBQztBQUFBLEVBNUR1Q0UsZ0JBQVM7QUErRG5ELFNBQVNILGtCQUFrQkEsQ0FBQ0YsT0FBTyxFQUFFVixnQkFBb0MsRUFBRTtFQUN6RSxJQUFJVSxPQUFPLENBQUNNLFVBQVUsSUFBSWhCLGdCQUFnQixFQUFFO0lBQzFDLE9BQU9VLE9BQU8sQ0FBQ00sVUFBVSxDQUFDaEIsZ0JBQWdCLENBQUM7RUFDN0M7RUFFQSxJQUFJLElBQUksSUFBSVUsT0FBTyxFQUFFO0lBQ25CLE9BQU9BLE9BQU8sQ0FBQ08sRUFBRTtFQUNuQjtFQUVBLE9BQU9DLFNBQVM7QUFDbEI7QUFFQSxTQUFTSixtQkFBbUJBLENBQUNKLE9BQU8sRUFBaUI7RUFBQSxJQUFBUyxtQkFBQTtFQUNuRCxPQUFPLEVBQUFBLG1CQUFBLEdBQUFULE9BQU8sQ0FBQ00sVUFBVSxjQUFBRyxtQkFBQSx1QkFBbEJBLG1CQUFBLENBQW9CQyxTQUFTLEtBQUksSUFBSTtBQUM5QztBQUVBLFNBQVNkLGtCQUFrQkEsQ0FBQzlCLEtBQWMsRUFBVztFQUNuRCxPQUFPQSxLQUFLLEtBQUswQyxTQUFTLElBQUkxQyxLQUFLLEtBQUssSUFBSSxJQUFJQSxLQUFLLEtBQUssRUFBRTtBQUM5RCIsImlnbm9yZUxpc3QiOltdfQ==