@deck.gl/geo-layers 8.9.33 → 8.9.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/dist.dev.js +21 -14
  2. package/dist/es5/mvt-layer/find-index-binary.js.map +1 -1
  3. package/dist/es5/mvt-layer/mvt-layer.js +41 -24
  4. package/dist/es5/mvt-layer/mvt-layer.js.map +1 -1
  5. package/dist/es5/terrain-layer/terrain-layer.js +4 -0
  6. package/dist/es5/terrain-layer/terrain-layer.js.map +1 -1
  7. package/dist/es5/tile-layer/tile-layer.js +19 -8
  8. package/dist/es5/tile-layer/tile-layer.js.map +1 -1
  9. package/dist/es5/tileset-2d/tile-2d-header.js.map +1 -1
  10. package/dist/es5/tileset-2d/tile-2d-traversal.js.map +1 -1
  11. package/dist/es5/tileset-2d/tileset-2d.js +6 -2
  12. package/dist/es5/tileset-2d/tileset-2d.js.map +1 -1
  13. package/dist/es5/tileset-2d/utils.js +1 -1
  14. package/dist/es5/tileset-2d/utils.js.map +1 -1
  15. package/dist/es5/trips-layer/trips-layer.js.map +1 -1
  16. package/dist/es5/wms-layer/wms-layer.js +7 -5
  17. package/dist/es5/wms-layer/wms-layer.js.map +1 -1
  18. package/dist/esm/mvt-layer/find-index-binary.js.map +1 -1
  19. package/dist/esm/mvt-layer/mvt-layer.js +19 -9
  20. package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
  21. package/dist/esm/terrain-layer/terrain-layer.js +4 -0
  22. package/dist/esm/terrain-layer/terrain-layer.js.map +1 -1
  23. package/dist/esm/tile-layer/tile-layer.js +9 -5
  24. package/dist/esm/tile-layer/tile-layer.js.map +1 -1
  25. package/dist/esm/tileset-2d/tile-2d-header.js.map +1 -1
  26. package/dist/esm/tileset-2d/tile-2d-traversal.js.map +1 -1
  27. package/dist/esm/tileset-2d/tileset-2d.js +6 -2
  28. package/dist/esm/tileset-2d/tileset-2d.js.map +1 -1
  29. package/dist/esm/tileset-2d/utils.js +1 -1
  30. package/dist/esm/tileset-2d/utils.js.map +1 -1
  31. package/dist/esm/trips-layer/trips-layer.js.map +1 -1
  32. package/dist/esm/wms-layer/wms-layer.js +3 -1
  33. package/dist/esm/wms-layer/wms-layer.js.map +1 -1
  34. package/dist.min.js +37 -37
  35. package/package.json +2 -2
  36. package/src/mvt-layer/find-index-binary.ts +6 -9
  37. package/src/mvt-layer/mvt-layer.ts +25 -12
  38. package/src/terrain-layer/terrain-layer.ts +5 -1
  39. package/src/tile-layer/tile-layer.ts +15 -7
  40. package/src/tileset-2d/tile-2d-header.ts +2 -1
  41. package/src/tileset-2d/tile-2d-traversal.ts +1 -1
  42. package/src/tileset-2d/tileset-2d.ts +9 -5
  43. package/src/tileset-2d/utils.ts +3 -3
  44. package/src/trips-layer/trips-layer.ts +1 -1
  45. package/src/wms-layer/wms-layer.ts +1 -1
  46. package/typed/mvt-layer/find-index-binary.d.ts +4 -5
  47. package/typed/mvt-layer/find-index-binary.d.ts.map +1 -1
  48. package/typed/mvt-layer/mvt-layer.d.ts +11 -2
  49. package/typed/mvt-layer/mvt-layer.d.ts.map +1 -1
  50. package/typed/terrain-layer/terrain-layer.d.ts +1 -1
  51. package/typed/terrain-layer/terrain-layer.d.ts.map +1 -1
  52. package/typed/tile-layer/tile-layer.d.ts +6 -1
  53. package/typed/tile-layer/tile-layer.d.ts.map +1 -1
  54. package/typed/tileset-2d/tile-2d-header.d.ts +2 -1
  55. package/typed/tileset-2d/tile-2d-header.d.ts.map +1 -1
  56. package/typed/tileset-2d/tile-2d-traversal.d.ts +1 -1
  57. package/typed/tileset-2d/tile-2d-traversal.d.ts.map +1 -1
  58. package/typed/tileset-2d/tileset-2d.d.ts +5 -5
  59. package/typed/tileset-2d/tileset-2d.d.ts.map +1 -1
  60. package/typed/tileset-2d/utils.d.ts +2 -2
  61. package/typed/tileset-2d/utils.d.ts.map +1 -1
  62. package/typed/trips-layer/trips-layer.d.ts +1 -1
  63. package/typed/trips-layer/trips-layer.d.ts.map +1 -1
@@ -11,6 +11,8 @@ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/cl
11
11
 
12
12
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
13
 
14
+ var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
15
+
14
16
  var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
15
17
 
16
18
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
@@ -99,8 +101,17 @@ var TileLayer = function (_CompositeLayer) {
99
101
  var _super = _createSuper(TileLayer);
100
102
 
101
103
  function TileLayer() {
104
+ var _this;
105
+
102
106
  (0, _classCallCheck2.default)(this, TileLayer);
103
- return _super.apply(this, arguments);
107
+
108
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
109
+ args[_key] = arguments[_key];
110
+ }
111
+
112
+ _this = _super.call.apply(_super, [this].concat(args));
113
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "state", void 0);
114
+ return _this;
104
115
  }
105
116
 
