@deck.gl/geo-layers
Version:
deck.gl layers supporting geospatial use cases and GIS formats
347 lines (307 loc) • 12.3 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
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 _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _core = require("@deck.gl/core");
var _layers = require("@deck.gl/layers");
var _tileset2d = _interopRequireWildcard(require("./tileset-2d"));
var _utils = require("./utils");
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var defaultProps = {
data: [],
dataComparator: _utils.urlType.equals,
renderSubLayers: {
type: 'function',
value: function value(props) {
return new _layers.GeoJsonLayer(props);
},
compare: false
},
getTileData: {
type: 'function',
optional: true,
value: null,
compare: false
},
onViewportLoad: {
type: 'function',
optional: true,
value: null,
compare: false
},
onTileLoad: {
type: 'function',
value: function value(tile) {},
compare: false
},
onTileUnload: {
type: 'function',
value: function value(tile) {},
compare: false
},
onTileError: {
type: 'function',
value: function value(err) {
return console.error(err);
},
compare: false
},
extent: {
type: 'array',
optional: true,
value: null,
compare: true
},
tileSize: 512,
maxZoom: null,
minZoom: 0,
maxCacheSize: null,
maxCacheByteSize: null,
refinementStrategy: _tileset2d.STRATEGY_DEFAULT,
zRange: null,
maxRequests: 6,
zoomOffset: 0
};
var TileLayer = function (_CompositeLayer) {
(0, _inherits2.default)(TileLayer, _CompositeLayer);
var _super = _createSuper(TileLayer);
function TileLayer() {
(0, _classCallCheck2.default)(this, TileLayer);
return _super.apply(this, arguments);
}
(0, _createClass2.default)(TileLayer, [{
key: "initializeState",
value: function initializeState() {
this.state = {
tileset: null,
isLoaded: false
};
}
}, {
key: "finalizeState",
value: function finalizeState() {
var _this$state$tileset;
(_this$state$tileset = this.state.tileset) === null || _this$state$tileset === void 0 ? void 0 : _this$state$tileset.finalize();
}
}, {
key: "isLoaded",
get: function get() {
var tileset = this.state.tileset;
return tileset.selectedTiles.every(function (tile) {
return tile.isLoaded && tile.layers && tile.layers.every(function (layer) {
return layer.isLoaded;
});
});
}
}, {
key: "shouldUpdateState",
value: function shouldUpdateState(_ref) {
var changeFlags = _ref.changeFlags;
return changeFlags.somethingChanged;
}
}, {
key: "updateState",
value: function updateState(_ref2) {
var props = _ref2.props,
changeFlags = _ref2.changeFlags;
var tileset = this.state.tileset;
var propsChanged = changeFlags.propsOrDataChanged || changeFlags.updateTriggersChanged;
var dataChanged = changeFlags.dataChanged || changeFlags.updateTriggersChanged && (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getTileData);
if (!tileset) {
tileset = new _tileset2d.default(this._getTilesetOptions(props));
this.setState({
tileset: tileset
});
} else if (propsChanged) {
tileset.setOptions(this._getTilesetOptions(props));
if (dataChanged) {
tileset.reloadAll();
} else {
this.state.tileset.tiles.forEach(function (tile) {
tile.layers = null;
});
}
}
this._updateTileset();
}
}, {
key: "_getTilesetOptions",
value: function _getTilesetOptions(props) {
var tileSize = props.tileSize,
maxCacheSize = props.maxCacheSize,
maxCacheByteSize = props.maxCacheByteSize,
refinementStrategy = props.refinementStrategy,
extent = props.extent,
maxZoom = props.maxZoom,
minZoom = props.minZoom,
maxRequests = props.maxRequests,
zoomOffset = props.zoomOffset;
return {
maxCacheSize: maxCacheSize,
maxCacheByteSize: maxCacheByteSize,
maxZoom: maxZoom,
minZoom: minZoom,
tileSize: tileSize,
refinementStrategy: refinementStrategy,
extent: extent,
maxRequests: maxRequests,
zoomOffset: zoomOffset,
getTileData: this.getTileData.bind(this),
onTileLoad: this._onTileLoad.bind(this),
onTileError: this._onTileError.bind(this),
onTileUnload: this._onTileUnload.bind(this)
};
}
}, {
key: "_updateTileset",
value: function _updateTileset() {
var tileset = this.state.tileset;
var _this$props = this.props,
zRange = _this$props.zRange,
modelMatrix = _this$props.modelMatrix;
var frameNumber = tileset.update(this.context.viewport, {
zRange: zRange,
modelMatrix: modelMatrix
});
var isLoaded = tileset.isLoaded;
var loadingStateChanged = this.state.isLoaded !== isLoaded;
var tilesetChanged = this.state.frameNumber !== frameNumber;
if (isLoaded && (loadingStateChanged || tilesetChanged)) {
this._onViewportLoad();
}
if (tilesetChanged) {
this.setState({
frameNumber: frameNumber
});
}
this.state.isLoaded = isLoaded;
}
}, {
key: "_onViewportLoad",
value: function _onViewportLoad() {
var tileset = this.state.tileset;
var onViewportLoad = this.props.onViewportLoad;
if (onViewportLoad) {
onViewportLoad(tileset.selectedTiles);
}
}
}, {
key: "_onTileLoad",
value: function _onTileLoad(tile) {
this.props.onTileLoad(tile);
tile.layers = null;
this.setNeedsUpdate();
}
}, {
key: "_onTileError",
value: function _onTileError(error, tile) {
this.props.onTileError(error);
tile.layers = null;
this.setNeedsUpdate();
}
}, {
key: "_onTileUnload",
value: function _onTileUnload(tile) {
this.props.onTileUnload(tile);
}
}, {
key: "getTileData",
value: function getTileData(tile) {
var _this$props2 = this.props,
data = _this$props2.data,
getTileData = _this$props2.getTileData,
fetch = _this$props2.fetch;
var signal = tile.signal;
tile.url = (0, _utils.getURLFromTemplate)(data, tile);
if (getTileData) {
return getTileData(tile);
}
if (tile.url) {
return fetch(tile.url, {
propName: 'data',
layer: this,
signal: signal
});
}
return null;
}
}, {
key: "renderSubLayers",
value: function renderSubLayers(props) {
return this.props.renderSubLayers(props);
}
}, {
key: "getSubLayerPropsByTile",
value: function getSubLayerPropsByTile(tile) {
return null;
}
}, {
key: "getPickingInfo",
value: function getPickingInfo(_ref3) {
var info = _ref3.info,
sourceLayer = _ref3.sourceLayer;
info.tile = sourceLayer.props.tile;
return info;
}
}, {
key: "_updateAutoHighlight",
value: function _updateAutoHighlight(info) {
if (info.sourceLayer) {
info.sourceLayer.updateAutoHighlight(info);
}
}
}, {
key: "renderLayers",
value: function renderLayers() {
var _this = this;
return this.state.tileset.tiles.map(function (tile) {
var subLayerProps = _this.getSubLayerPropsByTile(tile);
if (!tile.isLoaded && !tile.content) {} else if (!tile.layers) {
var layers = _this.renderSubLayers(_objectSpread(_objectSpread({}, _this.props), {}, {
id: "".concat(_this.id, "-").concat(tile.x, "-").concat(tile.y, "-").concat(tile.z),
data: tile.content,
_offset: 0,
tile: tile
}));
tile.layers = (0, _core._flatten)(layers, Boolean).map(function (layer) {
return layer.clone(_objectSpread({
tile: tile
}, subLayerProps));
});
} else if (subLayerProps && tile.layers[0] && Object.keys(subLayerProps).some(function (propName) {
return tile.layers[0].props[propName] !== subLayerProps[propName];
})) {
tile.layers = tile.layers.map(function (layer) {
return layer.clone(subLayerProps);
});
}
return tile.layers;
});
}
}, {
key: "filterSubLayer",
value: function filterSubLayer(_ref4) {
var layer = _ref4.layer;
return layer.props.tile.isVisible;
}
}]);
return TileLayer;
}(_core.CompositeLayer);
exports.default = TileLayer;
TileLayer.layerName = 'TileLayer';
TileLayer.defaultProps = defaultProps;
//# sourceMappingURL=tile-layer.js.map