@deck.gl/geo-layers 8.9.0-alpha.5 → 8.9.0-beta.2

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 (179) hide show
  1. package/dist/dist.dev.js +25764 -66606
  2. package/dist/es5/geo-cell-layer/GeoCellLayer.js.map +1 -1
  3. package/dist/es5/geohash-layer/geohash-layer.js.map +1 -1
  4. package/dist/es5/great-circle-layer/great-circle-layer.js.map +1 -1
  5. package/dist/es5/h3-layers/h3-cluster-layer.js +2 -2
  6. package/dist/es5/h3-layers/h3-cluster-layer.js.map +1 -1
  7. package/dist/es5/h3-layers/h3-hexagon-layer.js.map +1 -1
  8. package/dist/es5/index.js +4 -8
  9. package/dist/es5/index.js.map +1 -1
  10. package/dist/es5/mesh-layer/mesh-layer-fragment.glsl.js +1 -1
  11. package/dist/es5/mesh-layer/mesh-layer-vertex.glsl.js +1 -1
  12. package/dist/es5/mesh-layer/mesh-layer.js.map +1 -1
  13. package/dist/es5/mvt-layer/coordinate-transform.js.map +1 -1
  14. package/dist/es5/mvt-layer/mvt-layer.js +9 -9
  15. package/dist/es5/mvt-layer/mvt-layer.js.map +1 -1
  16. package/dist/es5/quadkey-layer/quadkey-layer.js.map +1 -1
  17. package/dist/es5/s2-layer/s2-layer.js.map +1 -1
  18. package/dist/es5/terrain-layer/terrain-layer.js +6 -9
  19. package/dist/es5/terrain-layer/terrain-layer.js.map +1 -1
  20. package/dist/es5/tile-3d-layer/tile-3d-layer.js +9 -8
  21. package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +1 -1
  22. package/dist/es5/tile-layer/tile-layer.js +32 -14
  23. package/dist/es5/tile-layer/tile-layer.js.map +1 -1
  24. package/dist/es5/tileset-2d/index.js +66 -0
  25. package/dist/es5/tileset-2d/index.js.map +1 -0
  26. package/dist/es5/tileset-2d/memoize.js +47 -0
  27. package/dist/es5/tileset-2d/memoize.js.map +1 -0
  28. package/dist/es5/{tile-layer → tileset-2d}/tile-2d-header.js +3 -5
  29. package/dist/es5/tileset-2d/tile-2d-header.js.map +1 -0
  30. package/dist/es5/{tile-layer → tileset-2d}/tile-2d-traversal.js +0 -0
  31. package/dist/es5/tileset-2d/tile-2d-traversal.js.map +1 -0
  32. package/dist/es5/{tile-layer → tileset-2d}/tileset-2d.js +166 -121
  33. package/dist/es5/tileset-2d/tileset-2d.js.map +1 -0
  34. package/dist/es5/{tile-layer → tileset-2d}/types.js +0 -0
  35. package/dist/es5/{tile-layer → tileset-2d}/types.js.map +0 -0
  36. package/dist/es5/{tile-layer → tileset-2d}/utils.js +17 -18
  37. package/dist/es5/tileset-2d/utils.js.map +1 -0
  38. package/dist/es5/trips-layer/trips-layer.js.map +1 -1
  39. package/dist/esm/geo-cell-layer/GeoCellLayer.js.map +1 -1
  40. package/dist/esm/geohash-layer/geohash-layer.js.map +1 -1
  41. package/dist/esm/great-circle-layer/great-circle-layer.js.map +1 -1
  42. package/dist/esm/h3-layers/h3-cluster-layer.js +1 -1
  43. package/dist/esm/h3-layers/h3-cluster-layer.js.map +1 -1
  44. package/dist/esm/h3-layers/h3-hexagon-layer.js.map +1 -1
  45. package/dist/esm/index.js +3 -3
  46. package/dist/esm/index.js.map +1 -1
  47. package/dist/esm/mesh-layer/mesh-layer-fragment.glsl.js +1 -1
  48. package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js +1 -1
  49. package/dist/esm/mesh-layer/mesh-layer.js.map +1 -1
  50. package/dist/esm/mvt-layer/coordinate-transform.js.map +1 -1
  51. package/dist/esm/mvt-layer/mvt-layer.js +3 -3
  52. package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
  53. package/dist/esm/quadkey-layer/quadkey-layer.js.map +1 -1
  54. package/dist/esm/s2-layer/s2-layer.js.map +1 -1
  55. package/dist/esm/terrain-layer/terrain-layer.js +2 -5
  56. package/dist/esm/terrain-layer/terrain-layer.js.map +1 -1
  57. package/dist/esm/tile-3d-layer/tile-3d-layer.js +9 -10
  58. package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +1 -1
  59. package/dist/esm/tile-layer/tile-layer.js +16 -6
  60. package/dist/esm/tile-layer/tile-layer.js.map +1 -1
  61. package/dist/esm/tileset-2d/index.js +4 -0
  62. package/dist/esm/tileset-2d/index.js.map +1 -0
  63. package/dist/esm/tileset-2d/memoize.js +40 -0
  64. package/dist/esm/tileset-2d/memoize.js.map +1 -0
  65. package/dist/esm/{tile-layer → tileset-2d}/tile-2d-header.js +2 -3
  66. package/dist/esm/tileset-2d/tile-2d-header.js.map +1 -0
  67. package/dist/esm/{tile-layer → tileset-2d}/tile-2d-traversal.js +0 -0
  68. package/dist/esm/tileset-2d/tile-2d-traversal.js.map +1 -0
  69. package/dist/esm/{tile-layer → tileset-2d}/tileset-2d.js +48 -16
  70. package/dist/esm/tileset-2d/tileset-2d.js.map +1 -0
  71. package/dist/esm/{tile-layer → tileset-2d}/types.js +0 -0
  72. package/dist/esm/{tile-layer → tileset-2d}/types.js.map +0 -0
  73. package/dist/esm/{tile-layer → tileset-2d}/utils.js +16 -20
  74. package/dist/esm/tileset-2d/utils.js.map +1 -0
  75. package/dist/esm/trips-layer/trips-layer.js.map +1 -1
  76. package/dist.min.js +188 -6
  77. package/package.json +11 -11
  78. package/src/geo-cell-layer/GeoCellLayer.ts +2 -2
  79. package/src/geohash-layer/geohash-layer.ts +4 -4
  80. package/src/great-circle-layer/great-circle-layer.ts +2 -2
  81. package/src/h3-layers/h3-cluster-layer.ts +2 -2
  82. package/src/h3-layers/h3-hexagon-layer.ts +4 -1
  83. package/src/index.ts +9 -5
  84. package/src/mesh-layer/mesh-layer.ts +1 -1
  85. package/src/mvt-layer/coordinate-transform.ts +1 -1
  86. package/src/mvt-layer/mvt-layer.ts +18 -11
  87. package/src/quadkey-layer/quadkey-layer.ts +1 -1
  88. package/src/s2-layer/s2-layer.ts +1 -1
  89. package/src/terrain-layer/terrain-layer.ts +11 -9
  90. package/src/tile-3d-layer/tile-3d-layer.ts +13 -11
  91. package/src/tile-layer/tile-layer.ts +23 -11
  92. package/src/tileset-2d/index.ts +25 -0
  93. package/src/tileset-2d/memoize.ts +45 -0
  94. package/src/{tile-layer → tileset-2d}/tile-2d-header.ts +4 -4
  95. package/src/{tile-layer → tileset-2d}/tile-2d-traversal.ts +3 -1
  96. package/src/{tile-layer → tileset-2d}/tileset-2d.ts +91 -39
  97. package/src/{tile-layer → tileset-2d}/types.ts +0 -0
  98. package/src/{tile-layer → tileset-2d}/utils.ts +26 -12
  99. package/src/trips-layer/trips-layer.ts +1 -1
  100. package/typed/geo-cell-layer/GeoCellLayer.d.ts +2 -2
  101. package/typed/geo-cell-layer/GeoCellLayer.d.ts.map +1 -1
  102. package/typed/geo-cell-layer/GeoCellLayer.js +49 -0
  103. package/typed/geohash-layer/geohash-layer.d.ts +3 -3
  104. package/typed/geohash-layer/geohash-layer.d.ts.map +1 -1
  105. package/typed/great-circle-layer/great-circle-layer.d.ts +3 -2
  106. package/typed/great-circle-layer/great-circle-layer.d.ts.map +1 -1
  107. package/typed/great-circle-layer/great-circle-layer.js +29 -0
  108. package/typed/h3-layers/h3-cluster-layer.d.ts +1 -1
  109. package/typed/h3-layers/h3-cluster-layer.d.ts.map +1 -1
  110. package/typed/h3-layers/h3-cluster-layer.js +33 -0
  111. package/typed/h3-layers/h3-hexagon-layer.d.ts +1 -1
  112. package/typed/h3-layers/h3-hexagon-layer.d.ts.map +1 -1
  113. package/typed/h3-layers/h3-hexagon-layer.js +251 -0
  114. package/typed/index.d.ts +5 -5
  115. package/typed/index.d.ts.map +1 -1
  116. package/typed/index.js +33 -0
  117. package/typed/mesh-layer/mesh-layer-fragment.glsl.js +55 -0
  118. package/typed/mesh-layer/mesh-layer-vertex.glsl.js +80 -0
  119. package/typed/mesh-layer/mesh-layer.d.ts +1 -1
  120. package/typed/mesh-layer/mesh-layer.d.ts.map +1 -1
  121. package/typed/mesh-layer/mesh-layer.js +110 -0
  122. package/typed/mvt-layer/coordinate-transform.d.ts +1 -1
  123. package/typed/mvt-layer/coordinate-transform.d.ts.map +1 -1
  124. package/typed/mvt-layer/coordinate-transform.js +41 -0
  125. package/typed/mvt-layer/find-index-binary.js +96 -0
  126. package/typed/mvt-layer/mvt-layer.d.ts +3 -4
  127. package/typed/mvt-layer/mvt-layer.d.ts.map +1 -1
  128. package/typed/mvt-layer/mvt-layer.js +297 -0
  129. package/typed/quadkey-layer/quadkey-layer.d.ts +1 -1
  130. package/typed/quadkey-layer/quadkey-layer.d.ts.map +1 -1
  131. package/typed/quadkey-layer/quadkey-layer.js +18 -0
  132. package/typed/quadkey-layer/quadkey-utils.js +26 -0
  133. package/typed/s2-layer/s2-geometry.js +123 -0
  134. package/typed/s2-layer/s2-layer.d.ts +1 -1
  135. package/typed/s2-layer/s2-layer.d.ts.map +1 -1
  136. package/typed/s2-layer/s2-layer.js +37 -0
  137. package/typed/s2-layer/s2-utils.js +88 -0
  138. package/typed/terrain-layer/terrain-layer.d.ts +8 -5
  139. package/typed/terrain-layer/terrain-layer.d.ts.map +1 -1
  140. package/typed/terrain-layer/terrain-layer.js +226 -0
  141. package/typed/tile-3d-layer/tile-3d-layer.d.ts +3 -3
  142. package/typed/tile-3d-layer/tile-3d-layer.d.ts.map +1 -1
  143. package/typed/tile-3d-layer/tile-3d-layer.js +294 -0
  144. package/typed/tile-layer/tile-2d-header.js +113 -0
  145. package/typed/tile-layer/tile-2d-traversal.js +181 -0
  146. package/typed/tile-layer/tile-layer.d.ts +6 -7
  147. package/typed/tile-layer/tile-layer.d.ts.map +1 -1
  148. package/typed/tile-layer/tile-layer.js +192 -0
  149. package/typed/tile-layer/tileset-2d.d.ts.map +1 -1
  150. package/typed/tile-layer/tileset-2d.js +399 -0
  151. package/typed/tile-layer/types.js +1 -0
  152. package/typed/tile-layer/utils.d.ts +1 -1
  153. package/typed/tile-layer/utils.d.ts.map +1 -1
  154. package/typed/tile-layer/utils.js +197 -0
  155. package/typed/tileset-2d/index.d.ts +7 -0
  156. package/typed/tileset-2d/index.d.ts.map +1 -0
  157. package/typed/tileset-2d/memoize.d.ts +7 -0
  158. package/typed/tileset-2d/memoize.d.ts.map +1 -0
  159. package/typed/tileset-2d/tile-2d-header.d.ts +39 -0
  160. package/typed/tileset-2d/tile-2d-header.d.ts.map +1 -0
  161. package/typed/tileset-2d/tile-2d-traversal.d.ts +4 -0
  162. package/typed/tileset-2d/tile-2d-traversal.d.ts.map +1 -0
  163. package/typed/tileset-2d/tileset-2d.d.ts +121 -0
  164. package/typed/tileset-2d/tileset-2d.d.ts.map +1 -0
  165. package/typed/tileset-2d/types.d.ts +30 -0
  166. package/typed/tileset-2d/types.d.ts.map +1 -0
  167. package/typed/tileset-2d/utils.d.ts +52 -0
  168. package/typed/tileset-2d/utils.d.ts.map +1 -0
  169. package/typed/trips-layer/trips-layer.d.ts +1 -1
  170. package/typed/trips-layer/trips-layer.d.ts.map +1 -1
  171. package/typed/trips-layer/trips-layer.js +92 -0
  172. package/dist/es5/tile-layer/tile-2d-header.js.map +0 -1
  173. package/dist/es5/tile-layer/tile-2d-traversal.js.map +0 -1
  174. package/dist/es5/tile-layer/tileset-2d.js.map +0 -1
  175. package/dist/es5/tile-layer/utils.js.map +0 -1
  176. package/dist/esm/tile-layer/tile-2d-header.js.map +0 -1
  177. package/dist/esm/tile-layer/tile-2d-traversal.js.map +0 -1
  178. package/dist/esm/tile-layer/tileset-2d.js.map +0 -1
  179. package/dist/esm/tile-layer/utils.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tile-layer/tile-layer.ts"],"names":["CompositeLayer","_flatten","flatten","GeoJsonLayer","Tileset2D","STRATEGY_DEFAULT","urlType","getURLFromTemplate","defaultProps","TilesetClass","data","type","value","dataComparator","equals","renderSubLayers","props","compare","getTileData","optional","onViewportLoad","onTileLoad","tile","onTileUnload","onTileError","err","console","error","extent","tileSize","maxZoom","minZoom","maxCacheSize","maxCacheByteSize","refinementStrategy","zRange","maxRequests","zoomOffset","TileLayer","initializeState","state","tileset","isLoaded","finalizeState","finalize","selectedTiles","every","layers","layer","shouldUpdateState","changeFlags","somethingChanged","updateState","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","getSubLayerPropsByTile","getPickingInfo","info","sourceLayer","_updateAutoHighlight","updateAutoHighlight","renderLayers","map","subLayerProps","content","id","_offset","Boolean","clone","Object","keys","some","filterSubLayer","cullRect","isTileVisible"],"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';\nimport Tile2DHeader from './tile-2d-header';\n\nimport Tileset2D, {RefinementStrategy, STRATEGY_DEFAULT, Tileset2DProps} from './tileset-2d';\nimport {TileLoadProps, ZRange} from './types';\nimport {urlType, getURLFromTemplate} from './utils';\n\nconst defaultProps: DefaultProps<TileLayerProps> = {\n TilesetClass: Tileset2D,\n data: {type: 'data', value: []},\n dataComparator: urlType.equals,\n renderSubLayers: {type: 'function', value: props => new GeoJsonLayer(props), compare: false},\n getTileData: {type: 'function', optional: true, value: null, compare: false},\n // TODO - change to onViewportLoad to align with Tile3DLayer\n onViewportLoad: {type: 'function', optional: true, value: null, compare: false},\n onTileLoad: {type: 'function', value: tile => {}, compare: false},\n onTileUnload: {type: 'function', value: tile => {}, compare: false},\n // eslint-disable-next-line\n onTileError: {type: 'function', value: err => console.error(err), compare: false},\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<any> & _TileLayerProps<DataT>;\n\n/** Props added by the TileLayer */\ntype _TileLayerProps<DataT> = {\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) => 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 CompositeLayer<\n ExtraPropsT & Required<_TileLayerProps<DataT>>\n> {\n static defaultProps = defaultProps as any;\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 (info as any).tile = (sourceLayer as any).props.tile;\n return info;\n }\n\n protected _updateAutoHighlight(info: PickingInfo): void {\n if (info.sourceLayer) {\n info.sourceLayer.updateAutoHighlight(info);\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 id: `${this.id}-${tile.id}`,\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":["CompositeLayer","_flatten","flatten","GeoJsonLayer","Tileset2D","STRATEGY_DEFAULT","urlType","getURLFromTemplate","defaultProps","TilesetClass","data","type","value","dataComparator","equal","renderSubLayers","props","compare","getTileData","optional","onViewportLoad","onTileLoad","tile","onTileUnload","onTileError","err","console","error","extent","tileSize","maxZoom","minZoom","maxCacheSize","maxCacheByteSize","refinementStrategy","zRange","maxRequests","zoomOffset","TileLayer","initializeState","state","tileset","isLoaded","finalizeState","finalize","selectedTiles","every","layers","layer","shouldUpdateState","changeFlags","somethingChanged","updateState","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","getSubLayerPropsByTile","getPickingInfo","info","sourceLayer","sourceTile","picked","_updateAutoHighlight","updateAutoHighlight","renderLayers","map","subLayerProps","content","id","_offset","Boolean","clone","Object","keys","some","filterSubLayer","cullRect","isTileVisible"],"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, 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), compare: false},\n getTileData: {type: 'function', optional: true, value: null, compare: false},\n // TODO - change to onViewportLoad to align with Tile3DLayer\n onViewportLoad: {type: 'function', optional: true, value: null, compare: false},\n onTileLoad: {type: 'function', value: tile => {}, compare: false},\n onTileUnload: {type: 'function', value: tile => {}, compare: false},\n // eslint-disable-next-line\n onTileError: {type: 'function', value: err => console.error(err), compare: false},\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<any> & _TileLayerProps<DataT>;\n\n/** Props added by the TileLayer */\ntype _TileLayerProps<DataT> = {\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 id: `${this.id}-${tile.id}`,\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"}