106
117
  (0, _createClass2.default)(TileLayer, [{
@@ -123,11 +134,11 @@ var TileLayer = function (_CompositeLayer) {
123
134
  get: function get() {
124
135
  var _this$state2, _this$state2$tileset, _this$state2$tileset$;
125
136
 
126
- return (_this$state2 = this.state) === null || _this$state2 === void 0 ? void 0 : (_this$state2$tileset = _this$state2.tileset) === null || _this$state2$tileset === void 0 ? void 0 : (_this$state2$tileset$ = _this$state2$tileset.selectedTiles) === null || _this$state2$tileset$ === void 0 ? void 0 : _this$state2$tileset$.every(function (tile) {
137
+ return Boolean((_this$state2 = this.state) === null || _this$state2 === void 0 ? void 0 : (_this$state2$tileset = _this$state2.tileset) === null || _this$state2$tileset === void 0 ? void 0 : (_this$state2$tileset$ = _this$state2$tileset.selectedTiles) === null || _this$state2$tileset$ === void 0 ? void 0 : _this$state2$tileset$.every(function (tile) {
127
138
  return tile.isLoaded && tile.layers && tile.layers.every(function (layer) {
128
139
  return layer.isLoaded;
129
140
  });
130
- });
141
+ }));
131
142
  }
132
143
  }, {
133
144
  key: "shouldUpdateState",
@@ -154,7 +165,7 @@ var TileLayer = function (_CompositeLayer) {
154
165
  if (dataChanged) {
155
166
  tileset.reloadAll();
156
167
  } else {
157
- this.state.tileset.tiles.forEach(function (tile) {
168
+ tileset.tiles.forEach(function (tile) {
158
169
  tile.layers = null;
159
170
  });
160
171
  }
@@ -319,15 +330,15 @@ var TileLayer = function (_CompositeLayer) {
319
330
  }, {
320
331
  key: "renderLayers",
321
332
  value: function renderLayers() {
322
- var _this = this;
333
+ var _this2 = this;
323
334
 
324
335
  return this.state.tileset.tiles.map(function (tile) {
325
- var subLayerProps = _this.getSubLayerPropsByTile(tile);
336
+ var subLayerProps = _this2.getSubLayerPropsByTile(tile);
326
337
 
327
338
  if (!tile.isLoaded && !tile.content) {} else if (!tile.layers) {
328
- var layers = _this.renderSubLayers(_objectSpread(_objectSpread(_objectSpread({}, _this.props), _this.getSubLayerProps({
339
+ var layers = _this2.renderSubLayers(_objectSpread(_objectSpread(_objectSpread({}, _this2.props), _this2.getSubLayerProps({
329
340
  id: tile.id,
330
- updateTriggers: _this.props.updateTriggers
341
+ updateTriggers: _this2.props.updateTriggers
331
342
  })), {}, {
332
343
  data: tile.content,
333
344
  _offset: 0,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tile-layer/tile-layer.ts"],"names":["defaultProps","TilesetClass","Tileset2D","data","type","value","dataComparator","urlType","equal","renderSubLayers","props","GeoJsonLayer","getTileData","optional","onViewportLoad","onTileLoad","tile","onTileUnload","onTileError","err","console","error","extent","compare","tileSize","maxZoom","minZoom","maxCacheSize","maxCacheByteSize","refinementStrategy","STRATEGY_DEFAULT","zRange","maxRequests","zoomOffset","TileLayer","state","tileset","isLoaded","finalize","selectedTiles","every","layers","layer","changeFlags","somethingChanged","propsChanged","propsOrDataChanged","updateTriggersChanged","dataChanged","all","_getTilesetOptions","setState","setOptions","reloadAll","tiles","forEach","_updateTileset","bind","_onTileLoad","_onTileError","_onTileUnload","modelMatrix","frameNumber","update","context","viewport","loadingStateChanged","tilesetChanged","_onViewportLoad","setNeedsUpdate","fetch","signal","url","Array","isArray","propName","info","sourceLayer","sourceTile","picked","updateAutoHighlight","map","subLayerProps","getSubLayerPropsByTile","content","getSubLayerProps","id","updateTriggers","_offset","Boolean","clone","Object","keys","some","cullRect","isTileVisible","CompositeLayer"],"mappings":"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","sourcesContent":["import {\n CompositeLayer,\n CompositeLayerProps,\n Layer,\n LayerProps,\n UpdateParameters,\n PickingInfo,\n GetPickingInfoParams,\n DefaultProps,\n FilterContext,\n _flatten as flatten\n} from '@deck.gl/core';\nimport {GeoJsonLayer} from '@deck.gl/layers';\nimport {LayersList} from '@deck.gl/core';\n\nimport type {TileLoadProps, ZRange} from '../tileset-2d';\nimport {\n Tileset2D,\n Tile2DHeader,\n RefinementStrategy,\n STRATEGY_DEFAULT,\n Tileset2DProps\n} from '../tileset-2d';\nimport {urlType, URLTemplate, getURLFromTemplate} from '../tileset-2d';\n\nconst defaultProps: DefaultProps<TileLayerProps> = {\n TilesetClass: Tileset2D,\n data: {type: 'data', value: []},\n dataComparator: urlType.equal,\n renderSubLayers: {type: 'function', value: props => new GeoJsonLayer(props)},\n getTileData: {type: 'function', optional: true, value: null},\n // TODO - change to onViewportLoad to align with Tile3DLayer\n onViewportLoad: {type: 'function', optional: true, value: null},\n onTileLoad: {type: 'function', value: tile => {}},\n onTileUnload: {type: 'function', value: tile => {}},\n // eslint-disable-next-line\n onTileError: {type: 'function', value: err => console.error(err)},\n extent: {type: 'array', optional: true, value: null, compare: true},\n tileSize: 512,\n maxZoom: null,\n minZoom: 0,\n maxCacheSize: null,\n maxCacheByteSize: null,\n refinementStrategy: STRATEGY_DEFAULT,\n zRange: null,\n maxRequests: 6,\n zoomOffset: 0\n};\n\n/** All props supported by the TileLayer */\nexport type TileLayerProps<DataT = any> = CompositeLayerProps & _TileLayerProps<DataT>;\n\n/** Props added by the TileLayer */\ntype _TileLayerProps<DataT> = {\n data: URLTemplate;\n /**\n * Optionally implement a custom indexing scheme.\n */\n TilesetClass?: typeof Tileset2D;\n /**\n * Renders one or an array of Layer instances.\n */\n renderSubLayers?: (\n props: TileLayerProps<DataT> & {\n id: string;\n data: DataT;\n _offset: number;\n tile: Tile2DHeader<DataT>;\n }\n ) => Layer | null | LayersList;\n /**\n * If supplied, `getTileData` is called to retrieve the data of each tile.\n */\n getTileData?: ((props: TileLoadProps) => Promise<DataT> | DataT) | null;\n\n /** Called when all tiles in the current viewport are loaded. */\n onViewportLoad?: ((tiles: Tile2DHeader<DataT>[]) => void) | null;\n\n /** Called when a tile successfully loads. */\n onTileLoad?: (tile: Tile2DHeader<DataT>) => void;\n\n /** Called when a tile is cleared from cache. */\n onTileUnload?: (tile: Tile2DHeader<DataT>) => void;\n\n /** Called when a tile failed to load. */\n onTileError?: (err: any, tile?) => void;\n\n /** The bounding box of the layer's data. */\n extent?: number[] | null;\n\n /** The pixel dimension of the tiles, usually a power of 2. */\n tileSize?: number;\n\n /** The max zoom level of the layer's data.\n * @default null\n */\n maxZoom?: number | null;\n\n /** The min zoom level of the layer's data.\n * @default 0\n */\n minZoom?: number | null;\n\n /** The maximum number of tiles that can be cached. */\n maxCacheSize?: number | null;\n\n /**\n * The maximum memory used for caching tiles.\n *\n * @default null\n */\n maxCacheByteSize?: number | null;\n\n /**\n * How the tile layer refines the visibility of tiles.\n *\n * @default 'best-available'\n */\n refinementStrategy?: RefinementStrategy;\n\n /** Range of minimum and maximum heights in the tile. */\n zRange?: ZRange | null;\n\n /**\n * The maximum number of concurrent getTileData calls.\n *\n * @default 6\n */\n maxRequests?: number;\n\n /**\n * This offset changes the zoom level at which the tiles are fetched.\n *\n * Needs to be an integer.\n *\n * @default 0\n */\n zoomOffset?: number;\n};\n\nexport type TiledPickingInfo<DataT = any> = PickingInfo & {\n tile?: Tile2DHeader<DataT>;\n};\n\n/**\n * The TileLayer is a composite layer that makes it possible to visualize very large datasets.\n *\n * Instead of fetching the entire dataset, it only loads and renders what's visible in the current viewport.\n */\nexport default class TileLayer<DataT = any, ExtraPropsT extends {} = {}> extends CompositeLayer<\n ExtraPropsT & Required<_TileLayerProps<DataT>>\n> {\n static defaultProps: DefaultProps = defaultProps;\n static layerName = 'TileLayer';\n\n initializeState() {\n this.state = {\n tileset: null,\n isLoaded: false\n };\n }\n\n finalizeState() {\n this.state?.tileset?.finalize();\n }\n\n get isLoaded(): boolean {\n return this.state?.tileset?.selectedTiles?.every(\n tile => tile.isLoaded && tile.layers && tile.layers.every(layer => layer.isLoaded)\n );\n }\n\n shouldUpdateState({changeFlags}): boolean {\n return changeFlags.somethingChanged;\n }\n\n updateState({changeFlags}: UpdateParameters<this>) {\n let {tileset} = this.state;\n const propsChanged = changeFlags.propsOrDataChanged || changeFlags.updateTriggersChanged;\n const dataChanged =\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getTileData));\n\n if (!tileset) {\n tileset = new this.props.TilesetClass(this._getTilesetOptions());\n this.setState({tileset});\n } else if (propsChanged) {\n tileset.setOptions(this._getTilesetOptions());\n\n if (dataChanged) {\n // reload all tiles\n // use cached layers until new content is loaded\n tileset.reloadAll();\n } else {\n // some render options changed, regenerate sub layers now\n this.state.tileset.tiles.forEach(tile => {\n tile.layers = null;\n });\n }\n }\n\n this._updateTileset();\n }\n\n _getTilesetOptions(): Tileset2DProps {\n const {\n tileSize,\n maxCacheSize,\n maxCacheByteSize,\n refinementStrategy,\n extent,\n maxZoom,\n minZoom,\n maxRequests,\n zoomOffset\n } = this.props;\n\n return {\n maxCacheSize,\n maxCacheByteSize,\n maxZoom,\n minZoom,\n tileSize,\n refinementStrategy,\n extent,\n maxRequests,\n zoomOffset,\n\n getTileData: this.getTileData.bind(this),\n onTileLoad: this._onTileLoad.bind(this),\n onTileError: this._onTileError.bind(this),\n onTileUnload: this._onTileUnload.bind(this)\n };\n }\n\n private _updateTileset(): void {\n const {tileset} = this.state;\n const {zRange, modelMatrix} = this.props;\n const frameNumber = tileset.update(this.context.viewport, {zRange, modelMatrix});\n const {isLoaded} = tileset;\n\n const loadingStateChanged = this.state.isLoaded !== isLoaded;\n const tilesetChanged = this.state.frameNumber !== frameNumber;\n\n if (isLoaded && (loadingStateChanged || tilesetChanged)) {\n this._onViewportLoad();\n }\n\n if (tilesetChanged) {\n // Save the tileset frame number - trigger a rerender\n this.setState({frameNumber});\n }\n // Save the loaded state - should not trigger a rerender\n this.state.isLoaded = isLoaded;\n }\n\n _onViewportLoad(): void {\n const {tileset} = this.state;\n const {onViewportLoad} = this.props;\n\n if (onViewportLoad) {\n onViewportLoad(tileset.selectedTiles);\n }\n }\n\n _onTileLoad(tile: Tile2DHeader<DataT>): void {\n this.props.onTileLoad(tile);\n tile.layers = null;\n\n this.setNeedsUpdate();\n }\n\n _onTileError(error: any, tile: Tile2DHeader<DataT>) {\n this.props.onTileError(error);\n tile.layers = null;\n\n this.setNeedsUpdate();\n }\n\n _onTileUnload(tile: Tile2DHeader<DataT>) {\n this.props.onTileUnload(tile);\n }\n\n // Methods for subclass to override\n\n getTileData(tile: TileLoadProps): Promise<DataT> | DataT | null {\n const {data, getTileData, fetch} = this.props;\n const {signal} = tile;\n\n tile.url =\n typeof data === 'string' || Array.isArray(data) ? getURLFromTemplate(data, tile) : null;\n\n if (getTileData) {\n return getTileData(tile);\n }\n if (fetch && tile.url) {\n return fetch(tile.url, {propName: 'data', layer: this, signal});\n }\n return null;\n }\n\n renderSubLayers(\n props: TileLayer['props'] & {\n id: string;\n data: DataT;\n _offset: number;\n tile: Tile2DHeader<DataT>;\n }\n ): Layer | null | LayersList {\n return this.props.renderSubLayers(props);\n }\n\n getSubLayerPropsByTile(tile: Tile2DHeader): Partial<LayerProps> | null {\n return null;\n }\n\n getPickingInfo({info, sourceLayer}: GetPickingInfoParams): TiledPickingInfo<DataT> {\n const sourceTile = (sourceLayer as any).props.tile;\n if (info.picked) {\n (info as any).tile = sourceTile;\n }\n (info as any).sourceTile = sourceTile;\n return info;\n }\n\n protected _updateAutoHighlight(info: PickingInfo): void {\n const sourceTile = (info as any).sourceTile as Tile2DHeader;\n if (sourceTile && sourceTile.layers) {\n for (const layer of sourceTile.layers) {\n layer.updateAutoHighlight(info);\n }\n }\n }\n\n renderLayers(): Layer | null | LayersList {\n return this.state.tileset.tiles.map((tile: Tile2DHeader) => {\n const subLayerProps = this.getSubLayerPropsByTile(tile);\n // cache the rendered layer in the tile\n if (!tile.isLoaded && !tile.content) {\n // nothing to show\n } else if (!tile.layers) {\n const layers = this.renderSubLayers({\n ...this.props,\n ...this.getSubLayerProps({\n id: tile.id,\n updateTriggers: this.props.updateTriggers\n }),\n data: tile.content,\n _offset: 0,\n tile\n });\n tile.layers = (flatten(layers, Boolean) as Layer<{tile?: Tile2DHeader}>[]).map(layer =>\n layer.clone({\n tile,\n ...subLayerProps\n })\n );\n } else if (\n subLayerProps &&\n tile.layers[0] &&\n Object.keys(subLayerProps).some(\n propName => tile.layers![0].props[propName] !== subLayerProps[propName]\n )\n ) {\n tile.layers = tile.layers.map(layer => layer.clone(subLayerProps));\n }\n return tile.layers;\n });\n }\n\n filterSubLayer({layer, cullRect}: FilterContext) {\n const {tile} = (layer as Layer<{tile: Tile2DHeader}>).props;\n return this.state.tileset.isTileVisible(tile, cullRect);\n }\n}\n"],"file":"tile-layer.js"}
1
+ {"version":3,"sources":["../../../src/tile-layer/tile-layer.ts"],"names":["defaultProps","TilesetClass","Tileset2D","data","type","value","dataComparator","urlType","equal","renderSubLayers","props","GeoJsonLayer","getTileData","optional","onViewportLoad","onTileLoad","tile","onTileUnload","onTileError","err","console","error","extent","compare","tileSize","maxZoom","minZoom","maxCacheSize","maxCacheByteSize","refinementStrategy","STRATEGY_DEFAULT","zRange","maxRequests","zoomOffset","TileLayer","state","tileset","isLoaded","finalize","Boolean","selectedTiles","every","layers","layer","changeFlags","somethingChanged","propsChanged","propsOrDataChanged","updateTriggersChanged","dataChanged","all","_getTilesetOptions","setState","setOptions","reloadAll","tiles","forEach","_updateTileset","bind","_onTileLoad","_onTileError","_onTileUnload","modelMatrix","frameNumber","update","context","viewport","loadingStateChanged","tilesetChanged","_onViewportLoad","setNeedsUpdate","fetch","signal","url","Array","isArray","propName","info","sourceLayer","sourceTile","picked","updateAutoHighlight","map","subLayerProps","getSubLayerPropsByTile","content","getSubLayerProps","id","updateTriggers","_offset","clone","Object","keys","some","cullRect","isTileVisible","CompositeLayer"],"mappings":"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","sourcesContent":["import {\n CompositeLayer,\n CompositeLayerProps,\n Layer,\n LayerProps,\n UpdateParameters,\n PickingInfo,\n GetPickingInfoParams,\n DefaultProps,\n FilterContext,\n _flatten as flatten\n} from '@deck.gl/core';\nimport {GeoJsonLayer} from '@deck.gl/layers';\nimport {LayersList} from '@deck.gl/core';\n\nimport type {TileLoadProps, ZRange} from '../tileset-2d';\nimport {\n Tileset2D,\n Tile2DHeader,\n RefinementStrategy,\n STRATEGY_DEFAULT,\n Tileset2DProps\n} from '../tileset-2d';\nimport {urlType, URLTemplate, getURLFromTemplate} from '../tileset-2d';\n\nconst defaultProps: DefaultProps<TileLayerProps> = {\n TilesetClass: Tileset2D,\n data: {type: 'data', value: []},\n dataComparator: urlType.equal,\n renderSubLayers: {type: 'function', value: props => new GeoJsonLayer(props)},\n getTileData: {type: 'function', optional: true, value: null},\n // TODO - change to onViewportLoad to align with Tile3DLayer\n onViewportLoad: {type: 'function', optional: true, value: null},\n onTileLoad: {type: 'function', value: tile => {}},\n onTileUnload: {type: 'function', value: tile => {}},\n // eslint-disable-next-line\n onTileError: {type: 'function', value: err => console.error(err)},\n extent: {type: 'array', optional: true, value: null, compare: true},\n tileSize: 512,\n maxZoom: null,\n minZoom: 0,\n maxCacheSize: null,\n maxCacheByteSize: null,\n refinementStrategy: STRATEGY_DEFAULT,\n zRange: null,\n maxRequests: 6,\n zoomOffset: 0\n};\n\n/** All props supported by the TileLayer */\nexport type TileLayerProps<DataT = any> = CompositeLayerProps & _TileLayerProps<DataT>;\n\n/** Props added by the TileLayer */\ntype _TileLayerProps<DataT> = {\n data: URLTemplate;\n /**\n * Optionally implement a custom indexing scheme.\n */\n TilesetClass?: typeof Tileset2D;\n /**\n * Renders one or an array of Layer instances.\n */\n renderSubLayers?: (\n props: TileLayerProps<DataT> & {\n id: string;\n data: DataT;\n _offset: number;\n tile: Tile2DHeader<DataT>;\n }\n ) => Layer | null | LayersList;\n /**\n * If supplied, `getTileData` is called to retrieve the data of each tile.\n */\n getTileData?: ((props: TileLoadProps) => Promise<DataT> | DataT) | null;\n\n /** Called when all tiles in the current viewport are loaded. */\n onViewportLoad?: ((tiles: Tile2DHeader<DataT>[]) => void) | null;\n\n /** Called when a tile successfully loads. */\n onTileLoad?: (tile: Tile2DHeader<DataT>) => void;\n\n /** Called when a tile is cleared from cache. */\n onTileUnload?: (tile: Tile2DHeader<DataT>) => void;\n\n /** Called when a tile failed to load. */\n onTileError?: (err: any, tile?) => void;\n\n /** The bounding box of the layer's data. */\n extent?: number[] | null;\n\n /** The pixel dimension of the tiles, usually a power of 2. */\n tileSize?: number;\n\n /** The max zoom level of the layer's data.\n * @default null\n */\n maxZoom?: number | null;\n\n /** The min zoom level of the layer's data.\n * @default 0\n */\n minZoom?: number | null;\n\n /** The maximum number of tiles that can be cached. */\n maxCacheSize?: number | null;\n\n /**\n * The maximum memory used for caching tiles.\n *\n * @default null\n */\n maxCacheByteSize?: number | null;\n\n /**\n * How the tile layer refines the visibility of tiles.\n *\n * @default 'best-available'\n */\n refinementStrategy?: RefinementStrategy;\n\n /** Range of minimum and maximum heights in the tile. */\n zRange?: ZRange | null;\n\n /**\n * The maximum number of concurrent getTileData calls.\n *\n * @default 6\n */\n maxRequests?: number;\n\n /**\n * This offset changes the zoom level at which the tiles are fetched.\n *\n * Needs to be an integer.\n *\n * @default 0\n */\n zoomOffset?: number;\n};\n\nexport type TiledPickingInfo<DataT = any> = PickingInfo & {\n tile?: Tile2DHeader<DataT>;\n};\n\n/**\n * The TileLayer is a composite layer that makes it possible to visualize very large datasets.\n *\n * Instead of fetching the entire dataset, it only loads and renders what's visible in the current viewport.\n */\nexport default class TileLayer<DataT = any, ExtraPropsT extends {} = {}> extends CompositeLayer<\n ExtraPropsT & Required<_TileLayerProps<DataT>>\n> {\n static defaultProps: DefaultProps = defaultProps;\n static layerName = 'TileLayer';\n\n state!: {\n tileset: Tileset2D | null;\n isLoaded: boolean;\n frameNumber?: number;\n };\n\n initializeState() {\n this.state = {\n tileset: null,\n isLoaded: false\n };\n }\n\n finalizeState() {\n this.state?.tileset?.finalize();\n }\n\n get isLoaded(): boolean {\n return Boolean(\n this.state?.tileset?.selectedTiles?.every(\n tile => tile.isLoaded && tile.layers && tile.layers.every(layer => layer.isLoaded)\n )\n );\n }\n\n shouldUpdateState({changeFlags}): boolean {\n return changeFlags.somethingChanged;\n }\n\n updateState({changeFlags}: UpdateParameters<this>) {\n let {tileset} = this.state;\n const propsChanged = changeFlags.propsOrDataChanged || changeFlags.updateTriggersChanged;\n const dataChanged =\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getTileData));\n\n if (!tileset) {\n tileset = new this.props.TilesetClass(this._getTilesetOptions());\n this.setState({tileset});\n } else if (propsChanged) {\n tileset.setOptions(this._getTilesetOptions());\n\n if (dataChanged) {\n // reload all tiles\n // use cached layers until new content is loaded\n tileset.reloadAll();\n } else {\n // some render options changed, regenerate sub layers now\n tileset.tiles.forEach(tile => {\n tile.layers = null;\n });\n }\n }\n\n this._updateTileset();\n }\n\n _getTilesetOptions(): Tileset2DProps {\n const {\n tileSize,\n maxCacheSize,\n maxCacheByteSize,\n refinementStrategy,\n extent,\n maxZoom,\n minZoom,\n maxRequests,\n zoomOffset\n } = this.props;\n\n return {\n maxCacheSize,\n maxCacheByteSize,\n maxZoom,\n minZoom,\n tileSize,\n refinementStrategy,\n extent,\n maxRequests,\n zoomOffset,\n\n getTileData: this.getTileData.bind(this),\n onTileLoad: this._onTileLoad.bind(this),\n onTileError: this._onTileError.bind(this),\n onTileUnload: this._onTileUnload.bind(this)\n };\n }\n\n private _updateTileset(): void {\n const tileset = this.state.tileset!;\n const {zRange, modelMatrix} = this.props;\n const frameNumber = tileset.update(this.context.viewport, {zRange, modelMatrix});\n const {isLoaded} = tileset;\n\n const loadingStateChanged = this.state.isLoaded !== isLoaded;\n const tilesetChanged = this.state.frameNumber !== frameNumber;\n\n if (isLoaded && (loadingStateChanged || tilesetChanged)) {\n this._onViewportLoad();\n }\n\n if (tilesetChanged) {\n // Save the tileset frame number - trigger a rerender\n this.setState({frameNumber});\n }\n // Save the loaded state - should not trigger a rerender\n this.state.isLoaded = isLoaded;\n }\n\n _onViewportLoad(): void {\n const {tileset} = this.state;\n const {onViewportLoad} = this.props;\n\n if (onViewportLoad) {\n onViewportLoad(tileset!.selectedTiles!);\n }\n }\n\n _onTileLoad(tile: Tile2DHeader<DataT>): void {\n this.props.onTileLoad(tile);\n tile.layers = null;\n\n this.setNeedsUpdate();\n }\n\n _onTileError(error: any, tile: Tile2DHeader<DataT>) {\n this.props.onTileError(error);\n tile.layers = null;\n\n this.setNeedsUpdate();\n }\n\n _onTileUnload(tile: Tile2DHeader<DataT>) {\n this.props.onTileUnload(tile);\n }\n\n // Methods for subclass to override\n\n getTileData(tile: TileLoadProps): Promise<DataT> | DataT | null {\n const {data, getTileData, fetch} = this.props;\n const {signal} = tile;\n\n tile.url =\n typeof data === 'string' || Array.isArray(data) ? getURLFromTemplate(data, tile) : null;\n\n if (getTileData) {\n return getTileData(tile);\n }\n if (fetch && tile.url) {\n return fetch(tile.url, {propName: 'data', layer: this, signal});\n }\n return null;\n }\n\n renderSubLayers(\n props: TileLayer['props'] & {\n id: string;\n data: DataT;\n _offset: number;\n tile: Tile2DHeader<DataT>;\n }\n ): Layer | null | LayersList {\n return this.props.renderSubLayers(props);\n }\n\n getSubLayerPropsByTile(tile: Tile2DHeader): Partial<LayerProps> | null {\n return null;\n }\n\n getPickingInfo({info, sourceLayer}: GetPickingInfoParams): TiledPickingInfo<DataT> {\n const sourceTile = (sourceLayer as any).props.tile;\n if (info.picked) {\n (info as any).tile = sourceTile;\n }\n (info as any).sourceTile = sourceTile;\n return info;\n }\n\n protected _updateAutoHighlight(info: PickingInfo): void {\n const sourceTile = (info as any).sourceTile as Tile2DHeader;\n if (sourceTile && sourceTile.layers) {\n for (const layer of sourceTile.layers) {\n layer.updateAutoHighlight(info);\n }\n }\n }\n\n renderLayers(): Layer | null | LayersList {\n return this.state.tileset!.tiles.map((tile: Tile2DHeader) => {\n const subLayerProps = this.getSubLayerPropsByTile(tile);\n // cache the rendered layer in the tile\n if (!tile.isLoaded && !tile.content) {\n // nothing to show\n } else if (!tile.layers) {\n const layers = this.renderSubLayers({\n ...this.props,\n ...this.getSubLayerProps({\n id: tile.id,\n updateTriggers: this.props.updateTriggers\n }),\n data: tile.content,\n _offset: 0,\n tile\n });\n tile.layers = (flatten(layers, Boolean) as Layer<{tile?: Tile2DHeader}>[]).map(layer =>\n layer.clone({\n tile,\n ...subLayerProps\n })\n );\n } else if (\n subLayerProps &&\n tile.layers[0] &&\n Object.keys(subLayerProps).some(\n propName => tile.layers![0].props[propName] !== subLayerProps[propName]\n )\n ) {\n tile.layers = tile.layers.map(layer => layer.clone(subLayerProps));\n }\n return tile.layers;\n });\n }\n\n filterSubLayer({layer, cullRect}: FilterContext) {\n const {tile} = (layer as Layer<{tile: Tile2DHeader}>).props;\n return this.state.tileset!.isTileVisible(tile, cullRect);\n }\n}\n"],"file":"tile-layer.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tileset-2d/tile-2d-header.ts"],"names":["Tile2DHeader","index","isVisible","isSelected","parent","children","content","_loader","undefined","_abortController","_loaderId","_isLoaded","_isCancelled","_needsReload","_bbox","value","boundingBox","west","south","east","north","left","top","right","bottom","isLoading","then","data","Boolean","result","byteLength","Number","isFinite","console","error","getData","requestScheduler","onLoad","onError","id","bbox","userData","zoom","loaderId","AbortController","signal","scheduleRequest","tile","requestToken","done","tileData","opts","_loadData","abort","isLoaded"],"mappings":"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","sourcesContent":["/* eslint-env browser */\nimport {RequestScheduler} from '@loaders.gl/loader-utils';\nimport {TileBoundingBox, TileIndex, TileLoadProps} from './types';\n\nexport type TileLoadDataProps<DataT = any> = {\n requestScheduler: RequestScheduler;\n getData: (props: TileLoadProps) => Promise<DataT>;\n onLoad: (tile: Tile2DHeader<DataT>) => void;\n onError: (error: any, tile: Tile2DHeader<DataT>) => void;\n};\n\nexport class Tile2DHeader<DataT = any> {\n index: TileIndex;\n isVisible: boolean;\n isSelected: boolean;\n parent: Tile2DHeader | null;\n children: Tile2DHeader[] | null;\n content: DataT | null;\n state?: number;\n layers?: any[] | null; // Layer[] | null\n\n id!: string; // assigned _always_ with result of `getTileId`\n zoom!: number; // assigned _always_ with result of `getTileZoom`\n userData?: Record<string, any>; // _may be_ assigned with result of `getTileMetadata`\n boundingBox!: [min: number[], max: number[]]; // assigned _always_ with bbox from `getTileMetadata`\n\n private _abortController: AbortController | null;\n private _loader: Promise<void> | undefined;\n private _loaderId: number;\n private _isLoaded: boolean;\n private _isCancelled: boolean;\n private _needsReload: boolean;\n private _bbox!: TileBoundingBox;\n\n constructor(index: TileIndex) {\n this.index = index;\n this.isVisible = false;\n this.isSelected = false;\n this.parent = null;\n this.children = [];\n\n this.content = null;\n\n this._loader = undefined;\n this._abortController = null;\n this._loaderId = 0;\n this._isLoaded = false;\n this._isCancelled = false;\n this._needsReload = false;\n }\n\n /** @deprecated use `boundingBox` instead */\n get bbox(): TileBoundingBox {\n return this._bbox;\n }\n\n // TODO - remove in v9\n set bbox(value: TileBoundingBox) {\n // Only set once from `Tileset2D.getTileMetadata`\n if (this._bbox) return;\n\n this._bbox = value;\n if ('west' in value) {\n this.boundingBox = [\n [value.west, value.south],\n [value.east, value.north]\n ];\n } else {\n this.boundingBox = [\n [value.left, value.top],\n [value.right, value.bottom]\n ];\n }\n }\n\n get data(): Promise<DataT | null> | DataT | null {\n return this.isLoading && this._loader ? this._loader.then(() => this.data) : this.content;\n }\n\n get isLoaded(): boolean {\n return this._isLoaded && !this._needsReload;\n }\n\n get isLoading(): boolean {\n return Boolean(this._loader) && !this._isCancelled;\n }\n\n get needsReload(): boolean {\n return this._needsReload || this._isCancelled;\n }\n\n get byteLength(): number {\n const result = this.content ? (this.content as any).byteLength : 0;\n if (!Number.isFinite(result)) {\n // eslint-disable-next-line no-console\n console.error('byteLength not defined in tile data');\n }\n return result;\n }\n\n /* eslint-disable max-statements */\n private async _loadData({\n getData,\n requestScheduler,\n onLoad,\n onError\n }: TileLoadDataProps<DataT>): Promise<void> {\n const {index, id, bbox, userData, zoom} = this;\n const loaderId = this._loaderId;\n\n this._abortController = new AbortController();\n const {signal} = this._abortController;\n\n // @ts-expect-error (2345) Argument of type '(tile: any) => 1 | -1' is not assignable ...\n const requestToken = await requestScheduler.scheduleRequest(this, tile => {\n return tile.isSelected ? 1 : -1;\n });\n\n if (!requestToken) {\n this._isCancelled = true;\n return;\n }\n // A tile can be cancelled while being scheduled\n if (this._isCancelled) {\n requestToken.done();\n return;\n }\n\n let tileData: DataT | null = null;\n let error;\n try {\n tileData = await getData({index, id, bbox, userData, zoom, signal});\n } catch (err) {\n error = err || true;\n } finally {\n requestToken.done();\n }\n\n // If loadData has been called with a newer version, discard the result from this operation\n if (loaderId !== this._loaderId) {\n return;\n }\n // Clear the `isLoading` flag\n this._loader = undefined;\n // Rewrite tile content with the result of getTileData if successful, or `null` in case of\n // error or cancellation\n this.content = tileData;\n // If cancelled, do not invoke the callbacks\n // Consider it loaded if we tried to cancel but `getTileData` still returned data\n if (this._isCancelled && !tileData) {\n this._isLoaded = false;\n return;\n }\n this._isLoaded = true;\n this._isCancelled = false;\n\n if (error) {\n onError(error, this);\n } else {\n onLoad(this);\n }\n }\n\n loadData(opts: TileLoadDataProps): Promise<void> {\n this._isLoaded = false;\n this._isCancelled = false;\n this._needsReload = false;\n this._loaderId++;\n this._loader = this._loadData(opts);\n return this._loader;\n }\n\n setNeedsReload(): void {\n if (this.isLoading) {\n this.abort();\n this._loader = undefined;\n }\n this._needsReload = true;\n }\n\n abort(): void {\n if (this.isLoaded) {\n return;\n }\n\n this._isCancelled = true;\n this._abortController?.abort();\n }\n}\n"],"file":"tile-2d-header.js"}
1
+ {"version":3,"sources":["../../../src/tileset-2d/tile-2d-header.ts"],"names":["Tile2DHeader","index","isVisible","isSelected","parent","children","content","_loader","undefined","_abortController","_loaderId","_isLoaded","_isCancelled","_needsReload","_bbox","value","boundingBox","west","south","east","north","left","top","right","bottom","isLoading","then","data","Boolean","result","byteLength","Number","isFinite","console","error","getData","requestScheduler","onLoad","onError","id","bbox","userData","zoom","loaderId","AbortController","signal","scheduleRequest","tile","requestToken","done","tileData","opts","_loadData","abort","isLoaded"],"mappings":";;;;;;;;;;;;;;;;;;;IAYaA,Y;AAuBX,wBAAYC,KAAZ,EAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC5B,SAAKA,KAAL,GAAaA,KAAb;AACA,SAAKC,SAAL,GAAiB,KAAjB;AACA,SAAKC,UAAL,GAAkB,KAAlB;AACA,SAAKC,MAAL,GAAc,IAAd;AACA,SAAKC,QAAL,GAAgB,EAAhB;AAEA,SAAKC,OAAL,GAAe,IAAf;AAEA,SAAKC,OAAL,GAAeC,SAAf;AACA,SAAKC,gBAAL,GAAwB,IAAxB;AACA,SAAKC,SAAL,GAAiB,CAAjB;AACA,SAAKC,SAAL,GAAiB,KAAjB;AACA,SAAKC,YAAL,GAAoB,KAApB;AACA,SAAKC,YAAL,GAAoB,KAApB;AACD;;;;SAGD,eAA4B;AAC1B,aAAO,KAAKC,KAAZ;AACD,K;SAGD,aAASC,KAAT,EAAiC;AAE/B,UAAI,KAAKD,KAAT,EAAgB;AAEhB,WAAKA,KAAL,GAAaC,KAAb;;AACA,UAAI,UAAUA,KAAd,EAAqB;AACnB,aAAKC,WAAL,GAAmB,CACjB,CAACD,KAAK,CAACE,IAAP,EAAaF,KAAK,CAACG,KAAnB,CADiB,EAEjB,CAACH,KAAK,CAACI,IAAP,EAAaJ,KAAK,CAACK,KAAnB,CAFiB,CAAnB;AAID,OALD,MAKO;AACL,aAAKJ,WAAL,GAAmB,CACjB,CAACD,KAAK,CAACM,IAAP,EAAaN,KAAK,CAACO,GAAnB,CADiB,EAEjB,CAACP,KAAK,CAACQ,KAAP,EAAcR,KAAK,CAACS,MAApB,CAFiB,CAAnB;AAID;AACF;;;SAED,eAAiD;AAAA;;AAC/C,aAAO,KAAKC,SAAL,IAAkB,KAAKlB,OAAvB,GAAiC,KAAKA,OAAL,CAAamB,IAAb,CAAkB;AAAA,eAAM,KAAI,CAACC,IAAX;AAAA,OAAlB,CAAjC,GAAsE,KAAKrB,OAAlF;AACD;;;SAED,eAAwB;AACtB,aAAO,KAAKK,SAAL,IAAkB,CAAC,KAAKE,YAA/B;AACD;;;SAED,eAAyB;AACvB,aAAOe,OAAO,CAAC,KAAKrB,OAAN,CAAP,IAAyB,CAAC,KAAKK,YAAtC;AACD;;;SAED,eAA2B;AACzB,aAAO,KAAKC,YAAL,IAAqB,KAAKD,YAAjC;AACD;;;SAED,eAAyB;AACvB,UAAMiB,MAAM,GAAG,KAAKvB,OAAL,GAAgB,KAAKA,OAAN,CAAsBwB,UAArC,GAAkD,CAAjE;;AACA,UAAI,CAACC,MAAM,CAACC,QAAP,CAAgBH,MAAhB,CAAL,EAA8B;AAE5BI,QAAAA,OAAO,CAACC,KAAR,CAAc,qCAAd;AACD;;AACD,aAAOL,MAAP;AACD;;;;iFAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AACEM,gBAAAA,OADF,QACEA,OADF,EAEEC,gBAFF,QAEEA,gBAFF,EAGEC,MAHF,QAGEA,MAHF,EAIEC,OAJF,QAIEA,OAJF;AAMSrC,gBAAAA,KANT,GAM4C,IAN5C,CAMSA,KANT,EAMgBsC,EANhB,GAM4C,IAN5C,CAMgBA,EANhB,EAMoBC,IANpB,GAM4C,IAN5C,CAMoBA,IANpB,EAM0BC,QAN1B,GAM4C,IAN5C,CAM0BA,QAN1B,EAMoCC,IANpC,GAM4C,IAN5C,CAMoCA,IANpC;AAOQC,gBAAAA,QAPR,GAOmB,KAAKjC,SAPxB;AASE,qBAAKD,gBAAL,GAAwB,IAAImC,eAAJ,EAAxB;AACOC,gBAAAA,MAVT,GAUmB,KAAKpC,gBAVxB,CAUSoC,MAVT;AAAA;AAAA,uBAa6BT,gBAAgB,CAACU,eAAjB,CAAiC,IAAjC,EAAuC,UAAAC,IAAI,EAAI;AACxE,yBAAOA,IAAI,CAAC5C,UAAL,GAAkB,CAAlB,GAAsB,CAAC,CAA9B;AACD,iBAF0B,CAb7B;;AAAA;AAaQ6C,gBAAAA,YAbR;;AAAA,oBAiBOA,YAjBP;AAAA;AAAA;AAAA;;AAkBI,qBAAKpC,YAAL,GAAoB,IAApB;AAlBJ;;AAAA;AAAA,qBAsBM,KAAKA,YAtBX;AAAA;AAAA;AAAA;;AAuBIoC,gBAAAA,YAAY,CAACC,IAAb;AAvBJ;;AAAA;AA2BMC,gBAAAA,QA3BN,GA2B+B,IA3B/B;AAAA;AAAA;AAAA,uBA8BqBf,OAAO,CAAC;AAAClC,kBAAAA,KAAK,EAALA,KAAD;AAAQsC,kBAAAA,EAAE,EAAFA,EAAR;AAAYC,kBAAAA,IAAI,EAAJA,IAAZ;AAAkBC,kBAAAA,QAAQ,EAARA,QAAlB;AAA4BC,kBAAAA,IAAI,EAAJA,IAA5B;AAAkCG,kBAAAA,MAAM,EAANA;AAAlC,iBAAD,CA9B5B;;AAAA;AA8BIK,gBAAAA,QA9BJ;AAAA;AAAA;;AAAA;AAAA;AAAA;AAgCIhB,gBAAAA,KAAK,GAAG,eAAO,IAAf;;AAhCJ;AAAA;AAkCIc,gBAAAA,YAAY,CAACC,IAAb;AAlCJ;;AAAA;AAAA,sBAsCMN,QAAQ,KAAK,KAAKjC,SAtCxB;AAAA;AAAA;AAAA;;AAAA;;AAAA;AA0CE,qBAAKH,OAAL,GAAeC,SAAf;AAGA,qBAAKF,OAAL,GAAe4C,QAAf;;AA7CF,sBAgDM,KAAKtC,YAAL,IAAqB,CAACsC,QAhD5B;AAAA;AAAA;AAAA;;AAiDI,qBAAKvC,SAAL,GAAiB,KAAjB;AAjDJ;;AAAA;AAoDE,qBAAKA,SAAL,GAAiB,IAAjB;AACA,qBAAKC,YAAL,GAAoB,KAApB;;AAEA,oBAAIsB,KAAJ,EAAW;AACTI,kBAAAA,OAAO,CAACJ,KAAD,EAAQ,IAAR,CAAP;AACD,iBAFD,MAEO;AACLG,kBAAAA,MAAM,CAAC,IAAD,CAAN;AACD;;AA3DH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WA8DA,kBAASc,IAAT,EAAiD;AAC/C,WAAKxC,SAAL,GAAiB,KAAjB;AACA,WAAKC,YAAL,GAAoB,KAApB;AACA,WAAKC,YAAL,GAAoB,KAApB;AACA,WAAKH,SAAL;AACA,WAAKH,OAAL,GAAe,KAAK6C,SAAL,CAAeD,IAAf,CAAf;AACA,aAAO,KAAK5C,OAAZ;AACD;;;WAED,0BAAuB;AACrB,UAAI,KAAKkB,SAAT,EAAoB;AAClB,aAAK4B,KAAL;AACA,aAAK9C,OAAL,GAAeC,SAAf;AACD;;AACD,WAAKK,YAAL,GAAoB,IAApB;AACD;;;WAED,iBAAc;AAAA;;AACZ,UAAI,KAAKyC,QAAT,EAAmB;AACjB;AACD;;AAED,WAAK1C,YAAL,GAAoB,IAApB;AACA,oCAAKH,gBAAL,gFAAuB4C,KAAvB;AACD","sourcesContent":["/* eslint-env browser */\nimport {RequestScheduler} from '@loaders.gl/loader-utils';\nimport {TileBoundingBox, TileIndex, TileLoadProps} from './types';\nimport type {Layer} from '@deck.gl/core';\n\nexport type TileLoadDataProps<DataT = any> = {\n requestScheduler: RequestScheduler;\n getData: (props: TileLoadProps) => Promise<DataT>;\n onLoad: (tile: Tile2DHeader<DataT>) => void;\n onError: (error: any, tile: Tile2DHeader<DataT>) => void;\n};\n\nexport class Tile2DHeader<DataT = any> {\n index: TileIndex;\n isVisible: boolean;\n isSelected: boolean;\n parent: Tile2DHeader | null;\n children: Tile2DHeader[] | null;\n content: DataT | null;\n state?: number;\n layers?: Layer[] | null;\n\n id!: string; // assigned _always_ with result of `getTileId`\n zoom!: number; // assigned _always_ with result of `getTileZoom`\n userData?: Record<string, any>; // _may be_ assigned with result of `getTileMetadata`\n boundingBox!: [min: number[], max: number[]]; // assigned _always_ with bbox from `getTileMetadata`\n\n private _abortController: AbortController | null;\n private _loader: Promise<void> | undefined;\n private _loaderId: number;\n private _isLoaded: boolean;\n private _isCancelled: boolean;\n private _needsReload: boolean;\n private _bbox!: TileBoundingBox;\n\n constructor(index: TileIndex) {\n this.index = index;\n this.isVisible = false;\n this.isSelected = false;\n this.parent = null;\n this.children = [];\n\n this.content = null;\n\n this._loader = undefined;\n this._abortController = null;\n this._loaderId = 0;\n this._isLoaded = false;\n this._isCancelled = false;\n this._needsReload = false;\n }\n\n /** @deprecated use `boundingBox` instead */\n get bbox(): TileBoundingBox {\n return this._bbox;\n }\n\n // TODO - remove in v9\n set bbox(value: TileBoundingBox) {\n // Only set once from `Tileset2D.getTileMetadata`\n if (this._bbox) return;\n\n this._bbox = value;\n if ('west' in value) {\n this.boundingBox = [\n [value.west, value.south],\n [value.east, value.north]\n ];\n } else {\n this.boundingBox = [\n [value.left, value.top],\n [value.right, value.bottom]\n ];\n }\n }\n\n get data(): Promise<DataT | null> | DataT | null {\n return this.isLoading && this._loader ? this._loader.then(() => this.data) : this.content;\n }\n\n get isLoaded(): boolean {\n return this._isLoaded && !this._needsReload;\n }\n\n get isLoading(): boolean {\n return Boolean(this._loader) && !this._isCancelled;\n }\n\n get needsReload(): boolean {\n return this._needsReload || this._isCancelled;\n }\n\n get byteLength(): number {\n const result = this.content ? (this.content as any).byteLength : 0;\n if (!Number.isFinite(result)) {\n // eslint-disable-next-line no-console\n console.error('byteLength not defined in tile data');\n }\n return result;\n }\n\n /* eslint-disable max-statements */\n private async _loadData({\n getData,\n requestScheduler,\n onLoad,\n onError\n }: TileLoadDataProps<DataT>): Promise<void> {\n const {index, id, bbox, userData, zoom} = this;\n const loaderId = this._loaderId;\n\n this._abortController = new AbortController();\n const {signal} = this._abortController;\n\n // @ts-expect-error (2345) Argument of type '(tile: any) => 1 | -1' is not assignable ...\n const requestToken = await requestScheduler.scheduleRequest(this, tile => {\n return tile.isSelected ? 1 : -1;\n });\n\n if (!requestToken) {\n this._isCancelled = true;\n return;\n }\n // A tile can be cancelled while being scheduled\n if (this._isCancelled) {\n requestToken.done();\n return;\n }\n\n let tileData: DataT | null = null;\n let error;\n try {\n tileData = await getData({index, id, bbox, userData, zoom, signal});\n } catch (err) {\n error = err || true;\n } finally {\n requestToken.done();\n }\n\n // If loadData has been called with a newer version, discard the result from this operation\n if (loaderId !== this._loaderId) {\n return;\n }\n // Clear the `isLoading` flag\n this._loader = undefined;\n // Rewrite tile content with the result of getTileData if successful, or `null` in case of\n // error or cancellation\n this.content = tileData;\n // If cancelled, do not invoke the callbacks\n // Consider it loaded if we tried to cancel but `getTileData` still returned data\n if (this._isCancelled && !tileData) {\n this._isLoaded = false;\n return;\n }\n this._isLoaded = true;\n this._isCancelled = false;\n\n if (error) {\n onError(error, this);\n } else {\n onLoad(this);\n }\n }\n\n loadData(opts: TileLoadDataProps): Promise<void> {\n this._isLoaded = false;\n this._isCancelled = false;\n this._needsReload = false;\n this._loaderId++;\n this._loader = this._loadData(opts);\n return this._loader;\n }\n\n setNeedsReload(): void {\n if (this.isLoading) {\n this.abort();\n this._loader = undefined;\n }\n this._needsReload = true;\n }\n\n abort(): void {\n if (this.isLoaded) {\n return;\n }\n\n this._isCancelled = true;\n this._abortController?.abort();\n }\n}\n"],"file":"tile-2d-header.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tileset-2d/tile-2d-traversal.ts"],"names":["TILE_SIZE","MAX_MAPS","REF_POINTS_5","REF_POINTS_9","concat","REF_POINTS_11","OSMNode","x","y","z","_children","params","viewport","cullingVolume","elevationBounds","minZ","maxZ","bounds","offset","project","boundingVolume","getBoundingVolume","insideBounds","isInside","computeVisibility","childVisible","distance","distanceTo","cameraPosition","scale","height","Math","floor","log2","selected","children","child","update","result","push","node","getSelected","minX","minY","maxX","maxY","pow","extent","zRange","worldOffset","refPoints","refPointPositions","p","lngLat","originX","originY","AxisAlignedBoundingBox","getOSMTileIndices","_GlobeViewport","resolution","projectPosition","planes","Object","values","getFrustumPlanes","map","normal","Plane","clone","negate","CullingVolume","unitsPerMeter","distanceScales","elevationMin","elevationMax","WebMercatorViewport","pitch","minLng","minLat","maxLng","maxLat","topLeft","bottomRight","root","traversalParams","subViewports","length"],"mappings":"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","sourcesContent":["import {Viewport, WebMercatorViewport, _GlobeViewport} from '@deck.gl/core';\n\nimport {\n CullingVolume,\n Plane,\n AxisAlignedBoundingBox,\n makeOrientedBoundingBoxFromPoints\n} from '@math.gl/culling';\nimport {lngLatToWorld} from '@math.gl/web-mercator';\nimport {Bounds, TileIndex, ZRange} from './types';\nimport {osmTile2lngLat} from './utils';\n\nconst TILE_SIZE = 512;\n// number of world copies to check\nconst MAX_MAPS = 3;\n// for calculating bounding volume of a tile in a non-web-mercator viewport\nconst REF_POINTS_5 = [\n [0.5, 0.5],\n [0, 0],\n [0, 1],\n [1, 0],\n [1, 1]\n]; // 4 corners and center\nconst REF_POINTS_9 = REF_POINTS_5.concat([\n [0, 0.5],\n [0.5, 0],\n [1, 0.5],\n [0.5, 1]\n]); // 4 corners, center and 4 mid points\nconst REF_POINTS_11 = REF_POINTS_9.concat([\n [0.25, 0.5],\n [0.75, 0.5]\n]); // 2 additional points on equator for top tile\n\nclass OSMNode {\n x: number;\n y: number;\n z: number;\n\n private childVisible?: boolean;\n private selected?: boolean;\n\n private _children?: OSMNode[];\n\n constructor(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n\n get children() {\n if (!this._children) {\n const x = this.x * 2;\n const y = this.y * 2;\n const z = this.z + 1;\n this._children = [\n new OSMNode(x, y, z),\n new OSMNode(x, y + 1, z),\n new OSMNode(x + 1, y, z),\n new OSMNode(x + 1, y + 1, z)\n ];\n }\n return this._children;\n }\n\n // eslint-disable-next-line complexity\n update(params: {\n viewport: Viewport;\n project: ((xyz: number[]) => number[]) | null;\n cullingVolume: CullingVolume;\n elevationBounds: ZRange;\n minZ: number;\n maxZ: number;\n bounds?: Bounds;\n offset: number;\n }) {\n const {viewport, cullingVolume, elevationBounds, minZ, maxZ, bounds, offset, project} = params;\n const boundingVolume = this.getBoundingVolume(elevationBounds, offset, project);\n\n // First, check if this tile is visible\n if (bounds && !this.insideBounds(bounds)) {\n return false;\n }\n\n const isInside = cullingVolume.computeVisibility(boundingVolume);\n if (isInside < 0) {\n return false;\n }\n\n // Avoid loading overlapping tiles - if a descendant is requested, do not request the ancester\n if (!this.childVisible) {\n let {z} = this;\n if (z < maxZ && z >= minZ) {\n // Adjust LOD\n // If the tile is far enough from the camera, accept a lower zoom level\n const distance =\n (boundingVolume.distanceTo(viewport.cameraPosition) * viewport.scale) / viewport.height;\n z += Math.floor(Math.log2(distance));\n }\n if (z >= maxZ) {\n // LOD is acceptable\n this.selected = true;\n return true;\n }\n }\n\n // LOD is not enough, recursively test child tiles\n this.selected = false;\n this.childVisible = true;\n for (const child of this.children) {\n child.update(params);\n }\n return true;\n }\n\n getSelected(result: OSMNode[] = []): OSMNode[] {\n if (this.selected) {\n result.push(this);\n }\n if (this._children) {\n for (const node of this._children) {\n node.getSelected(result);\n }\n }\n return result;\n }\n\n insideBounds([minX, minY, maxX, maxY]: Bounds): boolean {\n const scale = Math.pow(2, this.z);\n const extent = TILE_SIZE / scale;\n\n return (\n this.x * extent < maxX &&\n this.y * extent < maxY &&\n (this.x + 1) * extent > minX &&\n (this.y + 1) * extent > minY\n );\n }\n\n getBoundingVolume(\n zRange: ZRange,\n worldOffset: number,\n project: ((xyz: number[]) => number[]) | null\n ) {\n if (project) {\n // Custom projection\n // Estimate bounding box from sample points\n // At low zoom level we need more samples to calculate the bounding volume correctly\n const refPoints = this.z < 1 ? REF_POINTS_11 : this.z < 2 ? REF_POINTS_9 : REF_POINTS_5;\n\n // Convert from tile-relative coordinates to common space\n const refPointPositions: number[][] = [];\n for (const p of refPoints) {\n const lngLat: number[] = osmTile2lngLat(this.x + p[0], this.y + p[1], this.z);\n lngLat[2] = zRange[0];\n refPointPositions.push(project(lngLat));\n\n if (zRange[0] !== zRange[1]) {\n // Account for the elevation volume\n lngLat[2] = zRange[1];\n refPointPositions.push(project(lngLat));\n }\n }\n\n return makeOrientedBoundingBoxFromPoints(refPointPositions);\n }\n\n // Use WebMercator projection\n const scale = Math.pow(2, this.z);\n const extent = TILE_SIZE / scale;\n const originX = this.x * extent + worldOffset * TILE_SIZE;\n // deck's common space is y-flipped\n const originY = TILE_SIZE - (this.y + 1) * extent;\n\n return new AxisAlignedBoundingBox(\n [originX, originY, zRange[0]],\n [originX + extent, originY + extent, zRange[1]]\n );\n }\n}\n\n// eslint-disable-next-line complexity\nexport function getOSMTileIndices(\n viewport: Viewport,\n maxZ: number,\n zRange: ZRange | undefined,\n bounds?: Bounds\n): TileIndex[] {\n const project: ((xyz: number[]) => number[]) | null =\n viewport instanceof _GlobeViewport && viewport.resolution\n ? // eslint-disable-next-line @typescript-eslint/unbound-method\n viewport.projectPosition\n : null;\n\n // Get the culling volume of the current camera\n const planes: Plane[] = Object.values(viewport.getFrustumPlanes()).map(\n ({normal, distance}) => new Plane(normal.clone().negate(), distance)\n );\n const cullingVolume = new CullingVolume(planes);\n\n // Project zRange from meters to common space\n const unitsPerMeter = viewport.distanceScales.unitsPerMeter[2];\n const elevationMin = (zRange && zRange[0] * unitsPerMeter) || 0;\n const elevationMax = (zRange && zRange[1] * unitsPerMeter) || 0;\n\n // Always load at the current zoom level if pitch is small\n const minZ = viewport instanceof WebMercatorViewport && viewport.pitch <= 60 ? maxZ : 0;\n\n // Map extent to OSM position\n if (bounds) {\n const [minLng, minLat, maxLng, maxLat] = bounds;\n const topLeft = lngLatToWorld([minLng, maxLat]);\n const bottomRight = lngLatToWorld([maxLng, minLat]);\n bounds = [topLeft[0], TILE_SIZE - topLeft[1], bottomRight[0], TILE_SIZE - bottomRight[1]];\n }\n\n const root = new OSMNode(0, 0, 0);\n const traversalParams = {\n viewport,\n project,\n cullingVolume,\n elevationBounds: [elevationMin, elevationMax] as ZRange,\n minZ,\n maxZ,\n bounds,\n // num. of worlds from the center. For repeated maps\n offset: 0\n };\n\n root.update(traversalParams);\n\n if (\n viewport instanceof WebMercatorViewport &&\n viewport.subViewports &&\n viewport.subViewports.length > 1\n ) {\n // Check worlds in repeated maps\n traversalParams.offset = -1;\n while (root.update(traversalParams)) {\n if (--traversalParams.offset < -MAX_MAPS) {\n break;\n }\n }\n traversalParams.offset = 1;\n while (root.update(traversalParams)) {\n if (++traversalParams.offset > MAX_MAPS) {\n break;\n }\n }\n }\n\n return root.getSelected();\n}\n"],"file":"tile-2d-traversal.js"}
1
+ {"version":3,"sources":["../../../src/tileset-2d/tile-2d-traversal.ts"],"names":["TILE_SIZE","MAX_MAPS","REF_POINTS_5","REF_POINTS_9","concat","REF_POINTS_11","OSMNode","x","y","z","_children","params","viewport","cullingVolume","elevationBounds","minZ","maxZ","bounds","offset","project","boundingVolume","getBoundingVolume","insideBounds","isInside","computeVisibility","childVisible","distance","distanceTo","cameraPosition","scale","height","Math","floor","log2","selected","children","child","update","result","push","node","getSelected","minX","minY","maxX","maxY","pow","extent","zRange","worldOffset","refPoints","refPointPositions","p","lngLat","originX","originY","AxisAlignedBoundingBox","getOSMTileIndices","_GlobeViewport","resolution","projectPosition","planes","Object","values","getFrustumPlanes","map","normal","Plane","clone","negate","CullingVolume","unitsPerMeter","distanceScales","elevationMin","elevationMax","WebMercatorViewport","pitch","minLng","minLat","maxLng","maxLat","topLeft","bottomRight","root","traversalParams","subViewports","length"],"mappings":"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","sourcesContent":["import {Viewport, WebMercatorViewport, _GlobeViewport} from '@deck.gl/core';\n\nimport {\n CullingVolume,\n Plane,\n AxisAlignedBoundingBox,\n makeOrientedBoundingBoxFromPoints\n} from '@math.gl/culling';\nimport {lngLatToWorld} from '@math.gl/web-mercator';\nimport {Bounds, TileIndex, ZRange} from './types';\nimport {osmTile2lngLat} from './utils';\n\nconst TILE_SIZE = 512;\n// number of world copies to check\nconst MAX_MAPS = 3;\n// for calculating bounding volume of a tile in a non-web-mercator viewport\nconst REF_POINTS_5 = [\n [0.5, 0.5],\n [0, 0],\n [0, 1],\n [1, 0],\n [1, 1]\n]; // 4 corners and center\nconst REF_POINTS_9 = REF_POINTS_5.concat([\n [0, 0.5],\n [0.5, 0],\n [1, 0.5],\n [0.5, 1]\n]); // 4 corners, center and 4 mid points\nconst REF_POINTS_11 = REF_POINTS_9.concat([\n [0.25, 0.5],\n [0.75, 0.5]\n]); // 2 additional points on equator for top tile\n\nclass OSMNode {\n x: number;\n y: number;\n z: number;\n\n private childVisible?: boolean;\n private selected?: boolean;\n\n private _children?: OSMNode[];\n\n constructor(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n\n get children() {\n if (!this._children) {\n const x = this.x * 2;\n const y = this.y * 2;\n const z = this.z + 1;\n this._children = [\n new OSMNode(x, y, z),\n new OSMNode(x, y + 1, z),\n new OSMNode(x + 1, y, z),\n new OSMNode(x + 1, y + 1, z)\n ];\n }\n return this._children;\n }\n\n // eslint-disable-next-line complexity\n update(params: {\n viewport: Viewport;\n project: ((xyz: number[]) => number[]) | null;\n cullingVolume: CullingVolume;\n elevationBounds: ZRange;\n minZ: number;\n maxZ: number;\n bounds?: Bounds;\n offset: number;\n }) {\n const {viewport, cullingVolume, elevationBounds, minZ, maxZ, bounds, offset, project} = params;\n const boundingVolume = this.getBoundingVolume(elevationBounds, offset, project);\n\n // First, check if this tile is visible\n if (bounds && !this.insideBounds(bounds)) {\n return false;\n }\n\n const isInside = cullingVolume.computeVisibility(boundingVolume);\n if (isInside < 0) {\n return false;\n }\n\n // Avoid loading overlapping tiles - if a descendant is requested, do not request the ancester\n if (!this.childVisible) {\n let {z} = this;\n if (z < maxZ && z >= minZ) {\n // Adjust LOD\n // If the tile is far enough from the camera, accept a lower zoom level\n const distance =\n (boundingVolume.distanceTo(viewport.cameraPosition) * viewport.scale) / viewport.height;\n z += Math.floor(Math.log2(distance));\n }\n if (z >= maxZ) {\n // LOD is acceptable\n this.selected = true;\n return true;\n }\n }\n\n // LOD is not enough, recursively test child tiles\n this.selected = false;\n this.childVisible = true;\n for (const child of this.children) {\n child.update(params);\n }\n return true;\n }\n\n getSelected(result: OSMNode[] = []): OSMNode[] {\n if (this.selected) {\n result.push(this);\n }\n if (this._children) {\n for (const node of this._children) {\n node.getSelected(result);\n }\n }\n return result;\n }\n\n insideBounds([minX, minY, maxX, maxY]: Bounds): boolean {\n const scale = Math.pow(2, this.z);\n const extent = TILE_SIZE / scale;\n\n return (\n this.x * extent < maxX &&\n this.y * extent < maxY &&\n (this.x + 1) * extent > minX &&\n (this.y + 1) * extent > minY\n );\n }\n\n getBoundingVolume(\n zRange: ZRange,\n worldOffset: number,\n project: ((xyz: number[]) => number[]) | null\n ) {\n if (project) {\n // Custom projection\n // Estimate bounding box from sample points\n // At low zoom level we need more samples to calculate the bounding volume correctly\n const refPoints = this.z < 1 ? REF_POINTS_11 : this.z < 2 ? REF_POINTS_9 : REF_POINTS_5;\n\n // Convert from tile-relative coordinates to common space\n const refPointPositions: number[][] = [];\n for (const p of refPoints) {\n const lngLat: number[] = osmTile2lngLat(this.x + p[0], this.y + p[1], this.z);\n lngLat[2] = zRange[0];\n refPointPositions.push(project(lngLat));\n\n if (zRange[0] !== zRange[1]) {\n // Account for the elevation volume\n lngLat[2] = zRange[1];\n refPointPositions.push(project(lngLat));\n }\n }\n\n return makeOrientedBoundingBoxFromPoints(refPointPositions);\n }\n\n // Use WebMercator projection\n const scale = Math.pow(2, this.z);\n const extent = TILE_SIZE / scale;\n const originX = this.x * extent + worldOffset * TILE_SIZE;\n // deck's common space is y-flipped\n const originY = TILE_SIZE - (this.y + 1) * extent;\n\n return new AxisAlignedBoundingBox(\n [originX, originY, zRange[0]],\n [originX + extent, originY + extent, zRange[1]]\n );\n }\n}\n\n// eslint-disable-next-line complexity\nexport function getOSMTileIndices(\n viewport: Viewport,\n maxZ: number,\n zRange: ZRange | null,\n bounds?: Bounds\n): TileIndex[] {\n const project: ((xyz: number[]) => number[]) | null =\n viewport instanceof _GlobeViewport && viewport.resolution\n ? // eslint-disable-next-line @typescript-eslint/unbound-method\n viewport.projectPosition\n : null;\n\n // Get the culling volume of the current camera\n const planes: Plane[] = Object.values(viewport.getFrustumPlanes()).map(\n ({normal, distance}) => new Plane(normal.clone().negate(), distance)\n );\n const cullingVolume = new CullingVolume(planes);\n\n // Project zRange from meters to common space\n const unitsPerMeter = viewport.distanceScales.unitsPerMeter[2];\n const elevationMin = (zRange && zRange[0] * unitsPerMeter) || 0;\n const elevationMax = (zRange && zRange[1] * unitsPerMeter) || 0;\n\n // Always load at the current zoom level if pitch is small\n const minZ = viewport instanceof WebMercatorViewport && viewport.pitch <= 60 ? maxZ : 0;\n\n // Map extent to OSM position\n if (bounds) {\n const [minLng, minLat, maxLng, maxLat] = bounds;\n const topLeft = lngLatToWorld([minLng, maxLat]);\n const bottomRight = lngLatToWorld([maxLng, minLat]);\n bounds = [topLeft[0], TILE_SIZE - topLeft[1], bottomRight[0], TILE_SIZE - bottomRight[1]];\n }\n\n const root = new OSMNode(0, 0, 0);\n const traversalParams = {\n viewport,\n project,\n cullingVolume,\n elevationBounds: [elevationMin, elevationMax] as ZRange,\n minZ,\n maxZ,\n bounds,\n // num. of worlds from the center. For repeated maps\n offset: 0\n };\n\n root.update(traversalParams);\n\n if (\n viewport instanceof WebMercatorViewport &&\n viewport.subViewports &&\n viewport.subViewports.length > 1\n ) {\n // Check worlds in repeated maps\n traversalParams.offset = -1;\n while (root.update(traversalParams)) {\n if (--traversalParams.offset < -MAX_MAPS) {\n break;\n }\n }\n traversalParams.offset = 1;\n while (root.update(traversalParams)) {\n if (++traversalParams.offset > MAX_MAPS) {\n break;\n }\n }\n }\n\n return root.getSelected();\n}\n"],"file":"tile-2d-traversal.js"}
@@ -108,6 +108,7 @@ var Tileset2D = function () {
108
108
  this._dirty = false;
109
109
  this._cacheByteSize = 0;
110
110
  this._viewport = null;
111
+ this._zRange = null;
111
112
  this._selectedTiles = null;
112
113
  this._frameNumber = 0;
113
114
  this._modelMatrix = new _core.Matrix4();
@@ -206,11 +207,14 @@ var Tileset2D = function () {
206
207
  value: function update(viewport) {
207
208
  var _this2 = this;
208
209
 
209
- var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
210
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
211
+ zRange: null,
212
+ modelMatrix: null
213
+ },
210
214
  zRange = _ref.zRange,
211
215
  modelMatrix = _ref.modelMatrix;
212
216
 
213
- var modelMatrixAsMatrix4 = new _core.Matrix4(modelMatrix);
217
+ var modelMatrixAsMatrix4 = modelMatrix ? new _core.Matrix4(modelMatrix) : new _core.Matrix4();
214
218
  var isModelMatrixNew = !modelMatrixAsMatrix4.equals(this._modelMatrix);
215
219
 
216
220
  if (!this._viewport || !viewport.equals(this._viewport) || !(0, _core.equals)(this._zRange, zRange) || isModelMatrixNew) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tileset-2d/tileset-2d.ts"],"names":["TILE_STATE_VISITED","TILE_STATE_VISIBLE","STRATEGY_NEVER","STRATEGY_REPLACE","STRATEGY_DEFAULT","DEFAULT_CACHE_SCALE","STRATEGIES","updateTileStateDefault","updateTileStateReplace","DEFAULT_TILESET2D_PROPS","extent","tileSize","maxZoom","minZoom","maxCacheSize","maxCacheByteSize","refinementStrategy","zRange","maxRequests","zoomOffset","onTileLoad","onTileUnload","onTileError","Tileset2D","opts","getCullBounds","tile","_cacheByteSize","byteLength","_resizeCache","_requestScheduler","RequestScheduler","throttleRequests","Boolean","_cache","Map","_tiles","_dirty","_viewport","_selectedTiles","_frameNumber","_modelMatrix","Matrix4","_modelMatrixInverse","setOptions","every","isLoaded","some","needsReload","Object","assign","Number","isFinite","_maxZoom","Math","floor","_minZoom","ceil","values","isLoading","abort","clear","keys","id","get","includes","delete","setNeedsReload","viewport","modelMatrix","modelMatrixAsMatrix4","isModelMatrixNew","equals","_zRange","clone","invert","tileIndices","getTileIndices","modelMatrixInverse","map","index","_getTile","_rebuildTree","changed","updateTileStates","_pruneRequests","cullRect","isVisible","boundsArr","_getCullBounds","z","bbox","minX","minY","maxX","maxY","overlaps","west","east","south","north","y0","min","top","bottom","y1","max","left","right","x","y","visibilities","Array","size","i","isSelected","from","abortCandidates","ongoingRequestCount","push","length","shift","parent","children","_getNearestAncestor","Infinity","selectedTiles","overflown","sort","t1","t2","zoom","create","getTileId","Tile2DHeader","getTileMetadata","getTileZoom","set","loadData","getData","getTileData","requestScheduler","onLoad","onError","getParentIndex","allTiles","state","getPlaceholderInAncestors","getPlaceholderInChildren","sortedTiles","child","startTile","content"],"mappings":"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","sourcesContent":["import {Viewport} from '@deck.gl/core';\n\nimport {RequestScheduler} from '@loaders.gl/loader-utils';\nimport {Matrix4, equals} from '@math.gl/core';\n\nimport {Tile2DHeader} from './tile-2d-header';\n\nimport {getTileIndices, tileToBoundingBox, getCullBounds} from './utils';\nimport {Bounds, TileIndex, ZRange} from './types';\nimport {TileLoadProps} from './types';\nimport {memoize} from './memoize';\n\n// bit masks\nconst TILE_STATE_VISITED = 1;\nconst TILE_STATE_VISIBLE = 2;\n/*\n show cached parent tile if children are loading\n +-----------+ +-----+ +-----+-----+\n | | | | | | |\n | | | | | | |\n | | --> +-----+-----+ -> +-----+-----+\n | | | | | | |\n | | | | | | |\n +-----------+ +-----+ +-----+-----+\n\n show cached children tiles when parent is loading\n +-------+---- +------------\n | | |\n | | |\n | | |\n +-------+---- --> |\n | | |\n */\n\nexport const STRATEGY_NEVER = 'never';\nexport const STRATEGY_REPLACE = 'no-overlap';\nexport const STRATEGY_DEFAULT = 'best-available';\n\nexport type RefinementStrategyFunction = (tiles: Tile2DHeader[]) => void;\nexport type RefinementStrategy =\n | 'never'\n | 'no-overlap'\n | 'best-available'\n | RefinementStrategyFunction;\n\nconst DEFAULT_CACHE_SCALE = 5;\n\nconst STRATEGIES = {\n [STRATEGY_DEFAULT]: updateTileStateDefault,\n [STRATEGY_REPLACE]: updateTileStateReplace,\n [STRATEGY_NEVER]: () => {}\n};\n\nexport type Tileset2DProps<DataT = any> = {\n /** `getTileData` is called to retrieve the data of each tile. */\n getTileData: (props: TileLoadProps) => Promise<DataT> | DataT;\n\n /** The bounding box of the layer's data. */\n extent?: number[] | null;\n /** The pixel dimension of the tiles, usually a power of 2. */\n tileSize?: number;\n /** The max zoom level of the layer's data. @default null */\n maxZoom?: number | null;\n /** The min zoom level of the layer's data. @default 0 */\n minZoom?: number | null;\n /** The maximum number of tiles that can be cached. */\n maxCacheSize?: number | null;\n /** The maximum memory used for caching tiles. @default null */\n maxCacheByteSize?: number | null;\n /** How the tile layer refines the visibility of tiles. @default 'best-available' */\n refinementStrategy?: RefinementStrategy;\n /** Range of minimum and maximum heights in the tile. */\n zRange?: ZRange | null;\n /** The maximum number of concurrent getTileData calls. @default 6 */\n maxRequests?: number;\n /** Changes the zoom level at which the tiles are fetched. Needs to be an integer. @default 0 */\n zoomOffset?: number;\n\n /** Called when a tile successfully loads. */\n onTileLoad?: (tile: Tile2DHeader<DataT>) => void;\n /** Called when a tile is cleared from cache. */\n onTileUnload?: (tile: Tile2DHeader<DataT>) => void;\n /** Called when a tile failed to load. */\n onTileError?: (err: any, tile: Tile2DHeader<DataT>) => void;\n\n // onTileLoad: (tile: Tile2DHeader) => void;\n // onTileUnload: (tile: Tile2DHeader) => void;\n // onTileError: (error: any, tile: Tile2DHeader) => void;\n /** Called when all tiles in the current viewport are loaded. */\n // sonViewportLoad?: ((tiles: Tile2DHeader<DataT>[]) => void) | null;\n};\n\nexport const DEFAULT_TILESET2D_PROPS: Omit<Required<Tileset2DProps>, 'getTileData'> = {\n extent: null,\n tileSize: 512,\n\n maxZoom: null,\n minZoom: null,\n maxCacheSize: null,\n maxCacheByteSize: null,\n refinementStrategy: 'best-available',\n zRange: null,\n maxRequests: 6,\n zoomOffset: 0,\n\n // onTileLoad: (tile: Tile2DHeader) => void, // onTileUnload: (tile: Tile2DHeader) => void, // onTileError: (error: any, tile: Tile2DHeader) => void, /** Called when all tiles in the current viewport are loaded. */\n // onViewportLoad: ((tiles: Tile2DHeader<DataT>[]) => void) | null,\n onTileLoad: () => {},\n onTileUnload: () => {},\n onTileError: () => {}\n};\n\n/**\n * Manages loading and purging of tile data. This class caches recently visited tiles\n * and only creates new tiles if they are present.\n */\nexport class Tileset2D {\n private opts: Required<Tileset2DProps>;\n private _requestScheduler: RequestScheduler;\n private _cache: Map<string, Tile2DHeader>;\n private _dirty: boolean;\n private _tiles: Tile2DHeader[];\n\n private _cacheByteSize: number;\n private _viewport: Viewport | null;\n private _zRange?: ZRange;\n private _selectedTiles: Tile2DHeader[] | null;\n private _frameNumber: number;\n private _modelMatrix: Matrix4;\n private _modelMatrixInverse: Matrix4;\n\n private _maxZoom?: number;\n private _minZoom?: number;\n\n private onTileLoad: (tile: Tile2DHeader) => void;\n\n /**\n * Takes in a function that returns tile data, a cache size, and a max and a min zoom level.\n * Cache size defaults to 5 * number of tiles in the current viewport\n */\n constructor(opts: Tileset2DProps) {\n this.opts = {...DEFAULT_TILESET2D_PROPS, ...opts};\n\n this.onTileLoad = tile => {\n this.opts.onTileLoad?.(tile);\n if (this.opts.maxCacheByteSize) {\n this._cacheByteSize += tile.byteLength;\n this._resizeCache();\n }\n };\n\n this._requestScheduler = new RequestScheduler({\n maxRequests: opts.maxRequests,\n throttleRequests: Boolean(opts.maxRequests && opts.maxRequests > 0)\n });\n\n // Maps tile id in string {z}-{x}-{y} to a Tile object\n this._cache = new Map();\n this._tiles = [];\n this._dirty = false;\n this._cacheByteSize = 0;\n\n // Cache the last processed viewport\n this._viewport = null;\n this._selectedTiles = null;\n this._frameNumber = 0;\n\n this._modelMatrix = new Matrix4();\n this._modelMatrixInverse = new Matrix4();\n\n this.setOptions(opts);\n }\n\n /* Public API */\n get tiles() {\n return this._tiles;\n }\n\n get selectedTiles(): Tile2DHeader[] | null {\n return this._selectedTiles;\n }\n\n get isLoaded(): boolean {\n return this._selectedTiles !== null && this._selectedTiles.every(tile => tile.isLoaded);\n }\n\n get needsReload(): boolean {\n return this._selectedTiles !== null && this._selectedTiles.some(tile => tile.needsReload);\n }\n\n setOptions(opts: Tileset2DProps): void {\n Object.assign(this.opts, opts);\n if (Number.isFinite(opts.maxZoom)) {\n this._maxZoom = Math.floor(opts.maxZoom as number);\n }\n if (Number.isFinite(opts.minZoom)) {\n this._minZoom = Math.ceil(opts.minZoom as number);\n }\n }\n\n // Clean up any outstanding tile requests.\n finalize(): void {\n for (const tile of this._cache.values()) {\n if (tile.isLoading) {\n tile.abort();\n }\n }\n this._cache.clear();\n this._tiles = [];\n this._selectedTiles = null;\n }\n\n reloadAll(): void {\n for (const id of this._cache.keys()) {\n const tile = this._cache.get(id) as Tile2DHeader;\n if (!this._selectedTiles || !this._selectedTiles.includes(tile)) {\n this._cache.delete(id);\n } else {\n tile.setNeedsReload();\n }\n }\n }\n\n /**\n * Update the cache with the given viewport and model matrix and triggers callback onUpdate.\n */\n update(\n viewport: Viewport,\n {zRange, modelMatrix}: {zRange?: ZRange; modelMatrix?: Matrix4} = {}\n ): number {\n const modelMatrixAsMatrix4 = new Matrix4(modelMatrix);\n const isModelMatrixNew = !modelMatrixAsMatrix4.equals(this._modelMatrix);\n if (\n !this._viewport ||\n !viewport.equals(this._viewport) ||\n !equals(this._zRange, zRange) ||\n isModelMatrixNew\n ) {\n if (isModelMatrixNew) {\n this._modelMatrixInverse = modelMatrixAsMatrix4.clone().invert();\n this._modelMatrix = modelMatrixAsMatrix4;\n }\n this._viewport = viewport;\n this._zRange = zRange;\n const tileIndices = this.getTileIndices({\n viewport,\n maxZoom: this._maxZoom,\n minZoom: this._minZoom,\n zRange,\n modelMatrix: this._modelMatrix,\n modelMatrixInverse: this._modelMatrixInverse\n });\n this._selectedTiles = tileIndices.map(index => this._getTile(index, true));\n\n if (this._dirty) {\n // Some new tiles are added\n this._rebuildTree();\n }\n // Check for needed reloads explicitly even if the view/matrix has not changed.\n } else if (this.needsReload) {\n this._selectedTiles = this._selectedTiles!.map(tile => this._getTile(tile.index, true));\n }\n\n // Update tile states\n const changed = this.updateTileStates();\n this._pruneRequests();\n\n if (this._dirty) {\n // cache size is either the user defined maxSize or 5 * number of current tiles in the viewport.\n this._resizeCache();\n }\n\n if (changed) {\n this._frameNumber++;\n }\n\n return this._frameNumber;\n }\n\n // eslint-disable-next-line complexity\n isTileVisible(\n tile: Tile2DHeader,\n cullRect?: {x: number; y: number; width: number; height: number}\n ): boolean {\n if (!tile.isVisible) {\n return false;\n }\n\n if (cullRect && this._viewport) {\n const boundsArr = this._getCullBounds({\n viewport: this._viewport,\n z: this._zRange,\n cullRect\n });\n const {bbox} = tile;\n for (const [minX, minY, maxX, maxY] of boundsArr) {\n let overlaps;\n if ('west' in bbox) {\n overlaps = bbox.west < maxX && bbox.east > minX && bbox.south < maxY && bbox.north > minY;\n } else {\n // top/bottom could be swapped depending on the indexing system\n const y0 = Math.min(bbox.top, bbox.bottom);\n const y1 = Math.max(bbox.top, bbox.bottom);\n overlaps = bbox.left < maxX && bbox.right > minX && y0 < maxY && y1 > minY;\n }\n if (overlaps) {\n return true;\n }\n }\n return false;\n }\n return true;\n }\n\n /* Public interface for subclassing */\n\n /** Returns array of tile indices in the current viewport */\n getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n modelMatrix,\n modelMatrixInverse\n }: {\n viewport: Viewport;\n maxZoom?: number;\n minZoom?: number;\n zRange: ZRange | undefined;\n tileSize?: number;\n modelMatrix?: Matrix4;\n modelMatrixInverse?: Matrix4;\n zoomOffset?: number;\n }): TileIndex[] {\n const {tileSize, extent, zoomOffset} = this.opts;\n return getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n tileSize,\n extent: extent as Bounds | undefined,\n modelMatrix,\n modelMatrixInverse,\n zoomOffset\n });\n }\n\n /** Returns unique string key for a tile index */\n getTileId(index: TileIndex) {\n return `${index.x}-${index.y}-${index.z}`;\n }\n\n /** Returns a zoom level for a tile index */\n getTileZoom(index: TileIndex) {\n return index.z;\n }\n\n /** Returns additional metadata to add to tile, bbox by default */\n getTileMetadata(index: TileIndex): Record<string, any> {\n const {tileSize} = this.opts;\n // @ts-expect-error\n return {bbox: tileToBoundingBox(this._viewport, index.x, index.y, index.z, tileSize)};\n }\n\n /** Returns index of the parent tile */\n getParentIndex(index: TileIndex) {\n const x = Math.floor(index.x / 2);\n const y = Math.floor(index.y / 2);\n const z = index.z - 1;\n return {x, y, z};\n }\n\n // Returns true if any tile's visibility changed\n private updateTileStates() {\n const refinementStrategy = this.opts.refinementStrategy || STRATEGY_DEFAULT;\n\n const visibilities = new Array(this._cache.size);\n let i = 0;\n // Reset state\n for (const tile of this._cache.values()) {\n // save previous state\n visibilities[i++] = tile.isVisible;\n tile.isSelected = false;\n tile.isVisible = false;\n }\n // @ts-expect-error called only when _selectedTiles is already defined\n for (const tile of this._selectedTiles) {\n tile.isSelected = true;\n tile.isVisible = true;\n }\n\n // Strategy-specific state logic\n (typeof refinementStrategy === 'function'\n ? refinementStrategy\n : STRATEGIES[refinementStrategy])(Array.from(this._cache.values()));\n\n i = 0;\n // Check if any visibility has changed\n for (const tile of this._cache.values()) {\n if (visibilities[i++] !== tile.isVisible) {\n return true;\n }\n }\n\n return false;\n }\n\n /* Private methods */\n\n private _getCullBounds = memoize(getCullBounds);\n\n private _pruneRequests(): void {\n const {maxRequests = 0} = this.opts;\n\n const abortCandidates: Tile2DHeader[] = [];\n let ongoingRequestCount = 0;\n for (const tile of this._cache.values()) {\n // Keep track of all the ongoing requests\n if (tile.isLoading) {\n ongoingRequestCount++;\n if (!tile.isSelected && !tile.isVisible) {\n abortCandidates.push(tile);\n }\n }\n }\n\n while (maxRequests > 0 && ongoingRequestCount > maxRequests && abortCandidates.length > 0) {\n // There are too many ongoing requests, so abort some that are unselected\n const tile = abortCandidates.shift()!;\n tile.abort();\n ongoingRequestCount--;\n }\n }\n\n // This needs to be called every time some tiles have been added/removed from cache\n private _rebuildTree() {\n const {_cache} = this;\n\n // Reset states\n for (const tile of _cache.values()) {\n tile.parent = null;\n if (tile.children) {\n tile.children.length = 0;\n }\n }\n\n // Rebuild tree\n for (const tile of _cache.values()) {\n const parent = this._getNearestAncestor(tile);\n tile.parent = parent;\n if (parent?.children) {\n parent.children.push(tile);\n }\n }\n }\n\n /**\n * Clear tiles that are not visible when the cache is full\n */\n /* eslint-disable complexity */\n private _resizeCache() {\n const {_cache, opts} = this;\n\n const maxCacheSize =\n opts.maxCacheSize ||\n // @ts-expect-error called only when selectedTiles is initialized\n (opts.maxCacheByteSize ? Infinity : DEFAULT_CACHE_SCALE * this.selectedTiles.length);\n const maxCacheByteSize = opts.maxCacheByteSize || Infinity;\n\n const overflown = _cache.size > maxCacheSize || this._cacheByteSize > maxCacheByteSize;\n\n if (overflown) {\n for (const [id, tile] of _cache) {\n if (!tile.isVisible && !tile.isSelected) {\n // delete tile\n this._cacheByteSize -= opts.maxCacheByteSize ? tile.byteLength : 0;\n _cache.delete(id);\n this.opts.onTileUnload?.(tile);\n }\n if (_cache.size <= maxCacheSize && this._cacheByteSize <= maxCacheByteSize) {\n break;\n }\n }\n this._rebuildTree();\n this._dirty = true;\n }\n if (this._dirty) {\n // sort by zoom level so that smaller tiles are displayed on top\n this._tiles = Array.from(this._cache.values()).sort((t1, t2) => t1.zoom - t2.zoom);\n\n this._dirty = false;\n }\n }\n /* eslint-enable complexity */\n\n private _getTile(index: TileIndex, create: true): Tile2DHeader;\n private _getTile(index: TileIndex, create?: false): Tile2DHeader | undefined;\n private _getTile(index: TileIndex, create?: boolean): Tile2DHeader | undefined {\n const id = this.getTileId(index);\n let tile = this._cache.get(id);\n let needsReload = false;\n\n if (!tile && create) {\n tile = new Tile2DHeader(index);\n Object.assign(tile, this.getTileMetadata(tile.index));\n Object.assign(tile, {id, zoom: this.getTileZoom(tile.index)});\n needsReload = true;\n this._cache.set(id, tile);\n this._dirty = true;\n } else if (tile && tile.needsReload) {\n needsReload = true;\n }\n if (tile && needsReload) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n tile.loadData({\n getData: this.opts.getTileData,\n requestScheduler: this._requestScheduler,\n onLoad: this.onTileLoad,\n onError: this.opts.onTileError\n });\n }\n\n return tile;\n }\n\n _getNearestAncestor(tile: Tile2DHeader): Tile2DHeader | null {\n const {_minZoom = 0} = this;\n\n let index = tile.index;\n while (this.getTileZoom(index) > _minZoom) {\n index = this.getParentIndex(index);\n const parent = this._getTile(index);\n if (parent) {\n return parent;\n }\n }\n return null;\n }\n}\n\n/* -- Refinement strategies --*/\n/* eslint-disable max-depth */\n\n// For all the selected && pending tiles:\n// - pick the closest ancestor as placeholder\n// - if no ancestor is visible, pick the closest children as placeholder\nfunction updateTileStateDefault(allTiles: Tile2DHeader[]) {\n for (const tile of allTiles) {\n tile.state = 0;\n }\n for (const tile of allTiles) {\n if (tile.isSelected && !getPlaceholderInAncestors(tile)) {\n getPlaceholderInChildren(tile);\n }\n }\n for (const tile of allTiles) {\n tile.isVisible = Boolean(tile.state! & TILE_STATE_VISIBLE);\n }\n}\n\n// Until a selected tile and all its selected siblings are loaded, use the closest ancestor as placeholder\nfunction updateTileStateReplace(allTiles: Tile2DHeader[]) {\n for (const tile of allTiles) {\n tile.state = 0;\n }\n for (const tile of allTiles) {\n if (tile.isSelected) {\n getPlaceholderInAncestors(tile);\n }\n }\n // Always process parents first\n const sortedTiles = Array.from(allTiles).sort((t1, t2) => t1.zoom - t2.zoom);\n for (const tile of sortedTiles) {\n tile.isVisible = Boolean(tile.state! & TILE_STATE_VISIBLE);\n\n if (tile.children && (tile.isVisible || tile.state! & TILE_STATE_VISITED)) {\n // If the tile is rendered, or if the tile has been explicitly hidden, hide all of its children\n for (const child of tile.children) {\n child.state = TILE_STATE_VISITED;\n }\n } else if (tile.isSelected) {\n getPlaceholderInChildren(tile);\n }\n }\n}\n\n// Walk up the tree until we find one ancestor that is loaded. Returns true if successful.\nfunction getPlaceholderInAncestors(startTile: Tile2DHeader) {\n let tile: Tile2DHeader | null = startTile;\n while (tile) {\n if (tile.isLoaded || tile.content) {\n tile.state! |= TILE_STATE_VISIBLE;\n return true;\n }\n tile = tile.parent;\n }\n return false;\n}\n\n// Recursively set children as placeholder\nfunction getPlaceholderInChildren(tile) {\n for (const child of tile.children) {\n if (child.isLoaded || child.content) {\n child.state |= TILE_STATE_VISIBLE;\n } else {\n getPlaceholderInChildren(child);\n }\n }\n}\n"],"file":"tileset-2d.js"}
1
+ {"version":3,"sources":["../../../src/tileset-2d/tileset-2d.ts"],"names":["TILE_STATE_VISITED","TILE_STATE_VISIBLE","STRATEGY_NEVER","STRATEGY_REPLACE","STRATEGY_DEFAULT","DEFAULT_CACHE_SCALE","STRATEGIES","updateTileStateDefault","updateTileStateReplace","DEFAULT_TILESET2D_PROPS","extent","tileSize","maxZoom","minZoom","maxCacheSize","maxCacheByteSize","refinementStrategy","zRange","maxRequests","zoomOffset","onTileLoad","onTileUnload","onTileError","Tileset2D","opts","getCullBounds","tile","_cacheByteSize","byteLength","_resizeCache","_requestScheduler","RequestScheduler","throttleRequests","Boolean","_cache","Map","_tiles","_dirty","_viewport","_zRange","_selectedTiles","_frameNumber","_modelMatrix","Matrix4","_modelMatrixInverse","setOptions","every","isLoaded","some","needsReload","Object","assign","Number","isFinite","_maxZoom","Math","floor","_minZoom","ceil","values","isLoading","abort","clear","keys","id","get","includes","delete","setNeedsReload","viewport","modelMatrix","modelMatrixAsMatrix4","isModelMatrixNew","equals","clone","invert","tileIndices","getTileIndices","modelMatrixInverse","map","index","_getTile","_rebuildTree","changed","updateTileStates","_pruneRequests","cullRect","isVisible","boundsArr","_getCullBounds","z","bbox","minX","minY","maxX","maxY","overlaps","west","east","south","north","y0","min","top","bottom","y1","max","left","right","x","y","visibilities","Array","size","i","isSelected","from","abortCandidates","ongoingRequestCount","push","length","shift","parent","children","_getNearestAncestor","Infinity","selectedTiles","overflown","sort","t1","t2","zoom","create","getTileId","Tile2DHeader","getTileMetadata","getTileZoom","set","loadData","getData","getTileData","requestScheduler","onLoad","onError","getParentIndex","allTiles","state","getPlaceholderInAncestors","getPlaceholderInChildren","sortedTiles","child","startTile","content"],"mappings":"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","sourcesContent":["import {Viewport} from '@deck.gl/core';\n\nimport {RequestScheduler} from '@loaders.gl/loader-utils';\nimport {Matrix4, NumericArray, equals} from '@math.gl/core';\n\nimport {Tile2DHeader} from './tile-2d-header';\n\nimport {getTileIndices, tileToBoundingBox, getCullBounds} from './utils';\nimport {Bounds, TileIndex, ZRange} from './types';\nimport {TileLoadProps} from './types';\nimport {memoize} from './memoize';\n\n// bit masks\nconst TILE_STATE_VISITED = 1;\nconst TILE_STATE_VISIBLE = 2;\n/*\n show cached parent tile if children are loading\n +-----------+ +-----+ +-----+-----+\n | | | | | | |\n | | | | | | |\n | | --> +-----+-----+ -> +-----+-----+\n | | | | | | |\n | | | | | | |\n +-----------+ +-----+ +-----+-----+\n\n show cached children tiles when parent is loading\n +-------+---- +------------\n | | |\n | | |\n | | |\n +-------+---- --> |\n | | |\n */\n\nexport const STRATEGY_NEVER = 'never';\nexport const STRATEGY_REPLACE = 'no-overlap';\nexport const STRATEGY_DEFAULT = 'best-available';\n\nexport type RefinementStrategyFunction = (tiles: Tile2DHeader[]) => void;\nexport type RefinementStrategy =\n | 'never'\n | 'no-overlap'\n | 'best-available'\n | RefinementStrategyFunction;\n\nconst DEFAULT_CACHE_SCALE = 5;\n\nconst STRATEGIES = {\n [STRATEGY_DEFAULT]: updateTileStateDefault,\n [STRATEGY_REPLACE]: updateTileStateReplace,\n [STRATEGY_NEVER]: () => {}\n};\n\nexport type Tileset2DProps<DataT = any> = {\n /** `getTileData` is called to retrieve the data of each tile. */\n getTileData: (props: TileLoadProps) => Promise<DataT> | DataT;\n\n /** The bounding box of the layer's data. */\n extent?: number[] | null;\n /** The pixel dimension of the tiles, usually a power of 2. */\n tileSize?: number;\n /** The max zoom level of the layer's data. @default null */\n maxZoom?: number | null;\n /** The min zoom level of the layer's data. @default 0 */\n minZoom?: number | null;\n /** The maximum number of tiles that can be cached. */\n maxCacheSize?: number | null;\n /** The maximum memory used for caching tiles. @default null */\n maxCacheByteSize?: number | null;\n /** How the tile layer refines the visibility of tiles. @default 'best-available' */\n refinementStrategy?: RefinementStrategy;\n /** Range of minimum and maximum heights in the tile. */\n zRange?: ZRange | null;\n /** The maximum number of concurrent getTileData calls. @default 6 */\n maxRequests?: number;\n /** Changes the zoom level at which the tiles are fetched. Needs to be an integer. @default 0 */\n zoomOffset?: number;\n\n /** Called when a tile successfully loads. */\n onTileLoad?: (tile: Tile2DHeader<DataT>) => void;\n /** Called when a tile is cleared from cache. */\n onTileUnload?: (tile: Tile2DHeader<DataT>) => void;\n /** Called when a tile failed to load. */\n onTileError?: (err: any, tile: Tile2DHeader<DataT>) => void;\n\n // onTileLoad: (tile: Tile2DHeader) => void;\n // onTileUnload: (tile: Tile2DHeader) => void;\n // onTileError: (error: any, tile: Tile2DHeader) => void;\n /** Called when all tiles in the current viewport are loaded. */\n // sonViewportLoad?: ((tiles: Tile2DHeader<DataT>[]) => void) | null;\n};\n\nexport const DEFAULT_TILESET2D_PROPS: Omit<Required<Tileset2DProps>, 'getTileData'> = {\n extent: null,\n tileSize: 512,\n\n maxZoom: null,\n minZoom: null,\n maxCacheSize: null,\n maxCacheByteSize: null,\n refinementStrategy: 'best-available',\n zRange: null,\n maxRequests: 6,\n zoomOffset: 0,\n\n // onTileLoad: (tile: Tile2DHeader) => void, // onTileUnload: (tile: Tile2DHeader) => void, // onTileError: (error: any, tile: Tile2DHeader) => void, /** Called when all tiles in the current viewport are loaded. */\n // onViewportLoad: ((tiles: Tile2DHeader<DataT>[]) => void) | null,\n onTileLoad: () => {},\n onTileUnload: () => {},\n onTileError: () => {}\n};\n\n/**\n * Manages loading and purging of tile data. This class caches recently visited tiles\n * and only creates new tiles if they are present.\n */\nexport class Tileset2D {\n private opts: Required<Tileset2DProps>;\n private _requestScheduler: RequestScheduler;\n private _cache: Map<string, Tile2DHeader>;\n private _dirty: boolean;\n private _tiles: Tile2DHeader[];\n\n private _cacheByteSize: number;\n private _viewport: Viewport | null;\n private _zRange: ZRange | null;\n private _selectedTiles: Tile2DHeader[] | null;\n private _frameNumber: number;\n private _modelMatrix: Matrix4;\n private _modelMatrixInverse: Matrix4;\n\n private _maxZoom?: number;\n private _minZoom?: number;\n\n private onTileLoad: (tile: Tile2DHeader) => void;\n\n /**\n * Takes in a function that returns tile data, a cache size, and a max and a min zoom level.\n * Cache size defaults to 5 * number of tiles in the current viewport\n */\n constructor(opts: Tileset2DProps) {\n this.opts = {...DEFAULT_TILESET2D_PROPS, ...opts};\n\n this.onTileLoad = tile => {\n this.opts.onTileLoad?.(tile);\n if (this.opts.maxCacheByteSize) {\n this._cacheByteSize += tile.byteLength;\n this._resizeCache();\n }\n };\n\n this._requestScheduler = new RequestScheduler({\n maxRequests: opts.maxRequests,\n throttleRequests: Boolean(opts.maxRequests && opts.maxRequests > 0)\n });\n\n // Maps tile id in string {z}-{x}-{y} to a Tile object\n this._cache = new Map();\n this._tiles = [];\n this._dirty = false;\n this._cacheByteSize = 0;\n\n // Cache the last processed viewport\n this._viewport = null;\n this._zRange = null;\n this._selectedTiles = null;\n this._frameNumber = 0;\n\n this._modelMatrix = new Matrix4();\n this._modelMatrixInverse = new Matrix4();\n\n this.setOptions(opts);\n }\n\n /* Public API */\n get tiles() {\n return this._tiles;\n }\n\n get selectedTiles(): Tile2DHeader[] | null {\n return this._selectedTiles;\n }\n\n get isLoaded(): boolean {\n return this._selectedTiles !== null && this._selectedTiles.every(tile => tile.isLoaded);\n }\n\n get needsReload(): boolean {\n return this._selectedTiles !== null && this._selectedTiles.some(tile => tile.needsReload);\n }\n\n setOptions(opts: Tileset2DProps): void {\n Object.assign(this.opts, opts);\n if (Number.isFinite(opts.maxZoom)) {\n this._maxZoom = Math.floor(opts.maxZoom as number);\n }\n if (Number.isFinite(opts.minZoom)) {\n this._minZoom = Math.ceil(opts.minZoom as number);\n }\n }\n\n // Clean up any outstanding tile requests.\n finalize(): void {\n for (const tile of this._cache.values()) {\n if (tile.isLoading) {\n tile.abort();\n }\n }\n this._cache.clear();\n this._tiles = [];\n this._selectedTiles = null;\n }\n\n reloadAll(): void {\n for (const id of this._cache.keys()) {\n const tile = this._cache.get(id) as Tile2DHeader;\n if (!this._selectedTiles || !this._selectedTiles.includes(tile)) {\n this._cache.delete(id);\n } else {\n tile.setNeedsReload();\n }\n }\n }\n\n /**\n * Update the cache with the given viewport and model matrix and triggers callback onUpdate.\n */\n update(\n viewport: Viewport,\n {zRange, modelMatrix}: {zRange: ZRange | null; modelMatrix: NumericArray | null} = {\n zRange: null,\n modelMatrix: null\n }\n ): number {\n const modelMatrixAsMatrix4 = modelMatrix ? new Matrix4(modelMatrix) : new Matrix4();\n const isModelMatrixNew = !modelMatrixAsMatrix4.equals(this._modelMatrix);\n if (\n !this._viewport ||\n !viewport.equals(this._viewport) ||\n !equals(this._zRange, zRange) ||\n isModelMatrixNew\n ) {\n if (isModelMatrixNew) {\n this._modelMatrixInverse = modelMatrixAsMatrix4.clone().invert();\n this._modelMatrix = modelMatrixAsMatrix4;\n }\n this._viewport = viewport;\n this._zRange = zRange;\n const tileIndices = this.getTileIndices({\n viewport,\n maxZoom: this._maxZoom,\n minZoom: this._minZoom,\n zRange,\n modelMatrix: this._modelMatrix,\n modelMatrixInverse: this._modelMatrixInverse\n });\n this._selectedTiles = tileIndices.map(index => this._getTile(index, true));\n\n if (this._dirty) {\n // Some new tiles are added\n this._rebuildTree();\n }\n // Check for needed reloads explicitly even if the view/matrix has not changed.\n } else if (this.needsReload) {\n this._selectedTiles = this._selectedTiles!.map(tile => this._getTile(tile.index, true));\n }\n\n // Update tile states\n const changed = this.updateTileStates();\n this._pruneRequests();\n\n if (this._dirty) {\n // cache size is either the user defined maxSize or 5 * number of current tiles in the viewport.\n this._resizeCache();\n }\n\n if (changed) {\n this._frameNumber++;\n }\n\n return this._frameNumber;\n }\n\n // eslint-disable-next-line complexity\n isTileVisible(\n tile: Tile2DHeader,\n cullRect?: {x: number; y: number; width: number; height: number}\n ): boolean {\n if (!tile.isVisible) {\n return false;\n }\n\n if (cullRect && this._viewport) {\n const boundsArr = this._getCullBounds({\n viewport: this._viewport,\n z: this._zRange,\n cullRect\n });\n const {bbox} = tile;\n for (const [minX, minY, maxX, maxY] of boundsArr) {\n let overlaps;\n if ('west' in bbox) {\n overlaps = bbox.west < maxX && bbox.east > minX && bbox.south < maxY && bbox.north > minY;\n } else {\n // top/bottom could be swapped depending on the indexing system\n const y0 = Math.min(bbox.top, bbox.bottom);\n const y1 = Math.max(bbox.top, bbox.bottom);\n overlaps = bbox.left < maxX && bbox.right > minX && y0 < maxY && y1 > minY;\n }\n if (overlaps) {\n return true;\n }\n }\n return false;\n }\n return true;\n }\n\n /* Public interface for subclassing */\n\n /** Returns array of tile indices in the current viewport */\n getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n modelMatrix,\n modelMatrixInverse\n }: {\n viewport: Viewport;\n maxZoom?: number;\n minZoom?: number;\n zRange: ZRange | null;\n tileSize?: number;\n modelMatrix?: Matrix4;\n modelMatrixInverse?: Matrix4;\n zoomOffset?: number;\n }): TileIndex[] {\n const {tileSize, extent, zoomOffset} = this.opts;\n return getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n tileSize,\n extent: extent as Bounds | undefined,\n modelMatrix,\n modelMatrixInverse,\n zoomOffset\n });\n }\n\n /** Returns unique string key for a tile index */\n getTileId(index: TileIndex) {\n return `${index.x}-${index.y}-${index.z}`;\n }\n\n /** Returns a zoom level for a tile index */\n getTileZoom(index: TileIndex) {\n return index.z;\n }\n\n /** Returns additional metadata to add to tile, bbox by default */\n getTileMetadata(index: TileIndex): Record<string, any> {\n const {tileSize} = this.opts;\n // @ts-expect-error\n return {bbox: tileToBoundingBox(this._viewport, index.x, index.y, index.z, tileSize)};\n }\n\n /** Returns index of the parent tile */\n getParentIndex(index: TileIndex) {\n const x = Math.floor(index.x / 2);\n const y = Math.floor(index.y / 2);\n const z = index.z - 1;\n return {x, y, z};\n }\n\n // Returns true if any tile's visibility changed\n private updateTileStates() {\n const refinementStrategy = this.opts.refinementStrategy || STRATEGY_DEFAULT;\n\n const visibilities = new Array(this._cache.size);\n let i = 0;\n // Reset state\n for (const tile of this._cache.values()) {\n // save previous state\n visibilities[i++] = tile.isVisible;\n tile.isSelected = false;\n tile.isVisible = false;\n }\n // @ts-expect-error called only when _selectedTiles is already defined\n for (const tile of this._selectedTiles) {\n tile.isSelected = true;\n tile.isVisible = true;\n }\n\n // Strategy-specific state logic\n (typeof refinementStrategy === 'function'\n ? refinementStrategy\n : STRATEGIES[refinementStrategy])(Array.from(this._cache.values()));\n\n i = 0;\n // Check if any visibility has changed\n for (const tile of this._cache.values()) {\n if (visibilities[i++] !== tile.isVisible) {\n return true;\n }\n }\n\n return false;\n }\n\n /* Private methods */\n\n private _getCullBounds = memoize(getCullBounds);\n\n private _pruneRequests(): void {\n const {maxRequests = 0} = this.opts;\n\n const abortCandidates: Tile2DHeader[] = [];\n let ongoingRequestCount = 0;\n for (const tile of this._cache.values()) {\n // Keep track of all the ongoing requests\n if (tile.isLoading) {\n ongoingRequestCount++;\n if (!tile.isSelected && !tile.isVisible) {\n abortCandidates.push(tile);\n }\n }\n }\n\n while (maxRequests > 0 && ongoingRequestCount > maxRequests && abortCandidates.length > 0) {\n // There are too many ongoing requests, so abort some that are unselected\n const tile = abortCandidates.shift()!;\n tile.abort();\n ongoingRequestCount--;\n }\n }\n\n // This needs to be called every time some tiles have been added/removed from cache\n private _rebuildTree() {\n const {_cache} = this;\n\n // Reset states\n for (const tile of _cache.values()) {\n tile.parent = null;\n if (tile.children) {\n tile.children.length = 0;\n }\n }\n\n // Rebuild tree\n for (const tile of _cache.values()) {\n const parent = this._getNearestAncestor(tile);\n tile.parent = parent;\n if (parent?.children) {\n parent.children.push(tile);\n }\n }\n }\n\n /**\n * Clear tiles that are not visible when the cache is full\n */\n /* eslint-disable complexity */\n private _resizeCache() {\n const {_cache, opts} = this;\n\n const maxCacheSize =\n opts.maxCacheSize ||\n // @ts-expect-error called only when selectedTiles is initialized\n (opts.maxCacheByteSize ? Infinity : DEFAULT_CACHE_SCALE * this.selectedTiles.length);\n const maxCacheByteSize = opts.maxCacheByteSize || Infinity;\n\n const overflown = _cache.size > maxCacheSize || this._cacheByteSize > maxCacheByteSize;\n\n if (overflown) {\n for (const [id, tile] of _cache) {\n if (!tile.isVisible && !tile.isSelected) {\n // delete tile\n this._cacheByteSize -= opts.maxCacheByteSize ? tile.byteLength : 0;\n _cache.delete(id);\n this.opts.onTileUnload?.(tile);\n }\n if (_cache.size <= maxCacheSize && this._cacheByteSize <= maxCacheByteSize) {\n break;\n }\n }\n this._rebuildTree();\n this._dirty = true;\n }\n if (this._dirty) {\n // sort by zoom level so that smaller tiles are displayed on top\n this._tiles = Array.from(this._cache.values()).sort((t1, t2) => t1.zoom - t2.zoom);\n\n this._dirty = false;\n }\n }\n /* eslint-enable complexity */\n\n private _getTile(index: TileIndex, create: true): Tile2DHeader;\n private _getTile(index: TileIndex, create?: false): Tile2DHeader | undefined;\n private _getTile(index: TileIndex, create?: boolean): Tile2DHeader | undefined {\n const id = this.getTileId(index);\n let tile = this._cache.get(id);\n let needsReload = false;\n\n if (!tile && create) {\n tile = new Tile2DHeader(index);\n Object.assign(tile, this.getTileMetadata(tile.index));\n Object.assign(tile, {id, zoom: this.getTileZoom(tile.index)});\n needsReload = true;\n this._cache.set(id, tile);\n this._dirty = true;\n } else if (tile && tile.needsReload) {\n needsReload = true;\n }\n if (tile && needsReload) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n tile.loadData({\n getData: this.opts.getTileData,\n requestScheduler: this._requestScheduler,\n onLoad: this.onTileLoad,\n onError: this.opts.onTileError\n });\n }\n\n return tile;\n }\n\n _getNearestAncestor(tile: Tile2DHeader): Tile2DHeader | null {\n const {_minZoom = 0} = this;\n\n let index = tile.index;\n while (this.getTileZoom(index) > _minZoom) {\n index = this.getParentIndex(index);\n const parent = this._getTile(index);\n if (parent) {\n return parent;\n }\n }\n return null;\n }\n}\n\n/* -- Refinement strategies --*/\n/* eslint-disable max-depth */\n\n// For all the selected && pending tiles:\n// - pick the closest ancestor as placeholder\n// - if no ancestor is visible, pick the closest children as placeholder\nfunction updateTileStateDefault(allTiles: Tile2DHeader[]) {\n for (const tile of allTiles) {\n tile.state = 0;\n }\n for (const tile of allTiles) {\n if (tile.isSelected && !getPlaceholderInAncestors(tile)) {\n getPlaceholderInChildren(tile);\n }\n }\n for (const tile of allTiles) {\n tile.isVisible = Boolean(tile.state! & TILE_STATE_VISIBLE);\n }\n}\n\n// Until a selected tile and all its selected siblings are loaded, use the closest ancestor as placeholder\nfunction updateTileStateReplace(allTiles: Tile2DHeader[]) {\n for (const tile of allTiles) {\n tile.state = 0;\n }\n for (const tile of allTiles) {\n if (tile.isSelected) {\n getPlaceholderInAncestors(tile);\n }\n }\n // Always process parents first\n const sortedTiles = Array.from(allTiles).sort((t1, t2) => t1.zoom - t2.zoom);\n for (const tile of sortedTiles) {\n tile.isVisible = Boolean(tile.state! & TILE_STATE_VISIBLE);\n\n if (tile.children && (tile.isVisible || tile.state! & TILE_STATE_VISITED)) {\n // If the tile is rendered, or if the tile has been explicitly hidden, hide all of its children\n for (const child of tile.children) {\n child.state = TILE_STATE_VISITED;\n }\n } else if (tile.isSelected) {\n getPlaceholderInChildren(tile);\n }\n }\n}\n\n// Walk up the tree until we find one ancestor that is loaded. Returns true if successful.\nfunction getPlaceholderInAncestors(startTile: Tile2DHeader) {\n let tile: Tile2DHeader | null = startTile;\n while (tile) {\n if (tile.isLoaded || tile.content) {\n tile.state! |= TILE_STATE_VISIBLE;\n return true;\n }\n tile = tile.parent;\n }\n return false;\n}\n\n// Recursively set children as placeholder\nfunction getPlaceholderInChildren(tile) {\n for (const child of tile.children) {\n if (child.isLoaded || child.content) {\n child.state |= TILE_STATE_VISIBLE;\n } else {\n getPlaceholderInChildren(child);\n }\n }\n}\n"],"file":"tileset-2d.js"}
@@ -137,7 +137,7 @@ function getCullBounds(_ref) {
137
137
  cullRect = _ref.cullRect;
138
138
  var subViewports = viewport.subViewports || [viewport];
139
139
  return subViewports.map(function (v) {
140
- return getCullBoundsInViewport(v, z, cullRect);
140
+ return getCullBoundsInViewport(v, z || 0, cullRect);
141
141
  });
142
142
  }
143
143