@deck.gl/geo-layers 8.10.0-alpha.6 → 9.0.0-alpha.3

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 (120) hide show
  1. package/dist/dist.dev.js +7621 -22014
  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 +10 -1
  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 +0 -8
  9. package/dist/es5/index.js.map +1 -1
  10. package/{src/mesh-layer/mesh-layer.ts → dist/es5/mesh-layer/mesh-layer.ts.disabled} +8 -7
  11. package/dist/es5/mvt-layer/find-index-binary.js.map +1 -1
  12. package/dist/es5/mvt-layer/mvt-layer.js +15 -6
  13. package/dist/es5/mvt-layer/mvt-layer.js.map +1 -1
  14. package/dist/es5/quadkey-layer/quadkey-layer.js.map +1 -1
  15. package/dist/es5/s2-layer/s2-layer.js.map +1 -1
  16. package/dist/es5/terrain-layer/terrain-layer.js.map +1 -1
  17. package/{src/tile-3d-layer/tile-3d-layer.ts → dist/es5/tile-3d-layer/tile-3d-layer.ts.disabled} +9 -9
  18. package/dist/es5/tile-layer/tile-layer.js +19 -9
  19. package/dist/es5/tile-layer/tile-layer.js.map +1 -1
  20. package/dist/es5/tileset-2d/tile-2d-traversal.js.map +1 -1
  21. package/dist/es5/tileset-2d/tileset-2d.js +1 -1
  22. package/dist/es5/tileset-2d/tileset-2d.js.map +1 -1
  23. package/dist/es5/tileset-2d/utils.js +2 -3
  24. package/dist/es5/tileset-2d/utils.js.map +1 -1
  25. package/dist/es5/trips-layer/trips-layer.js.map +1 -1
  26. package/dist/es5/wms-layer/wms-layer.js +6 -8
  27. package/dist/es5/wms-layer/wms-layer.js.map +1 -1
  28. package/dist/esm/geo-cell-layer/GeoCellLayer.js.map +1 -1
  29. package/dist/esm/geohash-layer/geohash-layer.js.map +1 -1
  30. package/dist/esm/great-circle-layer/great-circle-layer.js.map +1 -1
  31. package/dist/esm/h3-layers/h3-cluster-layer.js +5 -0
  32. package/dist/esm/h3-layers/h3-cluster-layer.js.map +1 -1
  33. package/dist/esm/h3-layers/h3-hexagon-layer.js.map +1 -1
  34. package/dist/esm/index.js +0 -1
  35. package/dist/esm/index.js.map +1 -1
  36. package/dist/esm/mesh-layer/mesh-layer.ts.disabled +176 -0
  37. package/dist/esm/mvt-layer/find-index-binary.js.map +1 -1
  38. package/dist/esm/mvt-layer/mvt-layer.js +6 -1
  39. package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
  40. package/dist/esm/quadkey-layer/quadkey-layer.js.map +1 -1
  41. package/dist/esm/s2-layer/s2-layer.js.map +1 -1
  42. package/dist/esm/terrain-layer/terrain-layer.js.map +1 -1
  43. package/dist/esm/tile-3d-layer/tile-3d-layer.ts.disabled +436 -0
  44. package/dist/esm/tile-layer/tile-layer.js +10 -6
  45. package/dist/esm/tile-layer/tile-layer.js.map +1 -1
  46. package/dist/esm/tileset-2d/tile-2d-traversal.js.map +1 -1
  47. package/dist/esm/tileset-2d/tileset-2d.js +1 -1
  48. package/dist/esm/tileset-2d/tileset-2d.js.map +1 -1
  49. package/dist/esm/tileset-2d/utils.js +2 -2
  50. package/dist/esm/tileset-2d/utils.js.map +1 -1
  51. package/dist/esm/trips-layer/trips-layer.js.map +1 -1
  52. package/dist/esm/wms-layer/wms-layer.js +5 -5
  53. package/dist/esm/wms-layer/wms-layer.js.map +1 -1
  54. package/dist.min.js +29 -227
  55. package/package.json +17 -17
  56. package/src/geo-cell-layer/GeoCellLayer.ts +1 -1
  57. package/src/geohash-layer/geohash-layer.ts +2 -2
  58. package/src/great-circle-layer/great-circle-layer.ts +1 -1
  59. package/src/h3-layers/h3-cluster-layer.ts +6 -2
  60. package/src/h3-layers/h3-hexagon-layer.ts +2 -2
  61. package/src/index.ts +4 -2
  62. package/src/mesh-layer/mesh-layer.ts.disabled +176 -0
  63. package/src/mvt-layer/find-index-binary.ts +6 -6
  64. package/src/mvt-layer/mvt-layer.ts +19 -9
  65. package/src/quadkey-layer/quadkey-layer.ts +3 -2
  66. package/src/s2-layer/s2-layer.ts +2 -2
  67. package/src/terrain-layer/terrain-layer.ts +2 -2
  68. package/src/tile-3d-layer/tile-3d-layer.ts.disabled +436 -0
  69. package/src/tile-layer/tile-layer.ts +20 -10
  70. package/src/tileset-2d/tile-2d-traversal.ts +1 -1
  71. package/src/tileset-2d/tileset-2d.ts +6 -7
  72. package/src/tileset-2d/utils.ts +4 -4
  73. package/src/trips-layer/trips-layer.ts +3 -3
  74. package/src/wms-layer/wms-layer.ts +11 -7
  75. package/typed/geo-cell-layer/GeoCellLayer.d.ts +1 -1
  76. package/typed/geo-cell-layer/GeoCellLayer.d.ts.map +1 -1
  77. package/typed/geohash-layer/geohash-layer.d.ts +2 -2
  78. package/typed/geohash-layer/geohash-layer.d.ts.map +1 -1
  79. package/typed/great-circle-layer/great-circle-layer.d.ts +2 -2
  80. package/typed/great-circle-layer/great-circle-layer.d.ts.map +1 -1
  81. package/typed/h3-layers/h3-cluster-layer.d.ts +7 -2
  82. package/typed/h3-layers/h3-cluster-layer.d.ts.map +1 -1
  83. package/typed/h3-layers/h3-hexagon-layer.d.ts +2 -2
  84. package/typed/h3-layers/h3-hexagon-layer.d.ts.map +1 -1
  85. package/typed/index.d.ts +0 -2
  86. package/typed/index.d.ts.map +1 -1
  87. package/typed/mvt-layer/find-index-binary.d.ts +2 -2
  88. package/typed/mvt-layer/find-index-binary.d.ts.map +1 -1
  89. package/typed/mvt-layer/mvt-layer.d.ts +11 -3
  90. package/typed/mvt-layer/mvt-layer.d.ts.map +1 -1
  91. package/typed/quadkey-layer/quadkey-layer.d.ts +2 -2
  92. package/typed/quadkey-layer/quadkey-layer.d.ts.map +1 -1
  93. package/typed/s2-layer/s2-layer.d.ts +2 -2
  94. package/typed/s2-layer/s2-layer.d.ts.map +1 -1
  95. package/typed/terrain-layer/terrain-layer.d.ts +2 -2
  96. package/typed/terrain-layer/terrain-layer.d.ts.map +1 -1
  97. package/typed/tile-layer/tile-layer.d.ts +7 -2
  98. package/typed/tile-layer/tile-layer.d.ts.map +1 -1
  99. package/typed/tileset-2d/tile-2d-traversal.d.ts +1 -1
  100. package/typed/tileset-2d/tile-2d-traversal.d.ts.map +1 -1
  101. package/typed/tileset-2d/tileset-2d.d.ts +4 -4
  102. package/typed/tileset-2d/tileset-2d.d.ts.map +1 -1
  103. package/typed/tileset-2d/utils.d.ts +2 -2
  104. package/typed/tileset-2d/utils.d.ts.map +1 -1
  105. package/typed/trips-layer/trips-layer.d.ts +3 -3
  106. package/typed/trips-layer/trips-layer.d.ts.map +1 -1
  107. package/typed/wms-layer/wms-layer.d.ts +2 -1
  108. package/typed/wms-layer/wms-layer.d.ts.map +1 -1
  109. package/dist/es5/mesh-layer/mesh-layer.js +0 -212
  110. package/dist/es5/mesh-layer/mesh-layer.js.map +0 -1
  111. package/dist/es5/tile-3d-layer/tile-3d-layer.js +0 -512
  112. package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +0 -1
  113. package/dist/esm/mesh-layer/mesh-layer.js +0 -177
  114. package/dist/esm/mesh-layer/mesh-layer.js.map +0 -1
  115. package/dist/esm/tile-3d-layer/tile-3d-layer.js +0 -443
  116. package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +0 -1
  117. package/typed/mesh-layer/mesh-layer.d.ts +0 -38
  118. package/typed/mesh-layer/mesh-layer.d.ts.map +0 -1
  119. package/typed/tile-3d-layer/tile-3d-layer.d.ts +0 -62
  120. package/typed/tile-3d-layer/tile-3d-layer.d.ts.map +0 -1