@@ -0,0 +1,4 @@
1
+ export { Tileset2D, STRATEGY_DEFAULT } from './tileset-2d';
2
+ export { Tile2DHeader } from './tile-2d-header';
3
+ export { isGeoBoundingBox, isURLTemplate, urlType, getURLFromTemplate, getTileIndices, tileToBoundingBox } from './utils';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/tileset-2d/index.ts"],"names":["Tileset2D","STRATEGY_DEFAULT","Tile2DHeader","isGeoBoundingBox","isURLTemplate","urlType","getURLFromTemplate","getTileIndices","tileToBoundingBox"],"mappings":"AAYA,SAAQA,SAAR,EAAmBC,gBAAnB,QAA0C,cAA1C;AAEA,SAAQC,YAAR,QAA2B,kBAA3B;AAGA,SACEC,gBADF,EAEEC,aAFF,EAGEC,OAHF,EAIEC,kBAJF,EAKEC,cALF,EAMEC,iBANF,QAOO,SAPP","sourcesContent":["// deck.gl, MIT license\n\nexport type {\n TileLoadProps,\n Bounds,\n ZRange,\n GeoBoundingBox,\n NonGeoBoundingBox,\n TileBoundingBox\n} from './types';\n\nexport type {Tileset2DProps, RefinementStrategy} from './tileset-2d';\nexport {Tileset2D, STRATEGY_DEFAULT} from './tileset-2d';\n\nexport {Tile2DHeader} from './tile-2d-header';\n\nexport type {URLTemplate} from './utils';\nexport {\n isGeoBoundingBox,\n isURLTemplate,\n urlType,\n getURLFromTemplate,\n getTileIndices,\n tileToBoundingBox\n} from './utils';\n"],"file":"index.js"}
@@ -0,0 +1,40 @@
1
+ export function memoize(compute) {
2
+ let cachedArgs = {};
3
+ let cachedResult;
4
+ return args => {
5
+ for (const key in args) {
6
+ if (!isEqual(args[key], cachedArgs[key])) {
7
+ cachedResult = compute(args);
8
+ cachedArgs = args;
9
+ break;
10
+ }
11
+ }
12
+
13
+ return cachedResult;
14
+ };
15
+ }
16
+
17
+ function isEqual(a, b) {
18
+ if (a === b) {
19
+ return true;
20
+ }
21
+
22
+ if (Array.isArray(a)) {
23
+ const len = a.length;
24
+
25
+ if (!b || b.length !== len) {
26
+ return false;
27
+ }
28
+
29
+ for (let i = 0; i < len; i++) {
30
+ if (a[i] !== b[i]) {
31
+ return false;
32
+ }
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ return false;
39
+ }
40
+ //# sourceMappingURL=memoize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/tileset-2d/memoize.ts"],"names":["memoize","compute","cachedArgs","cachedResult","args","key","isEqual","a","b","Array","isArray","len","length","i"],"mappings":"AAQA,OAAO,SAASA,OAAT,CAA0BC,OAA1B,EAAyE;AAC9E,MAAIC,UAAe,GAAG,EAAtB;AACA,MAAIC,YAAJ;AAEA,SAAQC,IAAD,IAAc;AACnB,SAAK,MAAMC,GAAX,IAAkBD,IAAlB,EAAwB;AACtB,UAAI,CAACE,OAAO,CAACF,IAAI,CAACC,GAAD,CAAL,EAAYH,UAAU,CAACG,GAAD,CAAtB,CAAZ,EAA0C;AACxCF,QAAAA,YAAY,GAAGF,OAAO,CAACG,IAAD,CAAtB;AACAF,QAAAA,UAAU,GAAGE,IAAb;AACA;AACD;AACF;;AACD,WAAOD,YAAP;AACD,GATD;AAUD;;AAED,SAASG,OAAT,CAAiBC,CAAjB,EAAoBC,CAApB,EAAuB;AACrB,MAAID,CAAC,KAAKC,CAAV,EAAa;AACX,WAAO,IAAP;AACD;;AACD,MAAIC,KAAK,CAACC,OAAN,CAAcH,CAAd,CAAJ,EAAsB;AAGpB,UAAMI,GAAG,GAAGJ,CAAC,CAACK,MAAd;;AACA,QAAI,CAACJ,CAAD,IAAMA,CAAC,CAACI,MAAF,KAAaD,GAAvB,EAA4B;AAC1B,aAAO,KAAP;AACD;;AAED,SAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,GAApB,EAAyBE,CAAC,EAA1B,EAA8B;AAC5B,UAAIN,CAAC,CAACM,CAAD,CAAD,KAASL,CAAC,CAACK,CAAD,CAAd,EAAmB;AACjB,eAAO,KAAP;AACD;AACF;;AACD,WAAO,IAAP;AACD;;AACD,SAAO,KAAP;AACD","sourcesContent":["// deck.gl, MIT license\n// @note - this is a duplicate of the deck.gl core export (because Tileset2D should be deck.gl independent)\n\n/**\n * Speed up consecutive function calls by caching the result of calls with identical input\n * https://en.wikipedia.org/wiki/Memoization\n * @param compute - the function to be memoized\n */\nexport function memoize<In, Out>(compute: (args: In) => Out): (args: In) => Out {\n let cachedArgs: any = {};\n let cachedResult: Out;\n\n return (args: In) => {\n for (const key in args) {\n if (!isEqual(args[key], cachedArgs[key])) {\n cachedResult = compute(args);\n cachedArgs = args;\n break;\n }\n }\n return cachedResult;\n };\n}\n\nfunction isEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (Array.isArray(a)) {\n // Special treatment for arrays: compare 1-level deep\n // This is to support equality of matrix/coordinate props\n const len = a.length;\n if (!b || b.length !== len) {\n return false;\n }\n\n for (let i = 0; i < len; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\n"],"file":"memoize.js"}
@@ -1,6 +1,5 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
- import { log } from '@deck.gl/core';
3
- export default class Tile2DHeader {
2
+ export class Tile2DHeader {
4
3
  constructor(index) {
5
4
  _defineProperty(this, "index", void 0);
6
5
 
@@ -72,7 +71,7 @@ export default class Tile2DHeader {
72
71
  const result = this.content ? this.content.byteLength : 0;
73
72
 
74
73
  if (!Number.isFinite(result)) {
75
- log.error('byteLength not defined in tile data')();
74
+ console.error('byteLength not defined in tile data');
76
75
  }
77
76
 
78
77
  return result;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/tileset-2d/tile-2d-header.ts"],"names":["Tile2DHeader","constructor","index","isVisible","isSelected","parent","children","content","_loader","undefined","_abortController","_loaderId","_isLoaded","_isCancelled","_needsReload","data","isLoading","then","isLoaded","Boolean","needsReload","byteLength","result","Number","isFinite","console","error","_loadData","getData","requestScheduler","onLoad","onError","id","bbox","userData","zoom","loaderId","AbortController","signal","requestToken","scheduleRequest","tile","done","tileData","err","loadData","opts","setNeedsReload","abort"],"mappings":";AAWA,OAAO,MAAMA,YAAN,CAAgC;AAsBrCC,EAAAA,WAAW,CAACC,KAAD,EAAmB;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;;AAEO,MAAJC,IAAI,GAAyC;AAC/C,WAAO,KAAKC,SAAL,IAAkB,KAAKR,OAAvB,GAAiC,KAAKA,OAAL,CAAaS,IAAb,CAAkB,MAAM,KAAKF,IAA7B,CAAjC,GAAsE,KAAKR,OAAlF;AACD;;AAEW,MAARW,QAAQ,GAAY;AACtB,WAAO,KAAKN,SAAL,IAAkB,CAAC,KAAKE,YAA/B;AACD;;AAEY,MAATE,SAAS,GAAY;AACvB,WAAOG,OAAO,CAAC,KAAKX,OAAN,CAAP,IAAyB,CAAC,KAAKK,YAAtC;AACD;;AAEc,MAAXO,WAAW,GAAY;AACzB,WAAO,KAAKN,YAAL,IAAqB,KAAKD,YAAjC;AACD;;AAEa,MAAVQ,UAAU,GAAW;AACvB,UAAMC,MAAM,GAAG,KAAKf,OAAL,GAAgB,KAAKA,OAAN,CAAsBc,UAArC,GAAkD,CAAjE;;AACA,QAAI,CAACE,MAAM,CAACC,QAAP,CAAgBF,MAAhB,CAAL,EAA8B;AAE5BG,MAAAA,OAAO,CAACC,KAAR,CAAc,qCAAd;AACD;;AACD,WAAOJ,MAAP;AACD;;AAGsB,QAATK,SAAS,CAAC;AACtBC,IAAAA,OADsB;AAEtBC,IAAAA,gBAFsB;AAGtBC,IAAAA,MAHsB;AAItBC,IAAAA;AAJsB,GAAD,EAKqB;AAC1C,UAAM;AAAC7B,MAAAA,KAAD;AAAQ8B,MAAAA,EAAR;AAAYC,MAAAA,IAAZ;AAAkBC,MAAAA,QAAlB;AAA4BC,MAAAA;AAA5B,QAAoC,IAA1C;AACA,UAAMC,QAAQ,GAAG,KAAKzB,SAAtB;AAEA,SAAKD,gBAAL,GAAwB,IAAI2B,eAAJ,EAAxB;AACA,UAAM;AAACC,MAAAA;AAAD,QAAW,KAAK5B,gBAAtB;AAGA,UAAM6B,YAAY,GAAG,MAAMV,gBAAgB,CAACW,eAAjB,CAAiC,IAAjC,EAAuCC,IAAI,IAAI;AACxE,aAAOA,IAAI,CAACrC,UAAL,GAAkB,CAAlB,GAAsB,CAAC,CAA9B;AACD,KAF0B,CAA3B;;AAIA,QAAI,CAACmC,YAAL,EAAmB;AACjB,WAAK1B,YAAL,GAAoB,IAApB;AACA;AACD;;AAED,QAAI,KAAKA,YAAT,EAAuB;AACrB0B,MAAAA,YAAY,CAACG,IAAb;AACA;AACD;;AAED,QAAIC,QAAsB,GAAG,IAA7B;AACA,QAAIjB,KAAJ;;AACA,QAAI;AACFiB,MAAAA,QAAQ,GAAG,MAAMf,OAAO,CAAC;AAAC1B,QAAAA,KAAD;AAAQ8B,QAAAA,EAAR;AAAYC,QAAAA,IAAZ;AAAkBC,QAAAA,QAAlB;AAA4BC,QAAAA,IAA5B;AAAkCG,QAAAA;AAAlC,OAAD,CAAxB;AACD,KAFD,CAEE,OAAOM,GAAP,EAAY;AACZlB,MAAAA,KAAK,GAAGkB,GAAG,IAAI,IAAf;AACD,KAJD,SAIU;AACRL,MAAAA,YAAY,CAACG,IAAb;AACD;;AAGD,QAAIN,QAAQ,KAAK,KAAKzB,SAAtB,EAAiC;AAC/B;AACD;;AAED,SAAKH,OAAL,GAAeC,SAAf;AAGA,SAAKF,OAAL,GAAeoC,QAAf;;AAGA,QAAI,KAAK9B,YAAL,IAAqB,CAAC8B,QAA1B,EAAoC;AAClC,WAAK/B,SAAL,GAAiB,KAAjB;AACA;AACD;;AACD,SAAKA,SAAL,GAAiB,IAAjB;AACA,SAAKC,YAAL,GAAoB,KAApB;;AAEA,QAAIa,KAAJ,EAAW;AACTK,MAAAA,OAAO,CAACL,KAAD,EAAQ,IAAR,CAAP;AACD,KAFD,MAEO;AACLI,MAAAA,MAAM,CAAC,IAAD,CAAN;AACD;AACF;;AAEDe,EAAAA,QAAQ,CAACC,IAAD,EAAyC;AAC/C,SAAKlC,SAAL,GAAiB,KAAjB;AACA,SAAKC,YAAL,GAAoB,KAApB;AACA,SAAKC,YAAL,GAAoB,KAApB;AACA,SAAKH,SAAL;AACA,SAAKH,OAAL,GAAe,KAAKmB,SAAL,CAAemB,IAAf,CAAf;AACA,WAAO,KAAKtC,OAAZ;AACD;;AAEDuC,EAAAA,cAAc,GAAS;AACrB,QAAI,KAAK/B,SAAT,EAAoB;AAClB,WAAKgC,KAAL;AACA,WAAKxC,OAAL,GAAeC,SAAf;AACD;;AACD,SAAKK,YAAL,GAAoB,IAApB;AACD;;AAEDkC,EAAAA,KAAK,GAAS;AAAA;;AACZ,QAAI,KAAK9B,QAAT,EAAmB;AACjB;AACD;;AAED,SAAKL,YAAL,GAAoB,IAApB;AACA,kCAAKH,gBAAL,gFAAuBsC,KAAvB;AACD;;AAvJoC","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 bbox!: TileBoundingBox; // assigned _always_ with result of `getTileMetadata`\n zoom!: number; // assigned _always_ with result of `getTileZoom`\n userData?: Record<string, any>; // _may be_ assigned with result of `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\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 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"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/tileset-2d/tile-2d-traversal.ts"],"names":["WebMercatorViewport","_GlobeViewport","CullingVolume","Plane","AxisAlignedBoundingBox","makeOrientedBoundingBoxFromPoints","lngLatToWorld","osmTile2lngLat","TILE_SIZE","MAX_MAPS","REF_POINTS_5","REF_POINTS_9","concat","REF_POINTS_11","OSMNode","constructor","x","y","z","children","_children","update","params","viewport","cullingVolume","elevationBounds","minZ","maxZ","bounds","offset","project","boundingVolume","getBoundingVolume","insideBounds","isInside","computeVisibility","childVisible","distance","distanceTo","cameraPosition","scale","height","Math","floor","log2","selected","child","getSelected","result","push","node","minX","minY","maxX","maxY","pow","extent","zRange","worldOffset","refPoints","refPointPositions","p","lngLat","originX","originY","getOSMTileIndices","resolution","projectPosition","planes","Object","values","getFrustumPlanes","map","normal","clone","negate","unitsPerMeter","distanceScales","elevationMin","elevationMax","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,9 +1,9 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
- import Tile2DHeader from './tile-2d-header';
3
- import { getTileIndices, tileToBoundingBox, getCullBounds } from './utils';
4
2
  import { RequestScheduler } from '@loaders.gl/loader-utils';
5
3
  import { Matrix4, equals } from '@math.gl/core';
6
- import { _memoize as memoize } from '@deck.gl/core';
4
+ import { Tile2DHeader } from './tile-2d-header';
5
+ import { getTileIndices, tileToBoundingBox, getCullBounds } from './utils';
6
+ import { memoize } from './memoize';
7
7
  const TILE_STATE_VISITED = 1;
8
8
  const TILE_STATE_VISIBLE = 2;
9
9
  export const STRATEGY_NEVER = 'never';
@@ -15,7 +15,22 @@ const STRATEGIES = {
15
15
  [STRATEGY_REPLACE]: updateTileStateReplace,
16
16
  [STRATEGY_NEVER]: () => {}
17
17
  };
18
- export default class Tileset2D {
18
+ export const DEFAULT_TILESET2D_PROPS = {
19
+ extent: null,
20
+ tileSize: 512,
21
+ maxZoom: null,
22
+ minZoom: null,
23
+ maxCacheSize: null,
24
+ maxCacheByteSize: null,
25
+ refinementStrategy: 'best-available',
26
+ zRange: null,
27
+ maxRequests: 6,
28
+ zoomOffset: 0,
29
+ onTileLoad: () => {},
30
+ onTileUnload: () => {},
31
+ onTileError: () => {}
32
+ };
33
+ export class Tileset2D {
19
34
  constructor(opts) {
20
35
  _defineProperty(this, "opts", void 0);
21
36
 
@@ -49,10 +64,14 @@ export default class Tileset2D {
49
64
 
50
65
  _defineProperty(this, "_getCullBounds", memoize(getCullBounds));
51
66
 
52
- this.opts = opts;
67
+ this.opts = { ...DEFAULT_TILESET2D_PROPS,
68
+ ...opts
69
+ };
53
70
 
54
71
  this.onTileLoad = tile => {
55
- this.opts.onTileLoad(tile);
72
+ var _this$opts$onTileLoad, _this$opts;
73
+
74
+ (_this$opts$onTileLoad = (_this$opts = this.opts).onTileLoad) === null || _this$opts$onTileLoad === void 0 ? void 0 : _this$opts$onTileLoad.call(_this$opts, tile);
56
75
 
57
76
  if (this.opts.maxCacheByteSize) {
58
77
  this._cacheByteSize += tile.byteLength;
@@ -63,7 +82,7 @@ export default class Tileset2D {
63
82
 
64
83
  this._requestScheduler = new RequestScheduler({
65
84
  maxRequests: opts.maxRequests,
66
- throttleRequests: opts.maxRequests > 0
85
+ throttleRequests: Boolean(opts.maxRequests && opts.maxRequests > 0)
67
86
  });
68
87
  this._cache = new Map();
69
88
  this._tiles = [];
@@ -183,22 +202,33 @@ export default class Tileset2D {
183
202
  }
184
203
 
185
204
  if (cullRect && this._viewport) {
186
- const [minX, minY, maxX, maxY] = getCullBounds({
205
+ const boundsArr = this._getCullBounds({
187
206
  viewport: this._viewport,
188
207
  z: this._zRange,
189
208
  cullRect
190
209
  });
210
+
191
211
  const {
192
212
  bbox
193
213
  } = tile;
194
214
 
195
- if ('west' in bbox) {
196
- return bbox.west < maxX && bbox.east > minX && bbox.south < maxY && bbox.north > minY;
215
+ for (const [minX, minY, maxX, maxY] of boundsArr) {
216
+ let overlaps;
217
+
218
+ if ('west' in bbox) {
219
+ overlaps = bbox.west < maxX && bbox.east > minX && bbox.south < maxY && bbox.north > minY;
220
+ } else {
221
+ const y0 = Math.min(bbox.top, bbox.bottom);
222
+ const y1 = Math.max(bbox.top, bbox.bottom);
223
+ overlaps = bbox.left < maxX && bbox.right > minX && y0 < maxY && y1 > minY;
224
+ }
225
+
226
+ if (overlaps) {
227
+ return true;
228
+ }
197
229
  }
198
230
 
199
- const y0 = Math.min(bbox.top, bbox.bottom);
200
- const y1 = Math.max(bbox.top, bbox.bottom);
201
- return bbox.left < maxX && bbox.right > minX && y0 < maxY && y1 > minY;
231
+ return false;
202
232
  }
203
233
 
204
234
  return true;
@@ -288,7 +318,7 @@ export default class Tileset2D {
288
318
 
289
319
  _pruneRequests() {
290
320
  const {
291
- maxRequests
321
+ maxRequests = 0
292
322
  } = this.opts;
293
323
  const abortCandidates = [];
294
324
  let ongoingRequestCount = 0;
@@ -345,12 +375,14 @@ export default class Tileset2D {
345
375
 
346
376
  if (overflown) {
347
377
  for (const [id, tile] of _cache) {
348
- if (!tile.isVisible) {
378
+ if (!tile.isVisible && !tile.isSelected) {
379
+ var _this$opts$onTileUnlo, _this$opts2;
380
+
349
381
  this._cacheByteSize -= opts.maxCacheByteSize ? tile.byteLength : 0;
350
382
 
351
383
  _cache.delete(id);
352
384
 
353
- this.opts.onTileUnload(tile);
385
+ (_this$opts$onTileUnlo = (_this$opts2 = this.opts).onTileUnload) === null || _this$opts$onTileUnlo === void 0 ? void 0 : _this$opts$onTileUnlo.call(_this$opts2, tile);
354
386
  }
355
387
 
356
388
  if (_cache.size <= maxCacheSize && this._cacheByteSize <= maxCacheByteSize) {
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/tileset-2d/tileset-2d.ts"],"names":["RequestScheduler","Matrix4","equals","Tile2DHeader","getTileIndices","tileToBoundingBox","getCullBounds","memoize","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","constructor","opts","tile","_cacheByteSize","byteLength","_resizeCache","_requestScheduler","throttleRequests","Boolean","_cache","Map","_tiles","_dirty","_viewport","_selectedTiles","_frameNumber","_modelMatrix","_modelMatrixInverse","setOptions","tiles","selectedTiles","isLoaded","every","needsReload","some","Object","assign","Number","isFinite","_maxZoom","Math","floor","_minZoom","ceil","finalize","values","isLoading","abort","clear","reloadAll","id","keys","get","includes","delete","setNeedsReload","update","viewport","modelMatrix","modelMatrixAsMatrix4","isModelMatrixNew","_zRange","clone","invert","tileIndices","modelMatrixInverse","map","index","_getTile","_rebuildTree","changed","updateTileStates","_pruneRequests","isTileVisible","cullRect","isVisible","boundsArr","_getCullBounds","z","bbox","minX","minY","maxX","maxY","overlaps","west","east","south","north","y0","min","top","bottom","y1","max","left","right","getTileId","x","y","getTileZoom","getTileMetadata","getParentIndex","visibilities","Array","size","i","isSelected","from","abortCandidates","ongoingRequestCount","push","length","shift","parent","children","_getNearestAncestor","Infinity","overflown","sort","t1","t2","zoom","create","set","loadData","getData","getTileData","requestScheduler","onLoad","onError","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 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"}
File without changes
File without changes
@@ -2,10 +2,10 @@ import { getOSMTileIndices } from './tile-2d-traversal';
2
2
  const TILE_SIZE = 512;
3
3
  const DEFAULT_EXTENT = [-Infinity, -Infinity, Infinity, Infinity];
4
4
  export const urlType = {
5
- type: 'url',
5
+ type: 'object',
6
6
  value: null,
7
7
  validate: (value, propType) => propType.optional && value === null || typeof value === 'string' || Array.isArray(value) && value.every(url => typeof url === 'string'),
8
- equals: (value1, value2) => {
8
+ equal: (value1, value2) => {
9
9
  if (value1 === value2) {
10
10
  return true;
11
11
  }
@@ -94,19 +94,23 @@ function getBoundingBox(viewport, zRange, extent) {
94
94
 
95
95
  export function getCullBounds({
96
96
  viewport,
97
- z,
97
+ z = 0,
98
98
  cullRect
99
99
  }) {
100
- const x = cullRect.x - viewport.x;
101
- const y = cullRect.y - viewport.y;
102
- const {
103
- width,
104
- height
105
- } = cullRect;
100
+ const subViewports = viewport.subViewports || [viewport];
101
+ return subViewports.map(v => getCullBoundsInViewport(v, z, cullRect));
102
+ }
106
103
 
104
+ function getCullBoundsInViewport(viewport, z, cullRect) {
107
105
  if (!Array.isArray(z)) {
106
+ const x = cullRect.x - viewport.x;
107
+ const y = cullRect.y - viewport.y;
108
+ const {
109
+ width,
110
+ height
111
+ } = cullRect;
108
112
  const unprojectOption = {
109
- targetZ: z || 0
113
+ targetZ: z
110
114
  };
111
115
  const topLeft = viewport.unproject([x, y], unprojectOption);
112
116
  const topRight = viewport.unproject([x + width, y], unprojectOption);
@@ -115,16 +119,8 @@ export function getCullBounds({
115
119
  return [Math.min(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]), Math.min(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]), Math.max(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]), Math.max(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1])];
116
120
  }
117
121
 
118
- const bounds0 = getCullBounds({
119
- viewport,
120
- z: z[0],
121
- cullRect
122
- });
123
- const bounds1 = getCullBounds({
124
- viewport,
125
- z: z[1],
126
- cullRect
127
- });
122
+ const bounds0 = getCullBoundsInViewport(viewport, z[0], cullRect);
123
+ const bounds1 = getCullBoundsInViewport(viewport, z[1], cullRect);
128
124
  return [Math.min(bounds0[0], bounds1[0]), Math.min(bounds0[1], bounds1[1]), Math.max(bounds0[2], bounds1[2]), Math.max(bounds0[3], bounds1[3])];
129
125
  }
130
126
 
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/tileset-2d/utils.ts"],"names":["getOSMTileIndices","TILE_SIZE","DEFAULT_EXTENT","Infinity","urlType","type","value","validate","propType","optional","Array","isArray","every","url","equal","value1","value2","len","length","i","transformBox","bbox","modelMatrix","transformedCoords","transformAsPoint","transformedBox","Math","min","map","max","stringHash","s","abs","split","reduce","a","b","charCodeAt","getURLFromTemplate","template","tile","index","id","key","Object","keys","regex","RegExp","replace","String","Number","isInteger","y","z","pow","getBoundingBox","viewport","zRange","extent","bounds","minZ","maxZ","bounds0","getBounds","bounds1","isGeospatial","getCullBounds","cullRect","subViewports","v","getCullBoundsInViewport","x","width","height","unprojectOption","targetZ","topLeft","unproject","topRight","bottomLeft","bottomRight","getIndexingCoords","scale","modelMatrixInverse","transformedTileIndex","getScale","tileSize","osmTile2lngLat","lng","n","PI","lat","atan","exp","tile2XY","tileToBoundingBox","west","north","east","south","left","top","right","bottom","getIdentityTileIndices","minX","minY","maxX","maxY","indices","floor","push","getTileIndices","maxZoom","minZoom","zoomOffset","round","zoom","log2","ceil","isFinite","transformedExtent","isURLTemplate","test","isGeoBoundingBox"],"mappings":"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","sourcesContent":["import {Viewport} from '@deck.gl/core';\nimport {Matrix4} from '@math.gl/core';\nimport {getOSMTileIndices} from './tile-2d-traversal';\nimport {Bounds, GeoBoundingBox, TileBoundingBox, TileIndex, ZRange} from './types';\n\nconst TILE_SIZE = 512;\nconst DEFAULT_EXTENT: Bounds = [-Infinity, -Infinity, Infinity, Infinity];\n\nexport type URLTemplate = string | string[] | null;\n\nexport const urlType = {\n type: 'object' as const,\n value: null as URLTemplate,\n validate: (value, propType) =>\n (propType.optional && value === null) ||\n typeof value === 'string' ||\n (Array.isArray(value) && value.every(url => typeof url === 'string')),\n equal: (value1, value2) => {\n if (value1 === value2) {\n return true;\n }\n if (!Array.isArray(value1) || !Array.isArray(value2)) {\n return false;\n }\n const len = value1.length;\n if (len !== value2.length) {\n return false;\n }\n for (let i = 0; i < len; i++) {\n if (value1[i] !== value2[i]) {\n return false;\n }\n }\n return true;\n }\n};\n\nfunction transformBox(bbox: Bounds, modelMatrix: Matrix4): Bounds {\n const transformedCoords = [\n // top-left\n modelMatrix.transformAsPoint([bbox[0], bbox[1]]),\n // top-right\n modelMatrix.transformAsPoint([bbox[2], bbox[1]]),\n // bottom-left\n modelMatrix.transformAsPoint([bbox[0], bbox[3]]),\n // bottom-right\n modelMatrix.transformAsPoint([bbox[2], bbox[3]])\n ];\n const transformedBox: Bounds = [\n // Minimum x coord\n Math.min(...transformedCoords.map(i => i[0])),\n // Minimum y coord\n Math.min(...transformedCoords.map(i => i[1])),\n // Max x coord\n Math.max(...transformedCoords.map(i => i[0])),\n // Max y coord\n Math.max(...transformedCoords.map(i => i[1]))\n ];\n return transformedBox;\n}\n\nfunction stringHash(s: string): number {\n return Math.abs(s.split('').reduce((a, b) => ((a << 5) - a + b.charCodeAt(0)) | 0, 0));\n}\n\nexport function getURLFromTemplate(\n template: URLTemplate,\n tile: {\n index: TileIndex;\n id: string;\n }\n): string | null {\n if (!template || !template.length) {\n return null;\n }\n const {index, id} = tile;\n\n if (Array.isArray(template)) {\n const i = stringHash(id) % template.length;\n template = template[i];\n }\n\n let url = template;\n for (const key of Object.keys(index)) {\n const regex = new RegExp(`{${key}}`, 'g');\n url = url.replace(regex, String(index[key]));\n }\n\n // Back-compatible support for {-y}\n if (Number.isInteger(index.y) && Number.isInteger(index.z)) {\n url = url.replace(/\\{-y\\}/g, String(Math.pow(2, index.z) - index.y - 1));\n }\n return url;\n}\n\n/**\n * gets the bounding box of a viewport\n */\nfunction getBoundingBox(viewport: Viewport, zRange: number[] | null, extent: Bounds): Bounds {\n let bounds;\n if (zRange && zRange.length === 2) {\n const [minZ, maxZ] = zRange;\n const bounds0 = viewport.getBounds({z: minZ});\n const bounds1 = viewport.getBounds({z: maxZ});\n bounds = [\n Math.min(bounds0[0], bounds1[0]),\n Math.min(bounds0[1], bounds1[1]),\n Math.max(bounds0[2], bounds1[2]),\n Math.max(bounds0[3], bounds1[3])\n ];\n } else {\n bounds = viewport.getBounds();\n }\n if (!viewport.isGeospatial) {\n return [\n // Top corner should not be more then bottom corner in either direction\n Math.max(Math.min(bounds[0], extent[2]), extent[0]),\n Math.max(Math.min(bounds[1], extent[3]), extent[1]),\n // Bottom corner should not be less then top corner in either direction\n Math.min(Math.max(bounds[2], extent[0]), extent[2]),\n Math.min(Math.max(bounds[3], extent[1]), extent[3])\n ];\n }\n return [\n Math.max(bounds[0], extent[0]),\n Math.max(bounds[1], extent[1]),\n Math.min(bounds[2], extent[2]),\n Math.min(bounds[3], extent[3])\n ];\n}\n\n/** Get culling bounds in world space */\nexport function getCullBounds({\n viewport,\n z = 0,\n cullRect\n}: {\n /** Current viewport */\n viewport: Viewport;\n /** Current z range */\n z: ZRange | number | undefined;\n /** Culling rectangle in screen space */\n cullRect: {x: number; y: number; width: number; height: number};\n}): [number, number, number, number][] {\n const subViewports = viewport.subViewports || [viewport];\n return subViewports.map(v => getCullBoundsInViewport(v, z, cullRect));\n}\n\nfunction getCullBoundsInViewport(\n /** Current viewport */\n viewport: Viewport,\n /** At altitude */\n z: ZRange | number,\n /** Culling rectangle in screen space */\n cullRect: {x: number; y: number; width: number; height: number}\n): [number, number, number, number] {\n if (!Array.isArray(z)) {\n const x = cullRect.x - viewport.x;\n const y = cullRect.y - viewport.y;\n const {width, height} = cullRect;\n\n const unprojectOption = {targetZ: z};\n\n const topLeft = viewport.unproject([x, y], unprojectOption);\n const topRight = viewport.unproject([x + width, y], unprojectOption);\n const bottomLeft = viewport.unproject([x, y + height], unprojectOption);\n const bottomRight = viewport.unproject([x + width, y + height], unprojectOption);\n\n return [\n Math.min(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]),\n Math.min(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]),\n Math.max(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]),\n Math.max(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1])\n ];\n }\n\n const bounds0 = getCullBoundsInViewport(viewport, z[0], cullRect);\n const bounds1 = getCullBoundsInViewport(viewport, z[1], cullRect);\n\n return [\n Math.min(bounds0[0], bounds1[0]),\n Math.min(bounds0[1], bounds1[1]),\n Math.max(bounds0[2], bounds1[2]),\n Math.max(bounds0[3], bounds1[3])\n ];\n}\n\nfunction getIndexingCoords(bbox: Bounds, scale: number, modelMatrixInverse?: Matrix4): Bounds {\n if (modelMatrixInverse) {\n const transformedTileIndex = transformBox(bbox, modelMatrixInverse).map(\n i => (i * scale) / TILE_SIZE\n );\n return transformedTileIndex as Bounds;\n }\n return bbox.map(i => (i * scale) / TILE_SIZE) as Bounds;\n}\n\nfunction getScale(z: number, tileSize: number): number {\n return (Math.pow(2, z) * TILE_SIZE) / tileSize;\n}\n\n// https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Lon..2Flat._to_tile_numbers_2\nexport function osmTile2lngLat(x: number, y: number, z: number): [number, number] {\n const scale = getScale(z, TILE_SIZE);\n const lng = (x / scale) * 360 - 180;\n const n = Math.PI - (2 * Math.PI * y) / scale;\n const lat = (180 / Math.PI) * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n)));\n return [lng, lat];\n}\n\nfunction tile2XY(x: number, y: number, z: number, tileSize: number): [number, number] {\n const scale = getScale(z, tileSize);\n return [(x / scale) * TILE_SIZE, (y / scale) * TILE_SIZE];\n}\nexport function tileToBoundingBox(\n viewport: Viewport,\n x: number,\n y: number,\n z: number,\n tileSize: number = TILE_SIZE\n): TileBoundingBox {\n if (viewport.isGeospatial) {\n const [west, north] = osmTile2lngLat(x, y, z);\n const [east, south] = osmTile2lngLat(x + 1, y + 1, z);\n return {west, north, east, south};\n }\n const [left, top] = tile2XY(x, y, z, tileSize);\n const [right, bottom] = tile2XY(x + 1, y + 1, z, tileSize);\n return {left, top, right, bottom};\n}\n\nfunction getIdentityTileIndices(\n viewport: Viewport,\n z: number,\n tileSize: number,\n extent: Bounds,\n modelMatrixInverse?: Matrix4\n) {\n const bbox = getBoundingBox(viewport, null, extent);\n const scale = getScale(z, tileSize);\n const [minX, minY, maxX, maxY] = getIndexingCoords(bbox, scale, modelMatrixInverse);\n const indices: TileIndex[] = [];\n\n /*\n | TILE | TILE | TILE |\n |(minX) |(maxX)\n */\n for (let x = Math.floor(minX); x < maxX; x++) {\n for (let y = Math.floor(minY); y < maxY; y++) {\n indices.push({x, y, z});\n }\n }\n return indices;\n}\n\n/**\n * Returns all tile indices in the current viewport. If the current zoom level is smaller\n * than minZoom, return an empty array. If the current zoom level is greater than maxZoom,\n * return tiles that are on maxZoom.\n */\n// eslint-disable-next-line complexity\nexport function getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n extent,\n tileSize = TILE_SIZE,\n modelMatrix,\n modelMatrixInverse,\n zoomOffset = 0\n}: {\n viewport: Viewport;\n maxZoom?: number;\n minZoom?: number;\n zRange: ZRange | undefined;\n extent?: Bounds;\n tileSize?: number;\n modelMatrix?: Matrix4;\n modelMatrixInverse?: Matrix4;\n zoomOffset?: number;\n}) {\n let z = viewport.isGeospatial\n ? Math.round(viewport.zoom + Math.log2(TILE_SIZE / tileSize)) + zoomOffset\n : Math.ceil(viewport.zoom) + zoomOffset;\n if (typeof minZoom === 'number' && Number.isFinite(minZoom) && z < minZoom) {\n if (!extent) {\n return [];\n }\n z = minZoom;\n }\n if (typeof maxZoom === 'number' && Number.isFinite(maxZoom) && z > maxZoom) {\n z = maxZoom;\n }\n let transformedExtent = extent;\n if (modelMatrix && modelMatrixInverse && extent && !viewport.isGeospatial) {\n transformedExtent = transformBox(extent, modelMatrix);\n }\n return viewport.isGeospatial\n ? getOSMTileIndices(viewport, z, zRange, extent)\n : getIdentityTileIndices(\n viewport,\n z,\n tileSize,\n transformedExtent || DEFAULT_EXTENT,\n modelMatrixInverse\n );\n}\n\n/**\n * Returns true if s is a valid URL template\n */\nexport function isURLTemplate(s: string): boolean {\n return /(?=.*{z})(?=.*{x})(?=.*({y}|{-y}))/.test(s);\n}\n\nexport function isGeoBoundingBox(v: any): v is GeoBoundingBox {\n return (\n Number.isFinite(v.west) &&\n Number.isFinite(v.north) &&\n Number.isFinite(v.east) &&\n Number.isFinite(v.south)\n );\n}\n"],"file":"utils.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/trips-layer/trips-layer.ts"],"names":["PathLayer","defaultProps","fadeTrail","trailLength","type","value","min","currentTime","getTimestamps","d","timestamps","TripsLayer","getShaders","shaders","inject","initializeState","attributeManager","getAttributeManager","addInstanced","size","accessor","shaderAttributes","instanceTimestamps","vertexOffset","instanceNextTimestamps","draw","params","props","uniforms"],"mappings":";AAsBA,SAAQA,SAAR,QAAwC,iBAAxC;AAEA,MAAMC,YAA2C,GAAG;AAClDC,EAAAA,SAAS,EAAE,IADuC;AAElDC,EAAAA,WAAW,EAAE;AAACC,IAAAA,IAAI,EAAE,QAAP;AAAiBC,IAAAA,KAAK,EAAE,GAAxB;AAA6BC,IAAAA,GAAG,EAAE;AAAlC,GAFqC;AAGlDC,EAAAA,WAAW,EAAE;AAACH,IAAAA,IAAI,EAAE,QAAP;AAAiBC,IAAAA,KAAK,EAAE,CAAxB;AAA2BC,IAAAA,GAAG,EAAE;AAAhC,GAHqC;AAIlDE,EAAAA,aAAa,EAAE;AAACJ,IAAAA,IAAI,EAAE,UAAP;AAAmBC,IAAAA,KAAK,EAAEI,CAAC,IAAIA,CAAC,CAACC;AAAjC;AAJmC,CAApD;AAkCA,eAAe,MAAMC,UAAN,SAAuDX,SAAvD,CAGb;AAIAY,EAAAA,UAAU,GAAG;AACX,UAAMC,OAAO,GAAG,MAAMD,UAAN,EAAhB;AACAC,IAAAA,OAAO,CAACC,MAAR,GAAiB;AACf,oJADe;AAQf,qIARe;AAWf,2HAXe;AAkBf,0HAlBe;AAwBf;AAxBe,KAAjB;AA8BA,WAAOD,OAAP;AACD;;AAEDE,EAAAA,eAAe,GAAG;AAChB,UAAMA,eAAN;AAEA,UAAMC,gBAAgB,GAAG,KAAKC,mBAAL,EAAzB;AACAD,IAAAA,gBAAgB,CAAEE,YAAlB,CAA+B;AAC7BR,MAAAA,UAAU,EAAE;AACVS,QAAAA,IAAI,EAAE,CADI;AAEVC,QAAAA,QAAQ,EAAE,eAFA;AAGVC,QAAAA,gBAAgB,EAAE;AAChBC,UAAAA,kBAAkB,EAAE;AAClBC,YAAAA,YAAY,EAAE;AADI,WADJ;AAIhBC,UAAAA,sBAAsB,EAAE;AACtBD,YAAAA,YAAY,EAAE;AADQ;AAJR;AAHR;AADiB,KAA/B;AAcD;;AAEDE,EAAAA,IAAI,CAACC,MAAD,EAAS;AACX,UAAM;AAACxB,MAAAA,SAAD;AAAYC,MAAAA,WAAZ;AAAyBI,MAAAA;AAAzB,QAAwC,KAAKoB,KAAnD;AAEAD,IAAAA,MAAM,CAACE,QAAP,GAAkB,EAChB,GAAGF,MAAM,CAACE,QADM;AAEhB1B,MAAAA,SAFgB;AAGhBC,MAAAA,WAHgB;AAIhBI,MAAAA;AAJgB,KAAlB;AAOA,UAAMkB,IAAN,CAAWC,MAAX;AACD;;AAtED;;gBAHmBf,U,eAIA,Y;;gBAJAA,U,kBAKGV,Y","sourcesContent":["// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport type {NumericArray} from '@math.gl/core';\nimport {AccessorFunction, DefaultProps} from '@deck.gl/core';\nimport {PathLayer, PathLayerProps} from '@deck.gl/layers';\n\nconst defaultProps: DefaultProps<TripsLayerProps> = {\n fadeTrail: true,\n trailLength: {type: 'number', value: 120, min: 0},\n currentTime: {type: 'number', value: 0, min: 0},\n getTimestamps: {type: 'accessor', value: d => d.timestamps}\n};\n\n/** All properties supported by TripsLayer. */\nexport type TripsLayerProps<DataT = any> = _TripsLayerProps<DataT> & PathLayerProps<DataT>;\n\n/** Properties added by TripsLayer. */\ntype _TripsLayerProps<DataT = any> = {\n /**\n * Whether or not the path fades out.\n * @default true\n */\n fadeTrail?: boolean;\n /**\n * Trail length.\n * @default 120\n */\n trailLength?: number;\n /**\n * The current time of the frame.\n * @default 0\n */\n currentTime?: number;\n /**\n * Timestamp accessor.\n */\n getTimestamps?: AccessorFunction<DataT, NumericArray>;\n};\n\n/** Render animated paths that represent vehicle trips. */\nexport default class TripsLayer<DataT = any, ExtraProps = {}> extends PathLayer<\n DataT,\n Required<_TripsLayerProps> & ExtraProps\n> {\n static layerName = 'TripsLayer';\n static defaultProps = defaultProps;\n\n getShaders() {\n const shaders = super.getShaders();\n shaders.inject = {\n 'vs:#decl': `\\\nuniform float trailLength;\nattribute float instanceTimestamps;\nattribute float instanceNextTimestamps;\nvarying float vTime;\n`,\n // Timestamp of the vertex\n 'vs:#main-end': `\\\nvTime = instanceTimestamps + (instanceNextTimestamps - instanceTimestamps) * vPathPosition.y / vPathLength;\n`,\n 'fs:#decl': `\\\nuniform bool fadeTrail;\nuniform float trailLength;\nuniform float currentTime;\nvarying float vTime;\n`,\n // Drop the segments outside of the time window\n 'fs:#main-start': `\\\nif(vTime > currentTime || (fadeTrail && (vTime < currentTime - trailLength))) {\n discard;\n}\n`,\n // Fade the color (currentTime - 100%, end of trail - 0%)\n 'fs:DECKGL_FILTER_COLOR': `\\\nif(fadeTrail) {\n color.a *= 1.0 - (currentTime - vTime) / trailLength;\n}\n`\n };\n return shaders;\n }\n\n initializeState() {\n super.initializeState();\n\n const attributeManager = this.getAttributeManager();\n attributeManager!.addInstanced({\n timestamps: {\n size: 1,\n accessor: 'getTimestamps',\n shaderAttributes: {\n instanceTimestamps: {\n vertexOffset: 0\n },\n instanceNextTimestamps: {\n vertexOffset: 1\n }\n }\n }\n });\n }\n\n draw(params) {\n const {fadeTrail, trailLength, currentTime} = this.props;\n\n params.uniforms = {\n ...params.uniforms,\n fadeTrail,\n trailLength,\n currentTime\n };\n\n super.draw(params);\n }\n}\n"],"file":"trips-layer.js"}
1
+ {"version":3,"sources":["../../../src/trips-layer/trips-layer.ts"],"names":["PathLayer","defaultProps","fadeTrail","trailLength","type","value","min","currentTime","getTimestamps","d","timestamps","TripsLayer","getShaders","shaders","inject","initializeState","attributeManager","getAttributeManager","addInstanced","size","accessor","shaderAttributes","instanceTimestamps","vertexOffset","instanceNextTimestamps","draw","params","props","uniforms"],"mappings":";AAsBA,SAAQA,SAAR,QAAwC,iBAAxC;AAEA,MAAMC,YAA2C,GAAG;AAClDC,EAAAA,SAAS,EAAE,IADuC;AAElDC,EAAAA,WAAW,EAAE;AAACC,IAAAA,IAAI,EAAE,QAAP;AAAiBC,IAAAA,KAAK,EAAE,GAAxB;AAA6BC,IAAAA,GAAG,EAAE;AAAlC,GAFqC;AAGlDC,EAAAA,WAAW,EAAE;AAACH,IAAAA,IAAI,EAAE,QAAP;AAAiBC,IAAAA,KAAK,EAAE,CAAxB;AAA2BC,IAAAA,GAAG,EAAE;AAAhC,GAHqC;AAIlDE,EAAAA,aAAa,EAAE;AAACJ,IAAAA,IAAI,EAAE,UAAP;AAAmBC,IAAAA,KAAK,EAAEI,CAAC,IAAIA,CAAC,CAACC;AAAjC;AAJmC,CAApD;AAkCA,eAAe,MAAMC,UAAN,SAAkEX,SAAlE,CAGb;AAIAY,EAAAA,UAAU,GAAG;AACX,UAAMC,OAAO,GAAG,MAAMD,UAAN,EAAhB;AACAC,IAAAA,OAAO,CAACC,MAAR,GAAiB;AACf,oJADe;AAQf,qIARe;AAWf,2HAXe;AAkBf,0HAlBe;AAwBf;AAxBe,KAAjB;AA8BA,WAAOD,OAAP;AACD;;AAEDE,EAAAA,eAAe,GAAG;AAChB,UAAMA,eAAN;AAEA,UAAMC,gBAAgB,GAAG,KAAKC,mBAAL,EAAzB;AACAD,IAAAA,gBAAgB,CAAEE,YAAlB,CAA+B;AAC7BR,MAAAA,UAAU,EAAE;AACVS,QAAAA,IAAI,EAAE,CADI;AAEVC,QAAAA,QAAQ,EAAE,eAFA;AAGVC,QAAAA,gBAAgB,EAAE;AAChBC,UAAAA,kBAAkB,EAAE;AAClBC,YAAAA,YAAY,EAAE;AADI,WADJ;AAIhBC,UAAAA,sBAAsB,EAAE;AACtBD,YAAAA,YAAY,EAAE;AADQ;AAJR;AAHR;AADiB,KAA/B;AAcD;;AAEDE,EAAAA,IAAI,CAACC,MAAD,EAAS;AACX,UAAM;AAACxB,MAAAA,SAAD;AAAYC,MAAAA,WAAZ;AAAyBI,MAAAA;AAAzB,QAAwC,KAAKoB,KAAnD;AAEAD,IAAAA,MAAM,CAACE,QAAP,GAAkB,EAChB,GAAGF,MAAM,CAACE,QADM;AAEhB1B,MAAAA,SAFgB;AAGhBC,MAAAA,WAHgB;AAIhBI,MAAAA;AAJgB,KAAlB;AAOA,UAAMkB,IAAN,CAAWC,MAAX;AACD;;AAtED;;gBAHmBf,U,eAIA,Y;;gBAJAA,U,kBAKGV,Y","sourcesContent":["// Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport type {NumericArray} from '@math.gl/core';\nimport {AccessorFunction, DefaultProps} from '@deck.gl/core';\nimport {PathLayer, PathLayerProps} from '@deck.gl/layers';\n\nconst defaultProps: DefaultProps<TripsLayerProps> = {\n fadeTrail: true,\n trailLength: {type: 'number', value: 120, min: 0},\n currentTime: {type: 'number', value: 0, min: 0},\n getTimestamps: {type: 'accessor', value: d => d.timestamps}\n};\n\n/** All properties supported by TripsLayer. */\nexport type TripsLayerProps<DataT = any> = _TripsLayerProps<DataT> & PathLayerProps<DataT>;\n\n/** Properties added by TripsLayer. */\ntype _TripsLayerProps<DataT = any> = {\n /**\n * Whether or not the path fades out.\n * @default true\n */\n fadeTrail?: boolean;\n /**\n * Trail length.\n * @default 120\n */\n trailLength?: number;\n /**\n * The current time of the frame.\n * @default 0\n */\n currentTime?: number;\n /**\n * Timestamp accessor.\n */\n getTimestamps?: AccessorFunction<DataT, NumericArray>;\n};\n\n/** Render animated paths that represent vehicle trips. */\nexport default class TripsLayer<DataT = any, ExtraProps extends {} = {}> extends PathLayer<\n DataT,\n Required<_TripsLayerProps> & ExtraProps\n> {\n static layerName = 'TripsLayer';\n static defaultProps = defaultProps;\n\n getShaders() {\n const shaders = super.getShaders();\n shaders.inject = {\n 'vs:#decl': `\\\nuniform float trailLength;\nattribute float instanceTimestamps;\nattribute float instanceNextTimestamps;\nvarying float vTime;\n`,\n // Timestamp of the vertex\n 'vs:#main-end': `\\\nvTime = instanceTimestamps + (instanceNextTimestamps - instanceTimestamps) * vPathPosition.y / vPathLength;\n`,\n 'fs:#decl': `\\\nuniform bool fadeTrail;\nuniform float trailLength;\nuniform float currentTime;\nvarying float vTime;\n`,\n // Drop the segments outside of the time window\n 'fs:#main-start': `\\\nif(vTime > currentTime || (fadeTrail && (vTime < currentTime - trailLength))) {\n discard;\n}\n`,\n // Fade the color (currentTime - 100%, end of trail - 0%)\n 'fs:DECKGL_FILTER_COLOR': `\\\nif(fadeTrail) {\n color.a *= 1.0 - (currentTime - vTime) / trailLength;\n}\n`\n };\n return shaders;\n }\n\n initializeState() {\n super.initializeState();\n\n const attributeManager = this.getAttributeManager();\n attributeManager!.addInstanced({\n timestamps: {\n size: 1,\n accessor: 'getTimestamps',\n shaderAttributes: {\n instanceTimestamps: {\n vertexOffset: 0\n },\n instanceNextTimestamps: {\n vertexOffset: 1\n }\n }\n }\n });\n }\n\n draw(params) {\n const {fadeTrail, trailLength, currentTime} = this.props;\n\n params.uniforms = {\n ...params.uniforms,\n fadeTrail,\n trailLength,\n currentTime\n };\n\n super.draw(params);\n }\n}\n"],"file":"trips-layer.js"}