@@ -1 +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","_requestScheduler","_cache","_dirty","_tiles","_cacheByteSize","_viewport","_zRange","_selectedTiles","_frameNumber","_modelMatrix","_modelMatrixInverse","_maxZoom","_minZoom","_getCullBounds","tile","byteLength","_resizeCache","throttleRequests","Boolean","Map","setOptions","tiles","selectedTiles","isLoaded","every","needsReload","some","Object","assign","Number","isFinite","Math","floor","ceil","finalize","values","isLoading","abort","clear","reloadAll","id","keys","get","includes","delete","setNeedsReload","update","viewport","modelMatrix","modelMatrixAsMatrix4","isModelMatrixNew","clone","invert","tileIndices","modelMatrixInverse","map","index","_getTile","_rebuildTree","changed","updateTileStates","_pruneRequests","isTileVisible","cullRect","isVisible","boundsArr","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 // eslint-disable-next-line complexity\n isTileVisible(\n tile: Tile2DHeader,\n cullRect?: {x: number; y: number; width: number; height: number}\n ): boolean {\n if (!tile.isVisible) {\n return false;\n }\n\n if (cullRect && this._viewport) {\n const boundsArr = this._getCullBounds({\n viewport: this._viewport,\n z: this._zRange,\n cullRect\n });\n const {bbox} = tile;\n for (const [minX, minY, maxX, maxY] of boundsArr) {\n let overlaps;\n if ('west' in bbox) {\n overlaps = bbox.west < maxX && bbox.east > minX && bbox.south < maxY && bbox.north > minY;\n } else {\n // top/bottom could be swapped depending on the indexing system\n const y0 = Math.min(bbox.top, bbox.bottom);\n const y1 = Math.max(bbox.top, bbox.bottom);\n overlaps = bbox.left < maxX && bbox.right > minX && y0 < maxY && y1 > minY;\n }\n if (overlaps) {\n return true;\n }\n }\n return false;\n }\n return true;\n }\n\n /* Public interface for subclassing */\n\n /** Returns array of tile indices in the current viewport */\n getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n modelMatrix,\n modelMatrixInverse\n }: {\n viewport: Viewport;\n maxZoom?: number;\n minZoom?: number;\n zRange: ZRange | undefined;\n tileSize?: number;\n modelMatrix?: Matrix4;\n modelMatrixInverse?: Matrix4;\n zoomOffset?: number;\n }): TileIndex[] {\n const {tileSize, extent, zoomOffset} = this.opts;\n return getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n tileSize,\n extent: extent as Bounds | undefined,\n modelMatrix,\n modelMatrixInverse,\n zoomOffset\n });\n }\n\n /** Returns unique string key for a tile index */\n getTileId(index: TileIndex) {\n return `${index.x}-${index.y}-${index.z}`;\n }\n\n /** Returns a zoom level for a tile index */\n getTileZoom(index: TileIndex) {\n return index.z;\n }\n\n /** Returns additional metadata to add to tile, bbox by default */\n getTileMetadata(index: TileIndex): Record<string, any> {\n const {tileSize} = this.opts;\n // @ts-expect-error\n return {bbox: tileToBoundingBox(this._viewport, index.x, index.y, index.z, tileSize)};\n }\n\n /** Returns index of the parent tile */\n getParentIndex(index: TileIndex) {\n const x = Math.floor(index.x / 2);\n const y = Math.floor(index.y / 2);\n const z = index.z - 1;\n return {x, y, z};\n }\n\n // Returns true if any tile's visibility changed\n private updateTileStates() {\n const refinementStrategy = this.opts.refinementStrategy || STRATEGY_DEFAULT;\n\n const visibilities = new Array(this._cache.size);\n let i = 0;\n // Reset state\n for (const tile of this._cache.values()) {\n // save previous state\n visibilities[i++] = tile.isVisible;\n tile.isSelected = false;\n tile.isVisible = false;\n }\n // @ts-expect-error called only when _selectedTiles is already defined\n for (const tile of this._selectedTiles) {\n tile.isSelected = true;\n tile.isVisible = true;\n }\n\n // Strategy-specific state logic\n (typeof refinementStrategy === 'function'\n ? refinementStrategy\n : STRATEGIES[refinementStrategy])(Array.from(this._cache.values()));\n\n i = 0;\n // Check if any visibility has changed\n for (const tile of this._cache.values()) {\n if (visibilities[i++] !== tile.isVisible) {\n return true;\n }\n }\n\n return false;\n }\n\n /* Private methods */\n\n private _getCullBounds = memoize(getCullBounds);\n\n private _pruneRequests(): void {\n const {maxRequests = 0} = this.opts;\n\n const abortCandidates: Tile2DHeader[] = [];\n let ongoingRequestCount = 0;\n for (const tile of this._cache.values()) {\n // Keep track of all the ongoing requests\n if (tile.isLoading) {\n ongoingRequestCount++;\n if (!tile.isSelected && !tile.isVisible) {\n abortCandidates.push(tile);\n }\n }\n }\n\n while (maxRequests > 0 && ongoingRequestCount > maxRequests && abortCandidates.length > 0) {\n // There are too many ongoing requests, so abort some that are unselected\n const tile = abortCandidates.shift()!;\n tile.abort();\n ongoingRequestCount--;\n }\n }\n\n // This needs to be called every time some tiles have been added/removed from cache\n private _rebuildTree() {\n const {_cache} = this;\n\n // Reset states\n for (const tile of _cache.values()) {\n tile.parent = null;\n if (tile.children) {\n tile.children.length = 0;\n }\n }\n\n // Rebuild tree\n for (const tile of _cache.values()) {\n const parent = this._getNearestAncestor(tile);\n tile.parent = parent;\n if (parent?.children) {\n parent.children.push(tile);\n }\n }\n }\n\n /**\n * Clear tiles that are not visible when the cache is full\n */\n /* eslint-disable complexity */\n private _resizeCache() {\n const {_cache, opts} = this;\n\n const maxCacheSize =\n opts.maxCacheSize ||\n // @ts-expect-error called only when selectedTiles is initialized\n (opts.maxCacheByteSize ? Infinity : DEFAULT_CACHE_SCALE * this.selectedTiles.length);\n const maxCacheByteSize = opts.maxCacheByteSize || Infinity;\n\n const overflown = _cache.size > maxCacheSize || this._cacheByteSize > maxCacheByteSize;\n\n if (overflown) {\n for (const [id, tile] of _cache) {\n if (!tile.isVisible && !tile.isSelected) {\n // delete tile\n this._cacheByteSize -= opts.maxCacheByteSize ? tile.byteLength : 0;\n _cache.delete(id);\n this.opts.onTileUnload?.(tile);\n }\n if (_cache.size <= maxCacheSize && this._cacheByteSize <= maxCacheByteSize) {\n break;\n }\n }\n this._rebuildTree();\n this._dirty = true;\n }\n if (this._dirty) {\n // sort by zoom level so that smaller tiles are displayed on top\n this._tiles = Array.from(this._cache.values()).sort((t1, t2) => t1.zoom - t2.zoom);\n\n this._dirty = false;\n }\n }\n /* eslint-enable complexity */\n\n private _getTile(index: TileIndex, create: true): Tile2DHeader;\n private _getTile(index: TileIndex, create?: false): Tile2DHeader | undefined;\n private _getTile(index: TileIndex, create?: boolean): Tile2DHeader | undefined {\n const id = this.getTileId(index);\n let tile = this._cache.get(id);\n let needsReload = false;\n\n if (!tile && create) {\n tile = new Tile2DHeader(index);\n Object.assign(tile, this.getTileMetadata(tile.index));\n Object.assign(tile, {id, zoom: this.getTileZoom(tile.index)});\n needsReload = true;\n this._cache.set(id, tile);\n this._dirty = true;\n } else if (tile && tile.needsReload) {\n needsReload = true;\n }\n if (tile && needsReload) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n tile.loadData({\n getData: this.opts.getTileData,\n requestScheduler: this._requestScheduler,\n onLoad: this.onTileLoad,\n onError: this.opts.onTileError\n });\n }\n\n return tile;\n }\n\n _getNearestAncestor(tile: Tile2DHeader): Tile2DHeader | null {\n const {_minZoom = 0} = this;\n\n let index = tile.index;\n while (this.getTileZoom(index) > _minZoom) {\n index = this.getParentIndex(index);\n const parent = this._getTile(index);\n if (parent) {\n return parent;\n }\n }\n return null;\n }\n}\n\n/* -- Refinement strategies --*/\n/* eslint-disable max-depth */\n\n// For all the selected && pending tiles:\n// - pick the closest ancestor as placeholder\n// - if no ancestor is visible, pick the closest children as placeholder\nfunction updateTileStateDefault(allTiles: Tile2DHeader[]) {\n for (const tile of allTiles) {\n tile.state = 0;\n }\n for (const tile of allTiles) {\n if (tile.isSelected && !getPlaceholderInAncestors(tile)) {\n getPlaceholderInChildren(tile);\n }\n }\n for (const tile of allTiles) {\n tile.isVisible = Boolean(tile.state! & TILE_STATE_VISIBLE);\n }\n}\n\n// Until a selected tile and all its selected siblings are loaded, use the closest ancestor as placeholder\nfunction updateTileStateReplace(allTiles: Tile2DHeader[]) {\n for (const tile of allTiles) {\n tile.state = 0;\n }\n for (const tile of allTiles) {\n if (tile.isSelected) {\n getPlaceholderInAncestors(tile);\n }\n }\n // Always process parents first\n const sortedTiles = Array.from(allTiles).sort((t1, t2) => t1.zoom - t2.zoom);\n for (const tile of sortedTiles) {\n tile.isVisible = Boolean(tile.state! & TILE_STATE_VISIBLE);\n\n if (tile.children && (tile.isVisible || tile.state! & TILE_STATE_VISITED)) {\n // If the tile is rendered, or if the tile has been explicitly hidden, hide all of its children\n for (const child of tile.children) {\n child.state = TILE_STATE_VISITED;\n }\n } else if (tile.isSelected) {\n getPlaceholderInChildren(tile);\n }\n }\n}\n\n// Walk up the tree until we find one ancestor that is loaded. Returns true if successful.\nfunction getPlaceholderInAncestors(startTile: Tile2DHeader) {\n let tile: Tile2DHeader | null = startTile;\n while (tile) {\n if (tile.isLoaded || tile.content) {\n tile.state! |= TILE_STATE_VISIBLE;\n return true;\n }\n tile = tile.parent;\n }\n return false;\n}\n\n// Recursively set children as placeholder\nfunction getPlaceholderInChildren(tile) {\n for (const child of tile.children) {\n if (child.isLoaded || child.content) {\n child.state |= TILE_STATE_VISIBLE;\n } else {\n getPlaceholderInChildren(child);\n }\n }\n}\n"],"file":"tileset-2d.js"}
1
+ {"version":3,"sources":["../../../src/tileset-2d/tileset-2d.ts"],"names":["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","_requestScheduler","_cache","_dirty","_tiles","_cacheByteSize","_viewport","_zRange","_selectedTiles","_frameNumber","_modelMatrix","_modelMatrixInverse","_maxZoom","_minZoom","_getCullBounds","tile","byteLength","_resizeCache","throttleRequests","Boolean","Map","setOptions","tiles","selectedTiles","isLoaded","every","needsReload","some","Object","assign","Number","isFinite","Math","floor","ceil","finalize","values","isLoading","abort","clear","reloadAll","id","keys","get","includes","delete","setNeedsReload","update","viewport","modelMatrix","modelMatrixAsMatrix4","isModelMatrixNew","clone","invert","tileIndices","modelMatrixInverse","map","index","_getTile","_rebuildTree","changed","updateTileStates","_pruneRequests","isTileVisible","cullRect","isVisible","boundsArr","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, NumericArray} from '@math.gl/core';\n\nimport {Tile2DHeader} from './tile-2d-header';\n\nimport {getTileIndices, tileToBoundingBox, getCullBounds} from './utils';\nimport {Bounds, TileIndex, ZRange} from './types';\nimport {TileLoadProps} from './types';\nimport {memoize} from './memoize';\n\n// bit masks\nconst TILE_STATE_VISITED = 1;\nconst TILE_STATE_VISIBLE = 2;\n/*\n show cached parent tile if children are loading\n +-----------+ +-----+ +-----+-----+\n | | | | | | |\n | | | | | | |\n | | --> +-----+-----+ -> +-----+-----+\n | | | | | | |\n | | | | | | |\n +-----------+ +-----+ +-----+-----+\n\n show cached children tiles when parent is loading\n +-------+---- +------------\n | | |\n | | |\n | | |\n +-------+---- --> |\n | | |\n */\n\nexport const STRATEGY_NEVER = 'never';\nexport const STRATEGY_REPLACE = 'no-overlap';\nexport const STRATEGY_DEFAULT = 'best-available';\n\nexport type RefinementStrategyFunction = (tiles: Tile2DHeader[]) => void;\nexport type RefinementStrategy =\n | 'never'\n | 'no-overlap'\n | 'best-available'\n | RefinementStrategyFunction;\n\nconst DEFAULT_CACHE_SCALE = 5;\n\nconst STRATEGIES = {\n [STRATEGY_DEFAULT]: updateTileStateDefault,\n [STRATEGY_REPLACE]: updateTileStateReplace,\n [STRATEGY_NEVER]: () => {}\n};\n\nexport type Tileset2DProps<DataT = any> = {\n /** `getTileData` is called to retrieve the data of each tile. */\n getTileData: (props: TileLoadProps) => Promise<DataT> | DataT;\n\n /** The bounding box of the layer's data. */\n extent?: number[] | null;\n /** The pixel dimension of the tiles, usually a power of 2. */\n tileSize?: number;\n /** The max zoom level of the layer's data. @default null */\n maxZoom?: number | null;\n /** The min zoom level of the layer's data. @default 0 */\n minZoom?: number | null;\n /** The maximum number of tiles that can be cached. */\n maxCacheSize?: number | null;\n /** The maximum memory used for caching tiles. @default null */\n maxCacheByteSize?: number | null;\n /** How the tile layer refines the visibility of tiles. @default 'best-available' */\n refinementStrategy?: RefinementStrategy;\n /** Range of minimum and maximum heights in the tile. */\n zRange?: ZRange | null;\n /** The maximum number of concurrent getTileData calls. @default 6 */\n maxRequests?: number;\n /** Changes the zoom level at which the tiles are fetched. Needs to be an integer. @default 0 */\n zoomOffset?: number;\n\n /** Called when a tile successfully loads. */\n onTileLoad?: (tile: Tile2DHeader<DataT>) => void;\n /** Called when a tile is cleared from cache. */\n onTileUnload?: (tile: Tile2DHeader<DataT>) => void;\n /** Called when a tile failed to load. */\n onTileError?: (err: any, tile: Tile2DHeader<DataT>) => void;\n\n // onTileLoad: (tile: Tile2DHeader) => void;\n // onTileUnload: (tile: Tile2DHeader) => void;\n // onTileError: (error: any, tile: Tile2DHeader) => void;\n /** Called when all tiles in the current viewport are loaded. */\n // sonViewportLoad?: ((tiles: Tile2DHeader<DataT>[]) => void) | null;\n};\n\nexport const DEFAULT_TILESET2D_PROPS: Omit<Required<Tileset2DProps>, 'getTileData'> = {\n extent: null,\n tileSize: 512,\n\n maxZoom: null,\n minZoom: null,\n maxCacheSize: null,\n maxCacheByteSize: null,\n refinementStrategy: 'best-available',\n zRange: null,\n maxRequests: 6,\n zoomOffset: 0,\n\n // onTileLoad: (tile: Tile2DHeader) => void, // onTileUnload: (tile: Tile2DHeader) => void, // onTileError: (error: any, tile: Tile2DHeader) => void, /** Called when all tiles in the current viewport are loaded. */\n // onViewportLoad: ((tiles: Tile2DHeader<DataT>[]) => void) | null,\n onTileLoad: () => {},\n onTileUnload: () => {},\n onTileError: () => {}\n};\n\n/**\n * Manages loading and purging of tile data. This class caches recently visited tiles\n * and only creates new tiles if they are present.\n */\nexport class Tileset2D {\n private opts: Required<Tileset2DProps>;\n private _requestScheduler: RequestScheduler;\n private _cache: Map<string, Tile2DHeader>;\n private _dirty: boolean;\n private _tiles: Tile2DHeader[];\n\n private _cacheByteSize: number;\n private _viewport: Viewport | null;\n private _zRange?: ZRange | null;\n private _selectedTiles: Tile2DHeader[] | null;\n private _frameNumber: number;\n private _modelMatrix: Matrix4;\n private _modelMatrixInverse: Matrix4;\n\n private _maxZoom?: number;\n private _minZoom?: number;\n\n private onTileLoad: (tile: Tile2DHeader) => void;\n\n /**\n * Takes in a function that returns tile data, a cache size, and a max and a min zoom level.\n * Cache size defaults to 5 * number of tiles in the current viewport\n */\n constructor(opts: Tileset2DProps) {\n this.opts = {...DEFAULT_TILESET2D_PROPS, ...opts};\n\n this.onTileLoad = tile => {\n this.opts.onTileLoad?.(tile);\n if (this.opts.maxCacheByteSize) {\n this._cacheByteSize += tile.byteLength;\n this._resizeCache();\n }\n };\n\n this._requestScheduler = new RequestScheduler({\n maxRequests: opts.maxRequests,\n throttleRequests: Boolean(opts.maxRequests && opts.maxRequests > 0)\n });\n\n // Maps tile id in string {z}-{x}-{y} to a Tile object\n this._cache = new Map();\n this._tiles = [];\n this._dirty = false;\n this._cacheByteSize = 0;\n\n // Cache the last processed viewport\n this._viewport = null;\n this._selectedTiles = null;\n this._frameNumber = 0;\n\n this._modelMatrix = new Matrix4();\n this._modelMatrixInverse = new Matrix4();\n\n this.setOptions(opts);\n }\n\n /* Public API */\n get tiles() {\n return this._tiles;\n }\n\n get selectedTiles(): Tile2DHeader[] | null {\n return this._selectedTiles;\n }\n\n get isLoaded(): boolean {\n return this._selectedTiles !== null && this._selectedTiles.every(tile => tile.isLoaded);\n }\n\n get needsReload(): boolean {\n return this._selectedTiles !== null && this._selectedTiles.some(tile => tile.needsReload);\n }\n\n setOptions(opts: Tileset2DProps): void {\n Object.assign(this.opts, opts);\n if (Number.isFinite(opts.maxZoom)) {\n this._maxZoom = Math.floor(opts.maxZoom as number);\n }\n if (Number.isFinite(opts.minZoom)) {\n this._minZoom = Math.ceil(opts.minZoom as number);\n }\n }\n\n // Clean up any outstanding tile requests.\n finalize(): void {\n for (const tile of this._cache.values()) {\n if (tile.isLoading) {\n tile.abort();\n }\n }\n this._cache.clear();\n this._tiles = [];\n this._selectedTiles = null;\n }\n\n reloadAll(): void {\n for (const id of this._cache.keys()) {\n const tile = this._cache.get(id) as Tile2DHeader;\n if (!this._selectedTiles || !this._selectedTiles.includes(tile)) {\n this._cache.delete(id);\n } else {\n tile.setNeedsReload();\n }\n }\n }\n\n /**\n * Update the cache with the given viewport and model matrix and triggers callback onUpdate.\n */\n update(\n viewport: Viewport,\n {zRange, modelMatrix}: {zRange?: ZRange | null; modelMatrix?: NumericArray | null} = {}\n ): number {\n const modelMatrixAsMatrix4 = modelMatrix ? new Matrix4(modelMatrix) : new Matrix4();\n const isModelMatrixNew = !modelMatrixAsMatrix4.equals(this._modelMatrix);\n if (\n !this._viewport ||\n !viewport.equals(this._viewport) ||\n !equals(this._zRange, zRange) ||\n isModelMatrixNew\n ) {\n if (isModelMatrixNew) {\n this._modelMatrixInverse = modelMatrixAsMatrix4.clone().invert();\n this._modelMatrix = modelMatrixAsMatrix4;\n }\n this._viewport = viewport;\n this._zRange = zRange;\n const tileIndices = this.getTileIndices({\n viewport,\n maxZoom: this._maxZoom,\n minZoom: this._minZoom,\n zRange,\n modelMatrix: this._modelMatrix,\n modelMatrixInverse: this._modelMatrixInverse\n });\n this._selectedTiles = tileIndices.map(index => this._getTile(index, true));\n\n if (this._dirty) {\n // Some new tiles are added\n this._rebuildTree();\n }\n // Check for needed reloads explicitly even if the view/matrix has not changed.\n } else if (this.needsReload) {\n this._selectedTiles = this._selectedTiles!.map(tile => this._getTile(tile.index, true));\n }\n\n // Update tile states\n const changed = this.updateTileStates();\n this._pruneRequests();\n\n if (this._dirty) {\n // cache size is either the user defined maxSize or 5 * number of current tiles in the viewport.\n this._resizeCache();\n }\n\n if (changed) {\n this._frameNumber++;\n }\n\n return this._frameNumber;\n }\n\n // eslint-disable-next-line complexity\n isTileVisible(\n tile: Tile2DHeader,\n cullRect?: {x: number; y: number; width: number; height: number}\n ): boolean {\n if (!tile.isVisible) {\n return false;\n }\n\n if (cullRect && this._viewport) {\n const boundsArr = this._getCullBounds({\n viewport: this._viewport,\n z: this._zRange,\n cullRect\n });\n const {bbox} = tile;\n for (const [minX, minY, maxX, maxY] of boundsArr) {\n let overlaps;\n if ('west' in bbox) {\n overlaps = bbox.west < maxX && bbox.east > minX && bbox.south < maxY && bbox.north > minY;\n } else {\n // top/bottom could be swapped depending on the indexing system\n const y0 = Math.min(bbox.top, bbox.bottom);\n const y1 = Math.max(bbox.top, bbox.bottom);\n overlaps = bbox.left < maxX && bbox.right > minX && y0 < maxY && y1 > minY;\n }\n if (overlaps) {\n return true;\n }\n }\n return false;\n }\n return true;\n }\n\n /* Public interface for subclassing */\n\n /** Returns array of tile indices in the current viewport */\n getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n modelMatrix,\n modelMatrixInverse\n }: {\n viewport: Viewport;\n maxZoom?: number;\n minZoom?: number;\n zRange?: ZRange | null;\n tileSize?: number;\n modelMatrix?: Matrix4;\n modelMatrixInverse?: Matrix4;\n zoomOffset?: number;\n }): TileIndex[] {\n const {tileSize, extent, zoomOffset} = this.opts;\n return getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n tileSize,\n extent: extent as Bounds | undefined,\n modelMatrix,\n modelMatrixInverse,\n zoomOffset\n });\n }\n\n /** Returns unique string key for a tile index */\n getTileId(index: TileIndex) {\n return `${index.x}-${index.y}-${index.z}`;\n }\n\n /** Returns a zoom level for a tile index */\n getTileZoom(index: TileIndex) {\n return index.z;\n }\n\n /** Returns additional metadata to add to tile, bbox by default */\n getTileMetadata(index: TileIndex): Record<string, any> {\n const {tileSize} = this.opts;\n 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"}
@@ -94,11 +94,11 @@ function getBoundingBox(viewport, zRange, extent) {
94
94
 
95
95
  export function getCullBounds({
96
96
  viewport,
97
- z = 0,
97
+ z,
98
98
  cullRect
99
99
  }) {
100
100
  const subViewports = viewport.subViewports || [viewport];
101
- return subViewports.map(v => getCullBoundsInViewport(v, z, cullRect));
101
+ return subViewports.map(v => getCullBoundsInViewport(v, z || 0, cullRect));
102
102
  }
103
103
 
104
104
  function getCullBoundsInViewport(viewport, z, cullRect) {
@@ -1 +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
+ {"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,\n cullRect\n}: {\n /** Current viewport */\n viewport: Viewport;\n /** Current z range */\n z?: ZRange | number | null;\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 || 0, 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 | null;\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","layerName"],"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,kBAAa;AACnB;AACA;AACA;AACA;AACA,CANqB;AAQf,sBAAiB;AACvB;AACA,CAVqB;AAWf,kBAAa;AACnB;AACA;AACA;AACA;AACA,CAhBqB;AAkBf,wBAAmB;AACzB;AACA;AACA;AACA,CAtBqB;AAwBf,gCAA2B;AACjC;AACA;AACA;AACA;AA5BqB,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;AAHmBf,U,CAIZkB,S,GAAY,Y;AAJAlB,U,CAKZV,Y,GAAeA,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"}
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","layerName"],"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,EAAGI,CAAD,IAAYA,CAAC,CAACC;AAAxC;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,kBAAa;AACnB;AACA;AACA;AACA;AACA,CANqB;AAQf,sBAAiB;AACvB;AACA,CAVqB;AAWf,kBAAa;AACnB;AACA;AACA;AACA;AACA,CAhBqB;AAkBf,wBAAmB;AACzB;AACA;AACA;AACA,CAtBqB;AAwBf,gCAA2B;AACjC;AACA;AACA;AACA;AA5BqB,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;AAHmBf,U,CAIZkB,S,GAAY,Y;AAJAlB,U,CAKZV,Y,GAAeA,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: any) => d.timestamps}\n};\n\n/** All properties supported by TripsLayer. */\nexport type TripsLayerProps<DataT = unknown> = _TripsLayerProps<DataT> & PathLayerProps<DataT>;\n\n/** Properties added by TripsLayer. */\ntype _TripsLayerProps<DataT = unknown> = {\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"}
@@ -179,15 +179,15 @@ export class WMSLayer extends CompositeLayer {
179
179
  const requestParams = {
180
180
  width,
181
181
  height,
182
- bbox: bounds,
182
+ boundingBox: [[bounds[0], bounds[1]], [bounds[2], bounds[3]]],
183
183
  layers,
184
- srs
184
+ crs: srs
185
185
  };
186
186
 
187
187
  if (srs === 'EPSG:3857') {
188
- const [minX, minY] = WGS84ToPseudoMercator([bounds[0], bounds[1]]);
189
- const [maxX, maxY] = WGS84ToPseudoMercator([bounds[2], bounds[3]]);
190
- requestParams.bbox = [minX, minY, maxX, maxY];
188
+ const min = WGS84ToPseudoMercator([bounds[0], bounds[1]]);
189
+ const max = WGS84ToPseudoMercator([bounds[2], bounds[3]]);
190
+ requestParams.boundingBox = [min, max];
191
191
  }
192
192
 
193
193
  try {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/wms-layer/wms-layer.ts"],"names":["CompositeLayer","COORDINATE_SYSTEM","_deepEqual","deepEqual","BitmapLayer","ImageSource","createImageSource","WGS84ToPseudoMercator","defaultProps","id","data","serviceType","srs","layers","type","compare","value","onMetadataLoad","onMetadataLoadError","console","error","onImageLoadStart","onImageLoad","onImageLoadError","requestId","WMSLayer","state","isLoaded","Boolean","loadCounter","shouldUpdateState","initializeState","_nextRequestId","lastRequestId","updateState","changeFlags","props","oldProps","viewport","context","dataChanged","imageSource","_createImageSource","_loadMetadata","debounce","loadImage","viewportChanged","finalizeState","renderLayers","bounds","image","lastRequestParameters","getSubLayerProps","_imageCoordinateSystem","LNGLAT","CARTESIAN","getFeatureInfoText","x","y","featureInfo","query_layers","info_format","url","loadOptions","Error","metadata","getMetadata","getCurrentLayer","reason","length","getBounds","width","height","getRequestId","resolution","requestParams","bbox","minX","minY","maxX","maxY","getImage","setState","raiseError","fn","ms","clearTimeout","_timeoutId","setTimeout","layerName"],"mappings":"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","sourcesContent":["// deck.gl, MIT license\n// Attributions:\n// Copyright 2022 Foursquare Labs, Inc.\n\n/* eslint-disable camelcase */ // Some WMS parameters are not in camel case\n/* global setTimeout, clearTimeout */\n\nimport {\n Layer,\n CompositeLayer,\n CompositeLayerProps,\n UpdateParameters,\n DefaultProps,\n Viewport,\n COORDINATE_SYSTEM,\n _deepEqual as deepEqual\n} from '@deck.gl/core';\nimport {BitmapLayer} from '@deck.gl/layers';\nimport type {ImageSourceMetadata, ImageType, ImageServiceType} from '@loaders.gl/wms';\nimport {ImageSource, createImageSource} from '@loaders.gl/wms';\nimport {WGS84ToPseudoMercator} from './utils';\n\n/** All props supported by the TileLayer */\nexport type WMSLayerProps = CompositeLayerProps & _WMSLayerProps;\n\n/** Props added by the TileLayer */\ntype _WMSLayerProps = {\n data: string | ImageSource;\n serviceType?: ImageServiceType | 'auto';\n layers?: string[];\n srs?: 'EPSG:4326' | 'EPSG:3857' | 'auto';\n onMetadataLoad?: (metadata: ImageSourceMetadata) => void;\n onMetadataLoadError?: (error: Error) => void;\n onImageLoadStart?: (requestId: unknown) => void;\n onImageLoad?: (requestId: unknown) => void;\n onImageLoadError?: (requestId: unknown, error: Error) => void;\n};\n\nconst defaultProps: DefaultProps<WMSLayerProps> = {\n id: 'imagery-layer',\n data: '',\n serviceType: 'auto',\n srs: 'auto',\n layers: {type: 'array', compare: true, value: []},\n onMetadataLoad: {type: 'function', value: () => {}},\n // eslint-disable-next-line\n onMetadataLoadError: {type: 'function', value: console.error},\n onImageLoadStart: {type: 'function', value: () => {}},\n onImageLoad: {type: 'function', value: () => {}},\n onImageLoadError: {\n type: 'function',\n compare: false,\n // eslint-disable-next-line\n value: (requestId: unknown, error: Error) => console.error(error, requestId)\n }\n};\n\n/**\n * The layer is used in Hex Tile layer in order to properly discard invisible elements during animation\n */\nexport class WMSLayer<ExtraPropsT extends {} = {}> extends CompositeLayer<\n ExtraPropsT & Required<_WMSLayerProps>\n> {\n static layerName = 'WMSLayer';\n static defaultProps: DefaultProps = defaultProps;\n\n state!: {\n imageSource: ImageSource;\n image: ImageType;\n bounds: [number, number, number, number];\n lastRequestParameters: {\n bbox: [number, number, number, number];\n layers: string[];\n srs: 'EPSG:4326' | 'EPSG:3857';\n width: number;\n height: number;\n };\n lastRequestId: number;\n _nextRequestId: number;\n /** TODO: Change any => setTimeout return type. Different between Node and browser... */\n _timeoutId: any;\n loadCounter: number;\n };\n\n /** Returns true if all async resources are loaded */\n get isLoaded(): boolean {\n // Track the explicit loading done by this layer\n return Boolean(this.state) && this.state.loadCounter === 0 && super.isLoaded;\n }\n\n /** Lets deck.gl know that we want viewport change events */\n override shouldUpdateState(): boolean {\n return true;\n }\n\n override initializeState(): void {\n // intentionally empty, initialization is done in updateState\n this.state._nextRequestId = 0;\n this.state.lastRequestId = -1;\n this.state.loadCounter = 0;\n }\n\n override updateState({changeFlags, props, oldProps}: UpdateParameters<this>): void {\n const {viewport} = this.context;\n\n // Check if data source has changed\n if (changeFlags.dataChanged || props.serviceType !== oldProps.serviceType) {\n this.state.imageSource = this._createImageSource(props);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._loadMetadata();\n this.debounce(() => this.loadImage(viewport, 'image source changed'), 0);\n } else if (!deepEqual(props.layers, oldProps.layers, 1)) {\n this.debounce(() => this.loadImage(viewport, 'layers changed'), 0);\n } else if (changeFlags.viewportChanged) {\n this.debounce(() => this.loadImage(viewport, 'viewport changed'));\n }\n }\n\n override finalizeState(): void {\n // TODO - we could cancel outstanding requests\n }\n\n override renderLayers(): Layer {\n // TODO - which bitmap layer is rendered should depend on the current viewport\n // Currently Studio only uses one viewport\n const {bounds, image, lastRequestParameters} = this.state;\n\n return (\n image &&\n new BitmapLayer({\n ...this.getSubLayerProps({id: 'bitmap'}),\n _imageCoordinateSystem:\n lastRequestParameters.srs === 'EPSG:4326'\n ? COORDINATE_SYSTEM.LNGLAT\n : COORDINATE_SYSTEM.CARTESIAN,\n bounds,\n image\n })\n );\n }\n\n async getFeatureInfoText(x: number, y: number): Promise<string | null> {\n const {lastRequestParameters} = this.state;\n if (lastRequestParameters) {\n // @ts-expect-error Undocumented method\n const featureInfo = await this.state.imageSource.getFeatureInfoText?.({\n ...lastRequestParameters,\n query_layers: lastRequestParameters.layers,\n x,\n y,\n info_format: 'application/vnd.ogc.gml'\n });\n return featureInfo;\n }\n return '';\n }\n\n _createImageSource(props: WMSLayerProps): ImageSource {\n if (props.data instanceof ImageSource) {\n return props.data;\n }\n\n if (typeof props.data === 'string') {\n return createImageSource({\n url: props.data,\n loadOptions: props.loadOptions,\n type: props.serviceType\n });\n }\n\n throw new Error('invalid image source in props.data');\n }\n\n /** Run a getMetadata on the image service */\n async _loadMetadata(): Promise<void> {\n const {imageSource} = this.state;\n try {\n this.state.loadCounter++;\n const metadata = await imageSource.getMetadata();\n\n // If a request takes a long time, it may no longer be expected\n if (this.state.imageSource === imageSource) {\n this.getCurrentLayer()?.props.onMetadataLoad(metadata);\n }\n } catch (error) {\n this.getCurrentLayer()?.props.onMetadataLoadError(error as Error);\n } finally {\n this.state.loadCounter--;\n }\n }\n\n /** Load an image */\n async loadImage(viewport: Viewport, reason: string): Promise<void> {\n const {layers, serviceType} = this.props;\n\n // TODO - move to ImageSource?\n if (serviceType === 'wms' && layers.length === 0) {\n return;\n }\n\n const bounds = viewport.getBounds();\n const {width, height} = viewport;\n const requestId = this.getRequestId();\n let {srs} = this.props;\n if (srs === 'auto') {\n // BitmapLayer only supports LNGLAT or CARTESIAN (Web-Mercator)\n srs = viewport.resolution ? 'EPSG:4326' : 'EPSG:3857';\n }\n const requestParams = {\n width,\n height,\n bbox: bounds,\n layers,\n srs\n };\n if (srs === 'EPSG:3857') {\n const [minX, minY] = WGS84ToPseudoMercator([bounds[0], bounds[1]]);\n const [maxX, maxY] = WGS84ToPseudoMercator([bounds[2], bounds[3]]);\n requestParams.bbox = [minX, minY, maxX, maxY];\n }\n\n try {\n this.state.loadCounter++;\n this.props.onImageLoadStart(requestId);\n\n const image = await this.state.imageSource.getImage(requestParams);\n\n // If a request takes a long time, later requests may have already loaded.\n if (this.state.lastRequestId < requestId) {\n this.getCurrentLayer()?.props.onImageLoad(requestId);\n // Not type safe...\n this.setState({\n image,\n bounds,\n lastRequestParameters: requestParams,\n lastRequestId: requestId\n });\n }\n } catch (error) {\n this.raiseError(error as Error, 'Load image');\n this.getCurrentLayer()?.props.onImageLoadError(requestId, error as Error);\n } finally {\n this.state.loadCounter--;\n }\n }\n\n // HELPERS\n\n /** Global counter for issuing unique request ids */\n private getRequestId(): number {\n return this.state._nextRequestId++;\n }\n\n /** Runs an action in the future, cancels it if the new action is issued before it executes */\n private debounce(fn: Function, ms = 500): void {\n clearTimeout(this.state._timeoutId);\n this.state._timeoutId = setTimeout(() => fn(), ms);\n }\n}\n"],"file":"wms-layer.js"}
1
+ {"version":3,"sources":["../../../src/wms-layer/wms-layer.ts"],"names":["CompositeLayer","COORDINATE_SYSTEM","_deepEqual","deepEqual","BitmapLayer","ImageSource","createImageSource","WGS84ToPseudoMercator","defaultProps","id","data","serviceType","srs","layers","type","compare","value","onMetadataLoad","onMetadataLoadError","console","error","onImageLoadStart","onImageLoad","onImageLoadError","requestId","WMSLayer","state","isLoaded","Boolean","loadCounter","shouldUpdateState","initializeState","_nextRequestId","lastRequestId","updateState","changeFlags","props","oldProps","viewport","context","dataChanged","imageSource","_createImageSource","_loadMetadata","debounce","loadImage","viewportChanged","finalizeState","renderLayers","bounds","image","lastRequestParameters","getSubLayerProps","_imageCoordinateSystem","LNGLAT","CARTESIAN","getFeatureInfoText","x","y","featureInfo","query_layers","info_format","url","loadOptions","Error","metadata","getMetadata","getCurrentLayer","reason","length","getBounds","width","height","getRequestId","resolution","requestParams","boundingBox","crs","min","max","getImage","setState","raiseError","fn","ms","clearTimeout","_timeoutId","setTimeout","layerName"],"mappings":"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","sourcesContent":["// deck.gl, MIT license\n// Attributions:\n// Copyright 2022 Foursquare Labs, Inc.\n\n/* eslint-disable camelcase */ // Some WMS parameters are not in camel case\n/* global setTimeout, clearTimeout */\n\nimport {\n Layer,\n CompositeLayer,\n CompositeLayerProps,\n UpdateParameters,\n DefaultProps,\n Viewport,\n COORDINATE_SYSTEM,\n _deepEqual as deepEqual\n} from '@deck.gl/core';\nimport {BitmapLayer} from '@deck.gl/layers';\nimport type {GetImageParameters, ImageSourceMetadata, ImageType} from '@loaders.gl/loader-utils';\nimport type {ImageServiceType} from '@loaders.gl/wms';\nimport {ImageSource, createImageSource} from '@loaders.gl/wms';\nimport {WGS84ToPseudoMercator} from './utils';\n\n/** All props supported by the TileLayer */\nexport type WMSLayerProps = CompositeLayerProps & _WMSLayerProps;\n\n/** Props added by the TileLayer */\ntype _WMSLayerProps = {\n data: string | ImageSource;\n serviceType?: ImageServiceType | 'auto';\n layers?: string[];\n srs?: 'EPSG:4326' | 'EPSG:3857' | 'auto';\n onMetadataLoad?: (metadata: ImageSourceMetadata) => void;\n onMetadataLoadError?: (error: Error) => void;\n onImageLoadStart?: (requestId: unknown) => void;\n onImageLoad?: (requestId: unknown) => void;\n onImageLoadError?: (requestId: unknown, error: Error) => void;\n};\n\nconst defaultProps: DefaultProps<WMSLayerProps> = {\n id: 'imagery-layer',\n data: '',\n serviceType: 'auto',\n srs: 'auto',\n layers: {type: 'array', compare: true, value: []},\n onMetadataLoad: {type: 'function', value: () => {}},\n // eslint-disable-next-line\n onMetadataLoadError: {type: 'function', value: console.error},\n onImageLoadStart: {type: 'function', value: () => {}},\n onImageLoad: {type: 'function', value: () => {}},\n onImageLoadError: {\n type: 'function',\n compare: false,\n // eslint-disable-next-line\n value: (requestId: unknown, error: Error) => console.error(error, requestId)\n }\n};\n\n/**\n * The layer is used in Hex Tile layer in order to properly discard invisible elements during animation\n */\nexport class WMSLayer<ExtraPropsT extends {} = {}> extends CompositeLayer<\n ExtraPropsT & Required<_WMSLayerProps>\n> {\n static layerName = 'WMSLayer';\n static defaultProps: DefaultProps = defaultProps;\n\n state!: {\n imageSource: ImageSource;\n image: ImageType;\n bounds: [number, number, number, number];\n lastRequestParameters: {\n bbox: [number, number, number, number];\n layers: string[];\n srs: 'EPSG:4326' | 'EPSG:3857';\n width: number;\n height: number;\n };\n lastRequestId: number;\n _nextRequestId: number;\n /** TODO: Change any => setTimeout return type. Different between Node and browser... */\n _timeoutId: any;\n loadCounter: number;\n };\n\n /** Returns true if all async resources are loaded */\n get isLoaded(): boolean {\n // Track the explicit loading done by this layer\n return Boolean(this.state) && this.state.loadCounter === 0 && super.isLoaded;\n }\n\n /** Lets deck.gl know that we want viewport change events */\n override shouldUpdateState(): boolean {\n return true;\n }\n\n override initializeState(): void {\n // intentionally empty, initialization is done in updateState\n this.state._nextRequestId = 0;\n this.state.lastRequestId = -1;\n this.state.loadCounter = 0;\n }\n\n override updateState({changeFlags, props, oldProps}: UpdateParameters<this>): void {\n const {viewport} = this.context;\n\n // Check if data source has changed\n if (changeFlags.dataChanged || props.serviceType !== oldProps.serviceType) {\n this.state.imageSource = this._createImageSource(props);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._loadMetadata();\n this.debounce(() => this.loadImage(viewport, 'image source changed'), 0);\n } else if (!deepEqual(props.layers, oldProps.layers, 1)) {\n this.debounce(() => this.loadImage(viewport, 'layers changed'), 0);\n } else if (changeFlags.viewportChanged) {\n this.debounce(() => this.loadImage(viewport, 'viewport changed'));\n }\n }\n\n override finalizeState(): void {\n // TODO - we could cancel outstanding requests\n }\n\n override renderLayers(): Layer {\n // TODO - which bitmap layer is rendered should depend on the current viewport\n // Currently Studio only uses one viewport\n const {bounds, image, lastRequestParameters} = this.state;\n\n return (\n image &&\n new BitmapLayer({\n ...this.getSubLayerProps({id: 'bitmap'}),\n _imageCoordinateSystem:\n lastRequestParameters.srs === 'EPSG:4326'\n ? COORDINATE_SYSTEM.LNGLAT\n : COORDINATE_SYSTEM.CARTESIAN,\n bounds,\n image\n })\n );\n }\n\n async getFeatureInfoText(x: number, y: number): Promise<string | null> {\n const {lastRequestParameters} = this.state;\n if (lastRequestParameters) {\n // @ts-expect-error Undocumented method\n const featureInfo = await this.state.imageSource.getFeatureInfoText?.({\n ...lastRequestParameters,\n query_layers: lastRequestParameters.layers,\n x,\n y,\n info_format: 'application/vnd.ogc.gml'\n });\n return featureInfo;\n }\n return '';\n }\n\n _createImageSource(props: WMSLayerProps): ImageSource {\n if (props.data instanceof ImageSource) {\n return props.data;\n }\n\n if (typeof props.data === 'string') {\n return createImageSource({\n url: props.data,\n loadOptions: props.loadOptions,\n type: props.serviceType\n });\n }\n\n throw new Error('invalid image source in props.data');\n }\n\n /** Run a getMetadata on the image service */\n async _loadMetadata(): Promise<void> {\n const {imageSource} = this.state;\n try {\n this.state.loadCounter++;\n const metadata = await imageSource.getMetadata();\n\n // If a request takes a long time, it may no longer be expected\n if (this.state.imageSource === imageSource) {\n this.getCurrentLayer()?.props.onMetadataLoad(metadata);\n }\n } catch (error) {\n this.getCurrentLayer()?.props.onMetadataLoadError(error as Error);\n } finally {\n this.state.loadCounter--;\n }\n }\n\n /** Load an image */\n async loadImage(viewport: Viewport, reason: string): Promise<void> {\n const {layers, serviceType} = this.props;\n\n // TODO - move to ImageSource?\n if (serviceType === 'wms' && layers.length === 0) {\n return;\n }\n\n const bounds = viewport.getBounds();\n const {width, height} = viewport;\n const requestId = this.getRequestId();\n let {srs} = this.props;\n if (srs === 'auto') {\n // BitmapLayer only supports LNGLAT or CARTESIAN (Web-Mercator)\n srs = viewport.resolution ? 'EPSG:4326' : 'EPSG:3857';\n }\n const requestParams: GetImageParameters = {\n width,\n height,\n boundingBox: [\n [bounds[0], bounds[1]],\n [bounds[2], bounds[3]]\n ],\n layers,\n crs: srs\n };\n if (srs === 'EPSG:3857') {\n const min = WGS84ToPseudoMercator([bounds[0], bounds[1]]);\n const max = WGS84ToPseudoMercator([bounds[2], bounds[3]]);\n requestParams.boundingBox = [min, max];\n }\n\n try {\n this.state.loadCounter++;\n this.props.onImageLoadStart(requestId);\n\n const image = await this.state.imageSource.getImage(requestParams);\n\n // If a request takes a long time, later requests may have already loaded.\n if (this.state.lastRequestId < requestId) {\n this.getCurrentLayer()?.props.onImageLoad(requestId);\n // Not type safe...\n this.setState({\n image,\n bounds,\n lastRequestParameters: requestParams,\n lastRequestId: requestId\n });\n }\n } catch (error) {\n this.raiseError(error as Error, 'Load image');\n this.getCurrentLayer()?.props.onImageLoadError(requestId, error as Error);\n } finally {\n this.state.loadCounter--;\n }\n }\n\n // HELPERS\n\n /** Global counter for issuing unique request ids */\n private getRequestId(): number {\n return this.state._nextRequestId++;\n }\n\n /** Runs an action in the future, cancels it if the new action is issued before it executes */\n private debounce(fn: Function, ms = 500): void {\n clearTimeout(this.state._timeoutId);\n this.state._timeoutId = setTimeout(() => fn(), ms);\n }\n}\n"],"file":"wms-layer.js"}