@deck.gl/geo-layers 8.10.0-alpha.7 → 9.0.0-alpha.4

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 (115) hide show
  1. package/dist/dist.dev.js +2374 -19037
  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/mvt-layer.js +15 -6
  12. package/dist/es5/mvt-layer/mvt-layer.js.map +1 -1
  13. package/dist/es5/quadkey-layer/quadkey-layer.js.map +1 -1
  14. package/dist/es5/s2-layer/s2-layer.js.map +1 -1
  15. package/dist/es5/terrain-layer/terrain-layer.js.map +1 -1
  16. package/{src/tile-3d-layer/tile-3d-layer.ts → dist/es5/tile-3d-layer/tile-3d-layer.ts.disabled} +10 -11
  17. package/dist/es5/tile-layer/tile-layer.js +19 -9
  18. package/dist/es5/tile-layer/tile-layer.js.map +1 -1
  19. package/dist/es5/tileset-2d/tile-2d-traversal.js.map +1 -1
  20. package/dist/es5/tileset-2d/tileset-2d.js +1 -1
  21. package/dist/es5/tileset-2d/tileset-2d.js.map +1 -1
  22. package/dist/es5/tileset-2d/utils.js +2 -3
  23. package/dist/es5/tileset-2d/utils.js.map +1 -1
  24. package/dist/es5/trips-layer/trips-layer.js.map +1 -1
  25. package/dist/es5/wms-layer/wms-layer.js +6 -8
  26. package/dist/es5/wms-layer/wms-layer.js.map +1 -1
  27. package/dist/esm/geo-cell-layer/GeoCellLayer.js.map +1 -1
  28. package/dist/esm/geohash-layer/geohash-layer.js.map +1 -1
  29. package/dist/esm/great-circle-layer/great-circle-layer.js.map +1 -1
  30. package/dist/esm/h3-layers/h3-cluster-layer.js +5 -0
  31. package/dist/esm/h3-layers/h3-cluster-layer.js.map +1 -1
  32. package/dist/esm/h3-layers/h3-hexagon-layer.js.map +1 -1
  33. package/dist/esm/index.js +0 -1
  34. package/dist/esm/index.js.map +1 -1
  35. package/dist/esm/mesh-layer/mesh-layer.ts.disabled +176 -0
  36. package/dist/esm/mvt-layer/mvt-layer.js +6 -1
  37. package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
  38. package/dist/esm/quadkey-layer/quadkey-layer.js.map +1 -1
  39. package/dist/esm/s2-layer/s2-layer.js.map +1 -1
  40. package/dist/esm/terrain-layer/terrain-layer.js.map +1 -1
  41. package/dist/esm/tile-3d-layer/tile-3d-layer.ts.disabled +435 -0
  42. package/dist/esm/tile-layer/tile-layer.js +10 -6
  43. package/dist/esm/tile-layer/tile-layer.js.map +1 -1
  44. package/dist/esm/tileset-2d/tile-2d-traversal.js.map +1 -1
  45. package/dist/esm/tileset-2d/tileset-2d.js +1 -1
  46. package/dist/esm/tileset-2d/tileset-2d.js.map +1 -1
  47. package/dist/esm/tileset-2d/utils.js +2 -2
  48. package/dist/esm/tileset-2d/utils.js.map +1 -1
  49. package/dist/esm/trips-layer/trips-layer.js.map +1 -1
  50. package/dist/esm/wms-layer/wms-layer.js +5 -5
  51. package/dist/esm/wms-layer/wms-layer.js.map +1 -1
  52. package/dist.min.js +29 -161
  53. package/package.json +14 -14
  54. package/src/geo-cell-layer/GeoCellLayer.ts +1 -1
  55. package/src/geohash-layer/geohash-layer.ts +2 -2
  56. package/src/great-circle-layer/great-circle-layer.ts +1 -1
  57. package/src/h3-layers/h3-cluster-layer.ts +6 -2
  58. package/src/h3-layers/h3-hexagon-layer.ts +2 -2
  59. package/src/index.ts +4 -2
  60. package/src/mesh-layer/mesh-layer.ts.disabled +176 -0
  61. package/src/mvt-layer/mvt-layer.ts +16 -6
  62. package/src/quadkey-layer/quadkey-layer.ts +3 -2
  63. package/src/s2-layer/s2-layer.ts +2 -2
  64. package/src/terrain-layer/terrain-layer.ts +2 -2
  65. package/src/tile-3d-layer/tile-3d-layer.ts.disabled +435 -0
  66. package/src/tile-layer/tile-layer.ts +20 -10
  67. package/src/tileset-2d/tile-2d-traversal.ts +1 -1
  68. package/src/tileset-2d/tileset-2d.ts +6 -7
  69. package/src/tileset-2d/utils.ts +4 -4
  70. package/src/trips-layer/trips-layer.ts +3 -3
  71. package/src/wms-layer/wms-layer.ts +10 -8
  72. package/typed/geo-cell-layer/GeoCellLayer.d.ts +1 -1
  73. package/typed/geo-cell-layer/GeoCellLayer.d.ts.map +1 -1
  74. package/typed/geohash-layer/geohash-layer.d.ts +2 -2
  75. package/typed/geohash-layer/geohash-layer.d.ts.map +1 -1
  76. package/typed/great-circle-layer/great-circle-layer.d.ts +2 -2
  77. package/typed/great-circle-layer/great-circle-layer.d.ts.map +1 -1
  78. package/typed/h3-layers/h3-cluster-layer.d.ts +7 -2
  79. package/typed/h3-layers/h3-cluster-layer.d.ts.map +1 -1
  80. package/typed/h3-layers/h3-hexagon-layer.d.ts +2 -2
  81. package/typed/h3-layers/h3-hexagon-layer.d.ts.map +1 -1
  82. package/typed/index.d.ts +0 -2
  83. package/typed/index.d.ts.map +1 -1
  84. package/typed/mvt-layer/mvt-layer.d.ts +9 -1
  85. package/typed/mvt-layer/mvt-layer.d.ts.map +1 -1
  86. package/typed/quadkey-layer/quadkey-layer.d.ts +2 -2
  87. package/typed/quadkey-layer/quadkey-layer.d.ts.map +1 -1
  88. package/typed/s2-layer/s2-layer.d.ts +2 -2
  89. package/typed/s2-layer/s2-layer.d.ts.map +1 -1
  90. package/typed/terrain-layer/terrain-layer.d.ts +2 -2
  91. package/typed/terrain-layer/terrain-layer.d.ts.map +1 -1
  92. package/typed/tile-layer/tile-layer.d.ts +7 -2
  93. package/typed/tile-layer/tile-layer.d.ts.map +1 -1
  94. package/typed/tileset-2d/tile-2d-traversal.d.ts +1 -1
  95. package/typed/tileset-2d/tile-2d-traversal.d.ts.map +1 -1
  96. package/typed/tileset-2d/tileset-2d.d.ts +4 -4
  97. package/typed/tileset-2d/tileset-2d.d.ts.map +1 -1
  98. package/typed/tileset-2d/utils.d.ts +2 -2
  99. package/typed/tileset-2d/utils.d.ts.map +1 -1
  100. package/typed/trips-layer/trips-layer.d.ts +3 -3
  101. package/typed/trips-layer/trips-layer.d.ts.map +1 -1
  102. package/typed/wms-layer/wms-layer.d.ts.map +1 -1
  103. package/LICENSE +0 -19
  104. package/dist/es5/mesh-layer/mesh-layer.js +0 -212
  105. package/dist/es5/mesh-layer/mesh-layer.js.map +0 -1
  106. package/dist/es5/tile-3d-layer/tile-3d-layer.js +0 -512
  107. package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +0 -1
  108. package/dist/esm/mesh-layer/mesh-layer.js +0 -177
  109. package/dist/esm/mesh-layer/mesh-layer.js.map +0 -1
  110. package/dist/esm/tile-3d-layer/tile-3d-layer.js +0 -443
  111. package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +0 -1
  112. package/typed/mesh-layer/mesh-layer.d.ts +0 -38
  113. package/typed/mesh-layer/mesh-layer.d.ts.map +0 -1
  114. package/typed/tile-3d-layer/tile-3d-layer.d.ts +0 -62
  115. package/typed/tile-3d-layer/tile-3d-layer.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/terrain-layer/terrain-layer.ts"],"names":["DUMMY_DATA","defaultProps","TileLayer","elevationData","urlType","texture","optional","meshMaxError","type","value","bounds","compare","color","elevationDecoder","rScaler","gScaler","bScaler","offset","workerUrl","wireframe","material","loaders","TerrainWorkerLoader","urlTemplateToUpdateTrigger","template","Array","isArray","join","TerrainLayer","state","updateState","props","oldProps","elevationDataChanged","isTiled","includes","setState","shouldReload","terrain","loadTerrain","log","removed","signal","loadOptions","getLoadOptions","skirtHeight","fetch","propName","layer","getTiledTerrainData","tile","viewport","context","dataUrl","textureUrl","bottomLeft","topRight","isGeospatial","bbox","projectFlat","west","south","east","north","left","bottom","right","top","surface","catch","_","Promise","resolve","all","renderSubLayers","SubLayerClass","getSubLayerClass","SimpleMeshLayer","data","mesh","_instanced","coordinateSystem","COORDINATE_SYSTEM","CARTESIAN","getPosition","d","getColor","onViewportLoad","tiles","zRange","ranges","map","content","filter","Boolean","arr","header","boundingBox","bound","length","minZ","Math","min","x","maxZ","max","renderLayers","tileSize","maxZoom","minZoom","extent","maxRequests","onTileLoad","onTileUnload","onTileError","maxCacheSize","maxCacheByteSize","refinementStrategy","getSubLayerProps","id","getTileData","bind","updateTriggers","CompositeLayer","layerName"],"mappings":"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","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 {\n Color,\n CompositeLayer,\n CompositeLayerProps,\n DefaultProps,\n Layer,\n LayersList,\n log,\n Material,\n Texture,\n UpdateParameters\n} from '@deck.gl/core';\nimport {SimpleMeshLayer} from '@deck.gl/mesh-layers';\nimport {COORDINATE_SYSTEM} from '@deck.gl/core';\nimport type {MeshAttributes} from '@loaders.gl/schema';\nimport {TerrainWorkerLoader} from '@loaders.gl/terrain';\nimport TileLayer, {TileLayerProps} from '../tile-layer/tile-layer';\nimport type {Bounds, GeoBoundingBox, TileBoundingBox, TileLoadProps, ZRange} from '../tileset-2d';\nimport {Tile2DHeader, urlType, getURLFromTemplate, URLTemplate} from '../tileset-2d';\n\nconst DUMMY_DATA = [1];\n\nconst defaultProps: DefaultProps<TerrainLayerProps> = {\n ...TileLayer.defaultProps,\n // Image url that encodes height data\n elevationData: urlType,\n // Image url to use as texture\n texture: {...urlType, optional: true},\n // Martini error tolerance in meters, smaller number -> more detailed mesh\n meshMaxError: {type: 'number', value: 4.0},\n // Bounding box of the terrain image, [minX, minY, maxX, maxY] in world coordinates\n bounds: {type: 'array', value: null, optional: true, compare: true},\n // Color to use if texture is unavailable\n color: {type: 'color', value: [255, 255, 255]},\n // Object to decode height data, from (r, g, b) to height in meters\n elevationDecoder: {\n type: 'object',\n value: {\n rScaler: 1,\n gScaler: 0,\n bScaler: 0,\n offset: 0\n }\n },\n // Supply url to local terrain worker bundle. Only required if running offline and cannot access CDN.\n workerUrl: '',\n // Same as SimpleMeshLayer wireframe\n wireframe: false,\n material: true,\n\n loaders: [TerrainWorkerLoader]\n};\n\n// Turns array of templates into a single string to work around shallow change\nfunction urlTemplateToUpdateTrigger(template: URLTemplate): string {\n if (Array.isArray(template)) {\n return template.join(';');\n }\n return template || '';\n}\n\ntype ElevationDecoder = {rScaler: number; gScaler: number; bScaler: number; offset: number};\ntype TerrainLoadProps = {\n bounds: Bounds;\n elevationData: string | null;\n elevationDecoder: ElevationDecoder;\n meshMaxError: number;\n signal?: AbortSignal;\n};\n\ntype MeshAndTexture = [MeshAttributes | null, Texture | null];\n\n/** All properties supported by TerrainLayer */\nexport type TerrainLayerProps = _TerrainLayerProps &\n TileLayerProps<MeshAndTexture> &\n CompositeLayerProps;\n\n/** Props added by the TerrainLayer */\ntype _TerrainLayerProps = {\n /** Image url that encodes height data. **/\n elevationData: URLTemplate;\n\n /** Image url to use as texture. **/\n texture?: URLTemplate;\n\n /** Martini error tolerance in meters, smaller number -> more detailed mesh. **/\n meshMaxError?: number;\n\n /** Bounding box of the terrain image, [minX, minY, maxX, maxY] in world coordinates. **/\n bounds?: Bounds | null;\n\n /** Color to use if texture is unavailable. **/\n color?: Color;\n\n /** Object to decode height data, from (r, g, b) to height in meters. **/\n elevationDecoder?: ElevationDecoder;\n\n /** Whether to render the mesh in wireframe mode. **/\n wireframe?: boolean;\n\n /** Material props for lighting effect. **/\n material?: Material;\n\n /**\n * @deprecated Use `loadOptions.terrain.workerUrl` instead\n */\n workerUrl?: string;\n};\n\n/** Render mesh surfaces from height map images. */\nexport default class TerrainLayer<ExtraPropsT extends {} = {}> extends CompositeLayer<\n ExtraPropsT & Required<_TerrainLayerProps & Required<TileLayerProps<MeshAndTexture>>>\n> {\n static defaultProps = defaultProps;\n static layerName = 'TerrainLayer';\n\n state!: {\n isTiled?: boolean;\n terrain: MeshAttributes;\n zRange?: ZRange | null;\n };\n\n updateState({props, oldProps}: UpdateParameters<this>): void {\n const elevationDataChanged = props.elevationData !== oldProps.elevationData;\n if (elevationDataChanged) {\n const {elevationData} = props;\n const isTiled =\n elevationData &&\n (Array.isArray(elevationData) ||\n (elevationData.includes('{x}') && elevationData.includes('{y}')));\n this.setState({isTiled});\n }\n\n // Reloading for single terrain mesh\n const shouldReload =\n elevationDataChanged ||\n props.meshMaxError !== oldProps.meshMaxError ||\n props.elevationDecoder !== oldProps.elevationDecoder ||\n props.bounds !== oldProps.bounds;\n\n if (!this.state.isTiled && shouldReload) {\n // When state.isTiled, elevationData cannot be an array\n const terrain = this.loadTerrain(props as TerrainLoadProps);\n this.setState({terrain});\n }\n\n // TODO - remove in v9\n // @ts-ignore\n if (props.workerUrl) {\n log.removed('workerUrl', 'loadOptions.terrain.workerUrl')();\n }\n }\n\n loadTerrain({\n elevationData,\n bounds,\n elevationDecoder,\n meshMaxError,\n signal\n }: TerrainLoadProps): Promise<MeshAttributes> | null {\n if (!elevationData) {\n return null;\n }\n let loadOptions = this.getLoadOptions();\n loadOptions = {\n ...loadOptions,\n terrain: {\n skirtHeight: this.state.isTiled ? meshMaxError * 2 : 0,\n ...loadOptions?.terrain,\n bounds,\n meshMaxError,\n elevationDecoder\n }\n };\n const {fetch} = this.props;\n return fetch(elevationData, {propName: 'elevationData', layer: this, loadOptions, signal});\n }\n\n getTiledTerrainData(tile: TileLoadProps): Promise<MeshAndTexture> {\n const {elevationData, fetch, texture, elevationDecoder, meshMaxError} = this.props;\n const {viewport} = this.context;\n const dataUrl = getURLFromTemplate(elevationData, tile);\n const textureUrl = texture && getURLFromTemplate(texture, tile);\n\n const {signal} = tile;\n let bottomLeft = [0, 0] as [number, number];\n let topRight = [0, 0] as [number, number];\n if (viewport.isGeospatial) {\n const bbox = tile.bbox as GeoBoundingBox;\n bottomLeft = viewport.projectFlat([bbox.west, bbox.south]);\n topRight = viewport.projectFlat([bbox.east, bbox.north]);\n } else {\n const bbox = tile.bbox as Exclude<TileBoundingBox, GeoBoundingBox>;\n bottomLeft = [bbox.left, bbox.bottom];\n topRight = [bbox.right, bbox.top];\n }\n const bounds: Bounds = [bottomLeft[0], bottomLeft[1], topRight[0], topRight[1]];\n\n const terrain = this.loadTerrain({\n elevationData: dataUrl,\n bounds,\n elevationDecoder,\n meshMaxError,\n signal\n });\n const surface = textureUrl\n ? // If surface image fails to load, the tile should still be displayed\n fetch(textureUrl, {propName: 'texture', layer: this, loaders: [], signal}).catch(_ => null)\n : Promise.resolve(null);\n\n return Promise.all([terrain, surface]);\n }\n\n renderSubLayers(\n props: TileLayerProps<MeshAndTexture> & {\n id: string;\n data: MeshAndTexture;\n tile: Tile2DHeader<MeshAndTexture>;\n }\n ) {\n const SubLayerClass = this.getSubLayerClass('mesh', SimpleMeshLayer);\n\n const {color, wireframe, material} = this.props;\n const {data} = props;\n\n if (!data) {\n return null;\n }\n\n const [mesh, texture] = data;\n\n return new SubLayerClass(props, {\n data: DUMMY_DATA,\n mesh,\n texture,\n _instanced: false,\n coordinateSystem: COORDINATE_SYSTEM.CARTESIAN,\n getPosition: d => [0, 0, 0],\n getColor: color,\n wireframe,\n material\n });\n }\n\n // Update zRange of viewport\n onViewportLoad(tiles?: Tile2DHeader<MeshAndTexture>[]): void {\n if (!tiles) {\n return;\n }\n\n const {zRange} = this.state;\n const ranges = tiles\n .map(tile => tile.content)\n .filter(Boolean)\n .map(arr => {\n // @ts-ignore\n const bounds = arr[0].header.boundingBox;\n return bounds.map(bound => bound[2]);\n });\n if (ranges.length === 0) {\n return;\n }\n const minZ = Math.min(...ranges.map(x => x[0]));\n const maxZ = Math.max(...ranges.map(x => x[1]));\n\n if (!zRange || minZ < zRange[0] || maxZ > zRange[1]) {\n this.setState({zRange: [minZ, maxZ]});\n }\n }\n\n renderLayers(): Layer | null | LayersList {\n const {\n color,\n material,\n elevationData,\n texture,\n wireframe,\n meshMaxError,\n elevationDecoder,\n tileSize,\n maxZoom,\n minZoom,\n extent,\n maxRequests,\n onTileLoad,\n onTileUnload,\n onTileError,\n maxCacheSize,\n maxCacheByteSize,\n refinementStrategy\n } = this.props;\n\n if (this.state.isTiled) {\n return new TileLayer<MeshAndTexture>(\n this.getSubLayerProps({\n id: 'tiles'\n }),\n {\n getTileData: this.getTiledTerrainData.bind(this),\n renderSubLayers: this.renderSubLayers.bind(this),\n updateTriggers: {\n getTileData: {\n elevationData: urlTemplateToUpdateTrigger(elevationData),\n texture: urlTemplateToUpdateTrigger(texture),\n meshMaxError,\n elevationDecoder\n }\n },\n onViewportLoad: this.onViewportLoad.bind(this),\n zRange: this.state.zRange || null,\n tileSize,\n maxZoom,\n minZoom,\n extent,\n maxRequests,\n onTileLoad,\n onTileUnload,\n onTileError,\n maxCacheSize,\n maxCacheByteSize,\n refinementStrategy\n }\n );\n }\n\n const SubLayerClass = this.getSubLayerClass('mesh', SimpleMeshLayer);\n return new SubLayerClass(\n this.getSubLayerProps({\n id: 'mesh'\n }),\n {\n data: DUMMY_DATA,\n mesh: this.state.terrain,\n texture,\n _instanced: false,\n getPosition: d => [0, 0, 0],\n getColor: color,\n material,\n wireframe\n }\n );\n }\n}\n"],"file":"terrain-layer.js"}
1
+ {"version":3,"sources":["../../../src/terrain-layer/terrain-layer.ts"],"names":["DUMMY_DATA","defaultProps","TileLayer","elevationData","urlType","texture","optional","meshMaxError","type","value","bounds","compare","color","elevationDecoder","rScaler","gScaler","bScaler","offset","workerUrl","wireframe","material","loaders","TerrainWorkerLoader","urlTemplateToUpdateTrigger","template","Array","isArray","join","TerrainLayer","state","updateState","props","oldProps","elevationDataChanged","isTiled","includes","setState","shouldReload","terrain","loadTerrain","log","removed","signal","loadOptions","getLoadOptions","skirtHeight","fetch","propName","layer","getTiledTerrainData","tile","viewport","context","dataUrl","textureUrl","bottomLeft","topRight","isGeospatial","bbox","projectFlat","west","south","east","north","left","bottom","right","top","surface","catch","_","Promise","resolve","all","renderSubLayers","SubLayerClass","getSubLayerClass","SimpleMeshLayer","data","mesh","_instanced","coordinateSystem","COORDINATE_SYSTEM","CARTESIAN","getPosition","d","getColor","onViewportLoad","tiles","zRange","ranges","map","content","filter","Boolean","arr","header","boundingBox","bound","length","minZ","Math","min","x","maxZ","max","renderLayers","tileSize","maxZoom","minZoom","extent","maxRequests","onTileLoad","onTileUnload","onTileError","maxCacheSize","maxCacheByteSize","refinementStrategy","getSubLayerProps","id","getTileData","bind","updateTriggers","CompositeLayer","layerName"],"mappings":"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","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 {\n Color,\n CompositeLayer,\n CompositeLayerProps,\n DefaultProps,\n Layer,\n LayersList,\n log,\n Material,\n TextureSource,\n UpdateParameters\n} from '@deck.gl/core';\nimport {SimpleMeshLayer} from '@deck.gl/mesh-layers';\nimport {COORDINATE_SYSTEM} from '@deck.gl/core';\nimport type {MeshAttributes} from '@loaders.gl/schema';\nimport {TerrainWorkerLoader} from '@loaders.gl/terrain';\nimport TileLayer, {TileLayerProps} from '../tile-layer/tile-layer';\nimport type {Bounds, GeoBoundingBox, TileBoundingBox, TileLoadProps, ZRange} from '../tileset-2d';\nimport {Tile2DHeader, urlType, getURLFromTemplate, URLTemplate} from '../tileset-2d';\n\nconst DUMMY_DATA = [1];\n\nconst defaultProps: DefaultProps<TerrainLayerProps> = {\n ...TileLayer.defaultProps,\n // Image url that encodes height data\n elevationData: urlType,\n // Image url to use as texture\n texture: {...urlType, optional: true},\n // Martini error tolerance in meters, smaller number -> more detailed mesh\n meshMaxError: {type: 'number', value: 4.0},\n // Bounding box of the terrain image, [minX, minY, maxX, maxY] in world coordinates\n bounds: {type: 'array', value: null, optional: true, compare: true},\n // Color to use if texture is unavailable\n color: {type: 'color', value: [255, 255, 255]},\n // Object to decode height data, from (r, g, b) to height in meters\n elevationDecoder: {\n type: 'object',\n value: {\n rScaler: 1,\n gScaler: 0,\n bScaler: 0,\n offset: 0\n }\n },\n // Supply url to local terrain worker bundle. Only required if running offline and cannot access CDN.\n workerUrl: '',\n // Same as SimpleMeshLayer wireframe\n wireframe: false,\n material: true,\n\n loaders: [TerrainWorkerLoader]\n};\n\n// Turns array of templates into a single string to work around shallow change\nfunction urlTemplateToUpdateTrigger(template: URLTemplate): string {\n if (Array.isArray(template)) {\n return template.join(';');\n }\n return template || '';\n}\n\ntype ElevationDecoder = {rScaler: number; gScaler: number; bScaler: number; offset: number};\ntype TerrainLoadProps = {\n bounds: Bounds;\n elevationData: string | null;\n elevationDecoder: ElevationDecoder;\n meshMaxError: number;\n signal?: AbortSignal;\n};\n\ntype MeshAndTexture = [MeshAttributes | null, TextureSource | null];\n\n/** All properties supported by TerrainLayer */\nexport type TerrainLayerProps = _TerrainLayerProps &\n TileLayerProps<MeshAndTexture> &\n CompositeLayerProps;\n\n/** Props added by the TerrainLayer */\ntype _TerrainLayerProps = {\n /** Image url that encodes height data. **/\n elevationData: URLTemplate;\n\n /** Image url to use as texture. **/\n texture?: URLTemplate;\n\n /** Martini error tolerance in meters, smaller number -> more detailed mesh. **/\n meshMaxError?: number;\n\n /** Bounding box of the terrain image, [minX, minY, maxX, maxY] in world coordinates. **/\n bounds?: Bounds | null;\n\n /** Color to use if texture is unavailable. **/\n color?: Color;\n\n /** Object to decode height data, from (r, g, b) to height in meters. **/\n elevationDecoder?: ElevationDecoder;\n\n /** Whether to render the mesh in wireframe mode. **/\n wireframe?: boolean;\n\n /** Material props for lighting effect. **/\n material?: Material;\n\n /**\n * @deprecated Use `loadOptions.terrain.workerUrl` instead\n */\n workerUrl?: string;\n};\n\n/** Render mesh surfaces from height map images. */\nexport default class TerrainLayer<ExtraPropsT extends {} = {}> extends CompositeLayer<\n ExtraPropsT & Required<_TerrainLayerProps & Required<TileLayerProps<MeshAndTexture>>>\n> {\n static defaultProps = defaultProps;\n static layerName = 'TerrainLayer';\n\n state!: {\n isTiled?: boolean;\n terrain: MeshAttributes;\n zRange?: ZRange | null;\n };\n\n updateState({props, oldProps}: UpdateParameters<this>): void {\n const elevationDataChanged = props.elevationData !== oldProps.elevationData;\n if (elevationDataChanged) {\n const {elevationData} = props;\n const isTiled =\n elevationData &&\n (Array.isArray(elevationData) ||\n (elevationData.includes('{x}') && elevationData.includes('{y}')));\n this.setState({isTiled});\n }\n\n // Reloading for single terrain mesh\n const shouldReload =\n elevationDataChanged ||\n props.meshMaxError !== oldProps.meshMaxError ||\n props.elevationDecoder !== oldProps.elevationDecoder ||\n props.bounds !== oldProps.bounds;\n\n if (!this.state.isTiled && shouldReload) {\n // When state.isTiled, elevationData cannot be an array\n const terrain = this.loadTerrain(props as TerrainLoadProps);\n this.setState({terrain});\n }\n\n // TODO - remove in v9\n // @ts-ignore\n if (props.workerUrl) {\n log.removed('workerUrl', 'loadOptions.terrain.workerUrl')();\n }\n }\n\n loadTerrain({\n elevationData,\n bounds,\n elevationDecoder,\n meshMaxError,\n signal\n }: TerrainLoadProps): Promise<MeshAttributes> | null {\n if (!elevationData) {\n return null;\n }\n let loadOptions = this.getLoadOptions();\n loadOptions = {\n ...loadOptions,\n terrain: {\n skirtHeight: this.state.isTiled ? meshMaxError * 2 : 0,\n ...loadOptions?.terrain,\n bounds,\n meshMaxError,\n elevationDecoder\n }\n };\n const {fetch} = this.props;\n return fetch(elevationData, {propName: 'elevationData', layer: this, loadOptions, signal});\n }\n\n getTiledTerrainData(tile: TileLoadProps): Promise<MeshAndTexture> {\n const {elevationData, fetch, texture, elevationDecoder, meshMaxError} = this.props;\n const {viewport} = this.context;\n const dataUrl = getURLFromTemplate(elevationData, tile);\n const textureUrl = texture && getURLFromTemplate(texture, tile);\n\n const {signal} = tile;\n let bottomLeft = [0, 0] as [number, number];\n let topRight = [0, 0] as [number, number];\n if (viewport.isGeospatial) {\n const bbox = tile.bbox as GeoBoundingBox;\n bottomLeft = viewport.projectFlat([bbox.west, bbox.south]);\n topRight = viewport.projectFlat([bbox.east, bbox.north]);\n } else {\n const bbox = tile.bbox as Exclude<TileBoundingBox, GeoBoundingBox>;\n bottomLeft = [bbox.left, bbox.bottom];\n topRight = [bbox.right, bbox.top];\n }\n const bounds: Bounds = [bottomLeft[0], bottomLeft[1], topRight[0], topRight[1]];\n\n const terrain = this.loadTerrain({\n elevationData: dataUrl,\n bounds,\n elevationDecoder,\n meshMaxError,\n signal\n });\n const surface = textureUrl\n ? // If surface image fails to load, the tile should still be displayed\n fetch(textureUrl, {propName: 'texture', layer: this, loaders: [], signal}).catch(_ => null)\n : Promise.resolve(null);\n\n return Promise.all([terrain, surface]);\n }\n\n renderSubLayers(\n props: TileLayerProps<MeshAndTexture> & {\n id: string;\n data: MeshAndTexture;\n tile: Tile2DHeader<MeshAndTexture>;\n }\n ) {\n const SubLayerClass = this.getSubLayerClass('mesh', SimpleMeshLayer);\n\n const {color, wireframe, material} = this.props;\n const {data} = props;\n\n if (!data) {\n return null;\n }\n\n const [mesh, texture] = data;\n\n return new SubLayerClass(props, {\n data: DUMMY_DATA,\n mesh,\n texture,\n _instanced: false,\n coordinateSystem: COORDINATE_SYSTEM.CARTESIAN,\n getPosition: d => [0, 0, 0],\n getColor: color,\n wireframe,\n material\n });\n }\n\n // Update zRange of viewport\n onViewportLoad(tiles?: Tile2DHeader<MeshAndTexture>[]): void {\n if (!tiles) {\n return;\n }\n\n const {zRange} = this.state;\n const ranges = tiles\n .map(tile => tile.content)\n .filter(Boolean)\n .map(arr => {\n // @ts-ignore\n const bounds = arr[0].header.boundingBox;\n return bounds.map(bound => bound[2]);\n });\n if (ranges.length === 0) {\n return;\n }\n const minZ = Math.min(...ranges.map(x => x[0]));\n const maxZ = Math.max(...ranges.map(x => x[1]));\n\n if (!zRange || minZ < zRange[0] || maxZ > zRange[1]) {\n this.setState({zRange: [minZ, maxZ]});\n }\n }\n\n renderLayers(): Layer | null | LayersList {\n const {\n color,\n material,\n elevationData,\n texture,\n wireframe,\n meshMaxError,\n elevationDecoder,\n tileSize,\n maxZoom,\n minZoom,\n extent,\n maxRequests,\n onTileLoad,\n onTileUnload,\n onTileError,\n maxCacheSize,\n maxCacheByteSize,\n refinementStrategy\n } = this.props;\n\n if (this.state.isTiled) {\n return new TileLayer<MeshAndTexture>(\n this.getSubLayerProps({\n id: 'tiles'\n }),\n {\n getTileData: this.getTiledTerrainData.bind(this),\n renderSubLayers: this.renderSubLayers.bind(this),\n updateTriggers: {\n getTileData: {\n elevationData: urlTemplateToUpdateTrigger(elevationData),\n texture: urlTemplateToUpdateTrigger(texture),\n meshMaxError,\n elevationDecoder\n }\n },\n onViewportLoad: this.onViewportLoad.bind(this),\n zRange: this.state.zRange || null,\n tileSize,\n maxZoom,\n minZoom,\n extent,\n maxRequests,\n onTileLoad,\n onTileUnload,\n onTileError,\n maxCacheSize,\n maxCacheByteSize,\n refinementStrategy\n }\n );\n }\n\n const SubLayerClass = this.getSubLayerClass('mesh', SimpleMeshLayer);\n return new SubLayerClass(\n this.getSubLayerProps({\n id: 'mesh'\n }),\n {\n data: DUMMY_DATA,\n mesh: this.state.terrain,\n texture,\n _instanced: false,\n getPosition: d => [0, 0, 0],\n getColor: color,\n material,\n wireframe\n }\n );\n }\n}\n"],"file":"terrain-layer.js"}
@@ -1,5 +1,5 @@
1
- import GL from '@luma.gl/constants';
2
- import {Geometry} from '@luma.gl/core';
1
+ import {GL} from '@luma.gl/constants';
2
+ import {Geometry} from '@luma.gl/engine';
3
3
 
4
4
  import {
5
5
  Accessor,
@@ -44,7 +44,7 @@ const defaultProps: DefaultProps<Tile3DLayerProps> = {
44
44
  };
45
45
 
46
46
  /** All properties supported by Tile3DLayer */
47
- export type Tile3DLayerProps<DataT = any> = _Tile3DLayerProps<DataT> & CompositeLayerProps;
47
+ export type Tile3DLayerProps<DataT = unknown> = _Tile3DLayerProps<DataT> & CompositeLayerProps;
48
48
 
49
49
  /** Props added by the Tile3DLayer */
50
50
  type _Tile3DLayerProps<DataT> = {
@@ -105,8 +105,7 @@ export default class Tile3DLayer<DataT = any, ExtraPropsT extends {} = {}> exten
105
105
  }
106
106
 
107
107
  get isLoaded(): boolean {
108
- const {tileset3d} = this.state;
109
- return tileset3d !== null && tileset3d.isLoaded();
108
+ return Boolean(this.state?.tileset3d?.isLoaded() && super.isLoaded);
110
109
  }
111
110
 
112
111
  shouldUpdateState({changeFlags}: UpdateParameters<this>): boolean {
@@ -138,7 +137,7 @@ export default class Tile3DLayer<DataT = any, ExtraPropsT extends {} = {}> exten
138
137
 
139
138
  activateViewport(viewport: Viewport): void {
140
139
  const {activeViewports, lastUpdatedViewports} = this.state;
141
- this.internalState!.viewport = viewport;
140
+ this.internalState.viewport = viewport;
142
141
 
143
142
  activeViewports[viewport.id] = viewport;
144
143
  const lastViewport = lastUpdatedViewports?.[viewport.id];
@@ -178,14 +177,14 @@ export default class Tile3DLayer<DataT = any, ExtraPropsT extends {} = {}> exten
178
177
 
179
178
  // TODO: deprecate `loader` in v9.0
180
179
  // @ts-ignore
181
- let loader = this.props.loader || this.props.loaders;
182
- if (Array.isArray(loader)) {
183
- loader = loader[0];
184
- }
180
+ const loaders = this.props.loader || this.props.loaders;
181
+ const loader = Array.isArray(loaders) ? loaders[0] : loaders;
185
182
 
186
183
  const options = {loadOptions: {...loadOptions}};
187
184
  let actualTilesetUrl = tilesetUrl;
185
+ // @ts-expect-error preload
188
186
  if (loader.preload) {
187
+ // @ts-expect-error preload
189
188
  const preloadOptions = await loader.preload(tilesetUrl, loadOptions);
190
189
  if (preloadOptions.url) {
191
190
  actualTilesetUrl = preloadOptions.url;
@@ -358,7 +357,7 @@ export default class Tile3DLayer<DataT = any, ExtraPropsT extends {} = {}> exten
358
357
  const geometry =
359
358
  (oldLayer && oldLayer.props.mesh) ||
360
359
  new Geometry({
361
- drawMode: GL.TRIANGLES,
360
+ topology: 'triangle-list',
362
361
  attributes: getMeshGeometry(attributes),
363
362
  indices
364
363
  });
@@ -99,8 +99,17 @@ var TileLayer = function (_CompositeLayer) {
99
99
  var _super = _createSuper(TileLayer);
100
100
 
101
101
  function TileLayer() {
102
+ var _this;
103
+
102
104
  (0, _classCallCheck2.default)(this, TileLayer);
103
- return _super.apply(this, arguments);
105
+
106
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
107
+ args[_key] = arguments[_key];
108
+ }
109
+
110
+ _this = _super.call.apply(_super, [this].concat(args));
111
+ _this.state = void 0;
112
+ return _this;
104
113
  }
105
114
 
106
115
  var _proto = TileLayer.prototype;
@@ -140,7 +149,7 @@ var TileLayer = function (_CompositeLayer) {
140
149
  if (dataChanged) {
141
150
  tileset.reloadAll();
142
151
  } else {
143
- this.state.tileset.tiles.forEach(function (tile) {
152
+ tileset.tiles.forEach(function (tile) {
144
153
  tile.layers = null;
145
154
  });
146
155
  }
@@ -293,15 +302,15 @@ var TileLayer = function (_CompositeLayer) {
293
302
  };
294
303
 
295
304
  _proto.renderLayers = function renderLayers() {
296
- var _this = this;
305
+ var _this2 = this;
297
306
 
298
307
  return this.state.tileset.tiles.map(function (tile) {
299
- var subLayerProps = _this.getSubLayerPropsByTile(tile);
308
+ var subLayerProps = _this2.getSubLayerPropsByTile(tile);
300
309
 
301
310
  if (!tile.isLoaded && !tile.content) {} else if (!tile.layers) {
302
- var layers = _this.renderSubLayers(_objectSpread(_objectSpread(_objectSpread({}, _this.props), _this.getSubLayerProps({
311
+ var layers = _this2.renderSubLayers(_objectSpread(_objectSpread(_objectSpread({}, _this2.props), _this2.getSubLayerProps({
303
312
  id: tile.id,
304
- updateTriggers: _this.props.updateTriggers
313
+ updateTriggers: _this2.props.updateTriggers
305
314
  })), {}, {
306
315
  data: tile.content,
307
316
  _offset: 0,
@@ -335,13 +344,14 @@ var TileLayer = function (_CompositeLayer) {
335
344
  (0, _createClass2.default)(TileLayer, [{
336
345
  key: "isLoaded",
337
346
  get: function get() {
338
- var _this$state2, _this$state2$tileset, _this$state2$tileset$;
347
+ var _this$state2, _this$state2$tileset;
339
348
 
340
- return (_this$state2 = this.state) === null || _this$state2 === void 0 ? void 0 : (_this$state2$tileset = _this$state2.tileset) === null || _this$state2$tileset === void 0 ? void 0 : (_this$state2$tileset$ = _this$state2$tileset.selectedTiles) === null || _this$state2$tileset$ === void 0 ? void 0 : _this$state2$tileset$.every(function (tile) {
349
+ var selectedTiles = (_this$state2 = this.state) === null || _this$state2 === void 0 ? void 0 : (_this$state2$tileset = _this$state2.tileset) === null || _this$state2$tileset === void 0 ? void 0 : _this$state2$tileset.selectedTiles;
350
+ return selectedTiles ? selectedTiles.every(function (tile) {
341
351
  return tile.isLoaded && tile.layers && tile.layers.every(function (layer) {
342
352
  return layer.isLoaded;
343
353
  });
344
- });
354
+ }) : false;
345
355
  }
346
356
  }]);
347
357
  return TileLayer;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tile-layer/tile-layer.ts"],"names":["defaultProps","TilesetClass","Tileset2D","data","type","value","dataComparator","urlType","equal","renderSubLayers","props","GeoJsonLayer","getTileData","optional","onViewportLoad","onTileLoad","tile","onTileUnload","onTileError","err","console","error","extent","compare","tileSize","maxZoom","minZoom","maxCacheSize","maxCacheByteSize","refinementStrategy","STRATEGY_DEFAULT","zRange","maxRequests","zoomOffset","TileLayer","initializeState","state","tileset","isLoaded","finalizeState","finalize","shouldUpdateState","changeFlags","somethingChanged","updateState","propsChanged","propsOrDataChanged","updateTriggersChanged","dataChanged","all","_getTilesetOptions","setState","setOptions","reloadAll","tiles","forEach","layers","_updateTileset","bind","_onTileLoad","_onTileError","_onTileUnload","modelMatrix","frameNumber","update","context","viewport","loadingStateChanged","tilesetChanged","_onViewportLoad","selectedTiles","setNeedsUpdate","fetch","signal","url","Array","isArray","propName","layer","getSubLayerPropsByTile","getPickingInfo","info","sourceLayer","sourceTile","picked","_updateAutoHighlight","updateAutoHighlight","renderLayers","map","subLayerProps","content","getSubLayerProps","id","updateTriggers","_offset","Boolean","clone","Object","keys","some","filterSubLayer","cullRect","isTileVisible","every","CompositeLayer","layerName"],"mappings":"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","sourcesContent":["import {\n CompositeLayer,\n CompositeLayerProps,\n Layer,\n LayerProps,\n UpdateParameters,\n PickingInfo,\n GetPickingInfoParams,\n DefaultProps,\n FilterContext,\n _flatten as flatten\n} from '@deck.gl/core';\nimport {GeoJsonLayer} from '@deck.gl/layers';\nimport {LayersList} from '@deck.gl/core';\n\nimport type {TileLoadProps, ZRange} from '../tileset-2d';\nimport {\n Tileset2D,\n Tile2DHeader,\n RefinementStrategy,\n STRATEGY_DEFAULT,\n Tileset2DProps\n} from '../tileset-2d';\nimport {urlType, URLTemplate, getURLFromTemplate} from '../tileset-2d';\n\nconst defaultProps: DefaultProps<TileLayerProps> = {\n TilesetClass: Tileset2D,\n data: {type: 'data', value: []},\n dataComparator: urlType.equal,\n renderSubLayers: {type: 'function', value: props => new GeoJsonLayer(props)},\n getTileData: {type: 'function', optional: true, value: null},\n // TODO - change to onViewportLoad to align with Tile3DLayer\n onViewportLoad: {type: 'function', optional: true, value: null},\n onTileLoad: {type: 'function', value: tile => {}},\n onTileUnload: {type: 'function', value: tile => {}},\n // eslint-disable-next-line\n onTileError: {type: 'function', value: err => console.error(err)},\n extent: {type: 'array', optional: true, value: null, compare: true},\n tileSize: 512,\n maxZoom: null,\n minZoom: 0,\n maxCacheSize: null,\n maxCacheByteSize: null,\n refinementStrategy: STRATEGY_DEFAULT,\n zRange: null,\n maxRequests: 6,\n zoomOffset: 0\n};\n\n/** All props supported by the TileLayer */\nexport type TileLayerProps<DataT = any> = CompositeLayerProps & _TileLayerProps<DataT>;\n\n/** Props added by the TileLayer */\ntype _TileLayerProps<DataT> = {\n data: URLTemplate;\n /**\n * Optionally implement a custom indexing scheme.\n */\n TilesetClass?: typeof Tileset2D;\n /**\n * Renders one or an array of Layer instances.\n */\n renderSubLayers?: (\n props: TileLayerProps<DataT> & {\n id: string;\n data: DataT;\n _offset: number;\n tile: Tile2DHeader<DataT>;\n }\n ) => Layer | null | LayersList;\n /**\n * If supplied, `getTileData` is called to retrieve the data of each tile.\n */\n getTileData?: ((props: TileLoadProps) => Promise<DataT> | DataT) | null;\n\n /** Called when all tiles in the current viewport are loaded. */\n onViewportLoad?: ((tiles: Tile2DHeader<DataT>[]) => void) | null;\n\n /** Called when a tile successfully loads. */\n onTileLoad?: (tile: Tile2DHeader<DataT>) => void;\n\n /** Called when a tile is cleared from cache. */\n onTileUnload?: (tile: Tile2DHeader<DataT>) => void;\n\n /** Called when a tile failed to load. */\n onTileError?: (err: any, tile?) => void;\n\n /** The bounding box of the layer's data. */\n extent?: number[] | null;\n\n /** The pixel dimension of the tiles, usually a power of 2. */\n tileSize?: number;\n\n /** The max zoom level of the layer's data.\n * @default null\n */\n maxZoom?: number | null;\n\n /** The min zoom level of the layer's data.\n * @default 0\n */\n minZoom?: number | null;\n\n /** The maximum number of tiles that can be cached. */\n maxCacheSize?: number | null;\n\n /**\n * The maximum memory used for caching tiles.\n *\n * @default null\n */\n maxCacheByteSize?: number | null;\n\n /**\n * How the tile layer refines the visibility of tiles.\n *\n * @default 'best-available'\n */\n refinementStrategy?: RefinementStrategy;\n\n /** Range of minimum and maximum heights in the tile. */\n zRange?: ZRange | null;\n\n /**\n * The maximum number of concurrent getTileData calls.\n *\n * @default 6\n */\n maxRequests?: number;\n\n /**\n * This offset changes the zoom level at which the tiles are fetched.\n *\n * Needs to be an integer.\n *\n * @default 0\n */\n zoomOffset?: number;\n};\n\nexport type TiledPickingInfo<DataT = any> = PickingInfo & {\n tile?: Tile2DHeader<DataT>;\n};\n\n/**\n * The TileLayer is a composite layer that makes it possible to visualize very large datasets.\n *\n * Instead of fetching the entire dataset, it only loads and renders what's visible in the current viewport.\n */\nexport default class TileLayer<DataT = any, ExtraPropsT extends {} = {}> extends CompositeLayer<\n ExtraPropsT & Required<_TileLayerProps<DataT>>\n> {\n static defaultProps: DefaultProps = defaultProps;\n static layerName = 'TileLayer';\n\n initializeState() {\n this.state = {\n tileset: null,\n isLoaded: false\n };\n }\n\n finalizeState() {\n this.state?.tileset?.finalize();\n }\n\n get isLoaded(): boolean {\n return this.state?.tileset?.selectedTiles?.every(\n tile => tile.isLoaded && tile.layers && tile.layers.every(layer => layer.isLoaded)\n );\n }\n\n shouldUpdateState({changeFlags}): boolean {\n return changeFlags.somethingChanged;\n }\n\n updateState({changeFlags}: UpdateParameters<this>) {\n let {tileset} = this.state;\n const propsChanged = changeFlags.propsOrDataChanged || changeFlags.updateTriggersChanged;\n const dataChanged =\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getTileData));\n\n if (!tileset) {\n tileset = new this.props.TilesetClass(this._getTilesetOptions());\n this.setState({tileset});\n } else if (propsChanged) {\n tileset.setOptions(this._getTilesetOptions());\n\n if (dataChanged) {\n // reload all tiles\n // use cached layers until new content is loaded\n tileset.reloadAll();\n } else {\n // some render options changed, regenerate sub layers now\n this.state.tileset.tiles.forEach(tile => {\n tile.layers = null;\n });\n }\n }\n\n this._updateTileset();\n }\n\n _getTilesetOptions(): Tileset2DProps {\n const {\n tileSize,\n maxCacheSize,\n maxCacheByteSize,\n refinementStrategy,\n extent,\n maxZoom,\n minZoom,\n maxRequests,\n zoomOffset\n } = this.props;\n\n return {\n maxCacheSize,\n maxCacheByteSize,\n maxZoom,\n minZoom,\n tileSize,\n refinementStrategy,\n extent,\n maxRequests,\n zoomOffset,\n\n getTileData: this.getTileData.bind(this),\n onTileLoad: this._onTileLoad.bind(this),\n onTileError: this._onTileError.bind(this),\n onTileUnload: this._onTileUnload.bind(this)\n };\n }\n\n private _updateTileset(): void {\n const {tileset} = this.state;\n const {zRange, modelMatrix} = this.props;\n const frameNumber = tileset.update(this.context.viewport, {zRange, modelMatrix});\n const {isLoaded} = tileset;\n\n const loadingStateChanged = this.state.isLoaded !== isLoaded;\n const tilesetChanged = this.state.frameNumber !== frameNumber;\n\n if (isLoaded && (loadingStateChanged || tilesetChanged)) {\n this._onViewportLoad();\n }\n\n if (tilesetChanged) {\n // Save the tileset frame number - trigger a rerender\n this.setState({frameNumber});\n }\n // Save the loaded state - should not trigger a rerender\n this.state.isLoaded = isLoaded;\n }\n\n _onViewportLoad(): void {\n const {tileset} = this.state;\n const {onViewportLoad} = this.props;\n\n if (onViewportLoad) {\n onViewportLoad(tileset.selectedTiles);\n }\n }\n\n _onTileLoad(tile: Tile2DHeader<DataT>): void {\n this.props.onTileLoad(tile);\n tile.layers = null;\n\n this.setNeedsUpdate();\n }\n\n _onTileError(error: any, tile: Tile2DHeader<DataT>) {\n this.props.onTileError(error);\n tile.layers = null;\n\n this.setNeedsUpdate();\n }\n\n _onTileUnload(tile: Tile2DHeader<DataT>) {\n this.props.onTileUnload(tile);\n }\n\n // Methods for subclass to override\n\n getTileData(tile: TileLoadProps): Promise<DataT> | DataT | null {\n const {data, getTileData, fetch} = this.props;\n const {signal} = tile;\n\n tile.url =\n typeof data === 'string' || Array.isArray(data) ? getURLFromTemplate(data, tile) : null;\n\n if (getTileData) {\n return getTileData(tile);\n }\n if (fetch && tile.url) {\n return fetch(tile.url, {propName: 'data', layer: this, signal});\n }\n return null;\n }\n\n renderSubLayers(\n props: TileLayer['props'] & {\n id: string;\n data: DataT;\n _offset: number;\n tile: Tile2DHeader<DataT>;\n }\n ): Layer | null | LayersList {\n return this.props.renderSubLayers(props);\n }\n\n getSubLayerPropsByTile(tile: Tile2DHeader): Partial<LayerProps> | null {\n return null;\n }\n\n getPickingInfo({info, sourceLayer}: GetPickingInfoParams): TiledPickingInfo<DataT> {\n const sourceTile = (sourceLayer as any).props.tile;\n if (info.picked) {\n (info as any).tile = sourceTile;\n }\n (info as any).sourceTile = sourceTile;\n return info;\n }\n\n protected _updateAutoHighlight(info: PickingInfo): void {\n const sourceTile = (info as any).sourceTile as Tile2DHeader;\n if (sourceTile && sourceTile.layers) {\n for (const layer of sourceTile.layers) {\n layer.updateAutoHighlight(info);\n }\n }\n }\n\n renderLayers(): Layer | null | LayersList {\n return this.state.tileset.tiles.map((tile: Tile2DHeader) => {\n const subLayerProps = this.getSubLayerPropsByTile(tile);\n // cache the rendered layer in the tile\n if (!tile.isLoaded && !tile.content) {\n // nothing to show\n } else if (!tile.layers) {\n const layers = this.renderSubLayers({\n ...this.props,\n ...this.getSubLayerProps({\n id: tile.id,\n updateTriggers: this.props.updateTriggers\n }),\n data: tile.content,\n _offset: 0,\n tile\n });\n tile.layers = (flatten(layers, Boolean) as Layer<{tile?: Tile2DHeader}>[]).map(layer =>\n layer.clone({\n tile,\n ...subLayerProps\n })\n );\n } else if (\n subLayerProps &&\n tile.layers[0] &&\n Object.keys(subLayerProps).some(\n propName => tile.layers![0].props[propName] !== subLayerProps[propName]\n )\n ) {\n tile.layers = tile.layers.map(layer => layer.clone(subLayerProps));\n }\n return tile.layers;\n });\n }\n\n filterSubLayer({layer, cullRect}: FilterContext) {\n const {tile} = (layer as Layer<{tile: Tile2DHeader}>).props;\n return this.state.tileset.isTileVisible(tile, cullRect);\n }\n}\n"],"file":"tile-layer.js"}
1
+ {"version":3,"sources":["../../../src/tile-layer/tile-layer.ts"],"names":["defaultProps","TilesetClass","Tileset2D","data","type","value","dataComparator","urlType","equal","renderSubLayers","props","GeoJsonLayer","getTileData","optional","onViewportLoad","onTileLoad","tile","onTileUnload","onTileError","err","console","error","extent","compare","tileSize","maxZoom","minZoom","maxCacheSize","maxCacheByteSize","refinementStrategy","STRATEGY_DEFAULT","zRange","maxRequests","zoomOffset","TileLayer","state","initializeState","tileset","isLoaded","finalizeState","finalize","shouldUpdateState","changeFlags","somethingChanged","updateState","propsChanged","propsOrDataChanged","updateTriggersChanged","dataChanged","all","_getTilesetOptions","setState","setOptions","reloadAll","tiles","forEach","layers","_updateTileset","bind","_onTileLoad","_onTileError","_onTileUnload","modelMatrix","frameNumber","update","context","viewport","loadingStateChanged","tilesetChanged","_onViewportLoad","selectedTiles","setNeedsUpdate","fetch","signal","url","Array","isArray","propName","layer","getSubLayerPropsByTile","getPickingInfo","info","sourceLayer","sourceTile","picked","_updateAutoHighlight","updateAutoHighlight","renderLayers","map","subLayerProps","content","getSubLayerProps","id","updateTriggers","_offset","Boolean","clone","Object","keys","some","filterSubLayer","cullRect","isTileVisible","every","CompositeLayer","layerName"],"mappings":"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","sourcesContent":["import {\n CompositeLayer,\n CompositeLayerProps,\n Layer,\n LayerProps,\n UpdateParameters,\n PickingInfo,\n GetPickingInfoParams,\n DefaultProps,\n FilterContext,\n _flatten as flatten\n} from '@deck.gl/core';\nimport {GeoJsonLayer} from '@deck.gl/layers';\nimport {LayersList} from '@deck.gl/core';\n\nimport type {TileLoadProps, ZRange} from '../tileset-2d';\nimport {\n Tileset2D,\n Tile2DHeader,\n RefinementStrategy,\n STRATEGY_DEFAULT,\n Tileset2DProps\n} from '../tileset-2d';\nimport {urlType, URLTemplate, getURLFromTemplate} from '../tileset-2d';\n\nconst defaultProps: DefaultProps<TileLayerProps> = {\n TilesetClass: Tileset2D,\n data: {type: 'data', value: []},\n dataComparator: urlType.equal,\n renderSubLayers: {type: 'function', value: (props: any) => new GeoJsonLayer(props)},\n getTileData: {type: 'function', optional: true, value: null},\n // TODO - change to onViewportLoad to align with Tile3DLayer\n onViewportLoad: {type: 'function', optional: true, value: null},\n onTileLoad: {type: 'function', value: tile => {}},\n onTileUnload: {type: 'function', value: tile => {}},\n // eslint-disable-next-line\n onTileError: {type: 'function', value: err => console.error(err)},\n extent: {type: 'array', optional: true, value: null, compare: true},\n tileSize: 512,\n maxZoom: null,\n minZoom: 0,\n maxCacheSize: null,\n maxCacheByteSize: null,\n refinementStrategy: STRATEGY_DEFAULT,\n zRange: null,\n maxRequests: 6,\n zoomOffset: 0\n};\n\n/** All props supported by the TileLayer */\nexport type TileLayerProps<DataT = unknown> = CompositeLayerProps & _TileLayerProps<DataT>;\n\n/** Props added by the TileLayer */\ntype _TileLayerProps<DataT> = {\n data: URLTemplate;\n /**\n * Optionally implement a custom indexing scheme.\n */\n TilesetClass?: typeof Tileset2D;\n /**\n * Renders one or an array of Layer instances.\n */\n renderSubLayers?: (\n props: TileLayerProps<DataT> & {\n id: string;\n data: DataT;\n _offset: number;\n tile: Tile2DHeader<DataT>;\n }\n ) => Layer | null | LayersList;\n /**\n * If supplied, `getTileData` is called to retrieve the data of each tile.\n */\n getTileData?: ((props: TileLoadProps) => Promise<DataT> | DataT) | null;\n\n /** Called when all tiles in the current viewport are loaded. */\n onViewportLoad?: ((tiles: Tile2DHeader<DataT>[]) => void) | null;\n\n /** Called when a tile successfully loads. */\n onTileLoad?: (tile: Tile2DHeader<DataT>) => void;\n\n /** Called when a tile is cleared from cache. */\n onTileUnload?: (tile: Tile2DHeader<DataT>) => void;\n\n /** Called when a tile failed to load. */\n onTileError?: (err: any, tile?) => void;\n\n /** The bounding box of the layer's data. */\n extent?: number[] | null;\n\n /** The pixel dimension of the tiles, usually a power of 2. */\n tileSize?: number;\n\n /** The max zoom level of the layer's data.\n * @default null\n */\n maxZoom?: number | null;\n\n /** The min zoom level of the layer's data.\n * @default 0\n */\n minZoom?: number | null;\n\n /** The maximum number of tiles that can be cached. */\n maxCacheSize?: number | null;\n\n /**\n * The maximum memory used for caching tiles.\n *\n * @default null\n */\n maxCacheByteSize?: number | null;\n\n /**\n * How the tile layer refines the visibility of tiles.\n *\n * @default 'best-available'\n */\n refinementStrategy?: RefinementStrategy;\n\n /** Range of minimum and maximum heights in the tile. */\n zRange?: ZRange | null;\n\n /**\n * The maximum number of concurrent getTileData calls.\n *\n * @default 6\n */\n maxRequests?: number;\n\n /**\n * This offset changes the zoom level at which the tiles are fetched.\n *\n * Needs to be an integer.\n *\n * @default 0\n */\n zoomOffset?: number;\n};\n\nexport type TiledPickingInfo<DataT = any> = PickingInfo & {\n tile?: Tile2DHeader<DataT>;\n};\n\n/**\n * The TileLayer is a composite layer that makes it possible to visualize very large datasets.\n *\n * Instead of fetching the entire dataset, it only loads and renders what's visible in the current viewport.\n */\nexport default class TileLayer<DataT = any, ExtraPropsT extends {} = {}> extends CompositeLayer<\n ExtraPropsT & Required<_TileLayerProps<DataT>>\n> {\n static defaultProps: DefaultProps = defaultProps;\n static layerName = 'TileLayer';\n\n state!: {\n tileset: Tileset2D | null;\n isLoaded: boolean;\n frameNumber?: number;\n };\n\n initializeState() {\n this.state = {\n tileset: null,\n isLoaded: false\n };\n }\n\n finalizeState() {\n this.state?.tileset?.finalize();\n }\n\n get isLoaded(): boolean {\n const selectedTiles = this.state?.tileset?.selectedTiles;\n return selectedTiles\n ? selectedTiles.every(\n tile => tile.isLoaded && tile.layers && tile.layers.every(layer => layer.isLoaded)\n )\n : false;\n }\n\n shouldUpdateState({changeFlags}): boolean {\n return changeFlags.somethingChanged;\n }\n\n updateState({changeFlags}: UpdateParameters<this>) {\n let {tileset} = this.state;\n const propsChanged = changeFlags.propsOrDataChanged || changeFlags.updateTriggersChanged;\n const dataChanged =\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getTileData));\n\n if (!tileset) {\n tileset = new this.props.TilesetClass(this._getTilesetOptions());\n this.setState({tileset});\n } else if (propsChanged) {\n tileset.setOptions(this._getTilesetOptions());\n\n if (dataChanged) {\n // reload all tiles\n // use cached layers until new content is loaded\n tileset.reloadAll();\n } else {\n // some render options changed, regenerate sub layers now\n tileset.tiles.forEach(tile => {\n tile.layers = null;\n });\n }\n }\n\n this._updateTileset();\n }\n\n _getTilesetOptions(): Tileset2DProps {\n const {\n tileSize,\n maxCacheSize,\n maxCacheByteSize,\n refinementStrategy,\n extent,\n maxZoom,\n minZoom,\n maxRequests,\n zoomOffset\n } = this.props;\n\n return {\n maxCacheSize,\n maxCacheByteSize,\n maxZoom,\n minZoom,\n tileSize,\n refinementStrategy,\n extent,\n maxRequests,\n zoomOffset,\n\n getTileData: this.getTileData.bind(this),\n onTileLoad: this._onTileLoad.bind(this),\n onTileError: this._onTileError.bind(this),\n onTileUnload: this._onTileUnload.bind(this)\n };\n }\n\n private _updateTileset(): void {\n const tileset = this.state.tileset!;\n const {zRange, modelMatrix} = this.props;\n const frameNumber = tileset.update(this.context.viewport, {zRange, modelMatrix});\n const {isLoaded} = tileset;\n\n const loadingStateChanged = this.state.isLoaded !== isLoaded;\n const tilesetChanged = this.state.frameNumber !== frameNumber;\n\n if (isLoaded && (loadingStateChanged || tilesetChanged)) {\n this._onViewportLoad();\n }\n\n if (tilesetChanged) {\n // Save the tileset frame number - trigger a rerender\n this.setState({frameNumber});\n }\n // Save the loaded state - should not trigger a rerender\n this.state.isLoaded = isLoaded;\n }\n\n _onViewportLoad(): void {\n const {tileset} = this.state;\n const {onViewportLoad} = this.props;\n\n if (onViewportLoad) {\n // This method can only be called when tileset is defined and updated\n onViewportLoad(tileset!.selectedTiles!);\n }\n }\n\n _onTileLoad(tile: Tile2DHeader<DataT>): void {\n this.props.onTileLoad(tile);\n tile.layers = null;\n\n this.setNeedsUpdate();\n }\n\n _onTileError(error: any, tile: Tile2DHeader<DataT>) {\n this.props.onTileError(error);\n tile.layers = null;\n\n this.setNeedsUpdate();\n }\n\n _onTileUnload(tile: Tile2DHeader<DataT>) {\n this.props.onTileUnload(tile);\n }\n\n // Methods for subclass to override\n\n getTileData(tile: TileLoadProps): Promise<DataT> | DataT | null {\n const {data, getTileData, fetch} = this.props;\n const {signal} = tile;\n\n tile.url =\n typeof data === 'string' || Array.isArray(data) ? getURLFromTemplate(data, tile) : null;\n\n if (getTileData) {\n return getTileData(tile);\n }\n if (fetch && tile.url) {\n return fetch(tile.url, {propName: 'data', layer: this, signal});\n }\n return null;\n }\n\n renderSubLayers(\n props: TileLayer['props'] & {\n id: string;\n data: DataT;\n _offset: number;\n tile: Tile2DHeader<DataT>;\n }\n ): Layer | null | LayersList {\n return this.props.renderSubLayers(props);\n }\n\n getSubLayerPropsByTile(tile: Tile2DHeader): Partial<LayerProps> | null {\n return null;\n }\n\n getPickingInfo({info, sourceLayer}: GetPickingInfoParams): TiledPickingInfo<DataT> {\n const sourceTile = (sourceLayer as any).props.tile;\n if (info.picked) {\n (info as any).tile = sourceTile;\n }\n (info as any).sourceTile = sourceTile;\n return info;\n }\n\n protected _updateAutoHighlight(info: PickingInfo): void {\n const sourceTile = (info as any).sourceTile as Tile2DHeader;\n if (sourceTile && sourceTile.layers) {\n for (const layer of sourceTile.layers) {\n layer.updateAutoHighlight(info);\n }\n }\n }\n\n renderLayers(): Layer | null | LayersList {\n return this.state.tileset!.tiles.map((tile: Tile2DHeader) => {\n const subLayerProps = this.getSubLayerPropsByTile(tile);\n // cache the rendered layer in the tile\n if (!tile.isLoaded && !tile.content) {\n // nothing to show\n } else if (!tile.layers) {\n const layers = this.renderSubLayers({\n ...this.props,\n ...this.getSubLayerProps({\n id: tile.id,\n updateTriggers: this.props.updateTriggers\n }),\n data: tile.content,\n _offset: 0,\n tile\n });\n tile.layers = (flatten(layers, Boolean) as Layer<{tile?: Tile2DHeader}>[]).map(layer =>\n layer.clone({\n tile,\n ...subLayerProps\n })\n );\n } else if (\n subLayerProps &&\n tile.layers[0] &&\n Object.keys(subLayerProps).some(\n propName => tile.layers![0].props[propName] !== subLayerProps[propName]\n )\n ) {\n tile.layers = tile.layers.map(layer => layer.clone(subLayerProps));\n }\n return tile.layers;\n });\n }\n\n filterSubLayer({layer, cullRect}: FilterContext) {\n const {tile} = (layer as Layer<{tile: Tile2DHeader}>).props;\n return this.state.tileset!.isTileVisible(tile, cullRect);\n }\n}\n"],"file":"tile-layer.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tileset-2d/tile-2d-traversal.ts"],"names":["TILE_SIZE","MAX_MAPS","REF_POINTS_5","REF_POINTS_9","concat","REF_POINTS_11","OSMNode","x","y","z","childVisible","selected","_children","update","params","viewport","cullingVolume","elevationBounds","minZ","maxZ","bounds","offset","project","boundingVolume","getBoundingVolume","insideBounds","isInside","computeVisibility","distance","distanceTo","cameraPosition","scale","height","Math","floor","log2","children","child","getSelected","result","push","node","minX","minY","maxX","maxY","pow","extent","zRange","worldOffset","refPoints","refPointPositions","p","lngLat","originX","originY","AxisAlignedBoundingBox","getOSMTileIndices","_GlobeViewport","resolution","projectPosition","planes","Object","values","getFrustumPlanes","map","normal","Plane","clone","negate","CullingVolume","unitsPerMeter","distanceScales","elevationMin","elevationMax","WebMercatorViewport","pitch","minLng","minLat","maxLng","maxLat","topLeft","bottomRight","root","traversalParams","subViewports","length"],"mappings":"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","sourcesContent":["import {Viewport, WebMercatorViewport, _GlobeViewport} from '@deck.gl/core';\n\nimport {\n CullingVolume,\n Plane,\n AxisAlignedBoundingBox,\n makeOrientedBoundingBoxFromPoints\n} from '@math.gl/culling';\nimport {lngLatToWorld} from '@math.gl/web-mercator';\nimport {Bounds, TileIndex, ZRange} from './types';\nimport {osmTile2lngLat} from './utils';\n\nconst TILE_SIZE = 512;\n// number of world copies to check\nconst MAX_MAPS = 3;\n// for calculating bounding volume of a tile in a non-web-mercator viewport\nconst REF_POINTS_5 = [\n [0.5, 0.5],\n [0, 0],\n [0, 1],\n [1, 0],\n [1, 1]\n]; // 4 corners and center\nconst REF_POINTS_9 = REF_POINTS_5.concat([\n [0, 0.5],\n [0.5, 0],\n [1, 0.5],\n [0.5, 1]\n]); // 4 corners, center and 4 mid points\nconst REF_POINTS_11 = REF_POINTS_9.concat([\n [0.25, 0.5],\n [0.75, 0.5]\n]); // 2 additional points on equator for top tile\n\nclass OSMNode {\n x: number;\n y: number;\n z: number;\n\n private childVisible?: boolean;\n private selected?: boolean;\n\n private _children?: OSMNode[];\n\n constructor(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n\n get children() {\n if (!this._children) {\n const x = this.x * 2;\n const y = this.y * 2;\n const z = this.z + 1;\n this._children = [\n new OSMNode(x, y, z),\n new OSMNode(x, y + 1, z),\n new OSMNode(x + 1, y, z),\n new OSMNode(x + 1, y + 1, z)\n ];\n }\n return this._children;\n }\n\n // eslint-disable-next-line complexity\n update(params: {\n viewport: Viewport;\n project: ((xyz: number[]) => number[]) | null;\n cullingVolume: CullingVolume;\n elevationBounds: ZRange;\n minZ: number;\n maxZ: number;\n bounds?: Bounds;\n offset: number;\n }) {\n const {viewport, cullingVolume, elevationBounds, minZ, maxZ, bounds, offset, project} = params;\n const boundingVolume = this.getBoundingVolume(elevationBounds, offset, project);\n\n // First, check if this tile is visible\n if (bounds && !this.insideBounds(bounds)) {\n return false;\n }\n\n const isInside = cullingVolume.computeVisibility(boundingVolume);\n if (isInside < 0) {\n return false;\n }\n\n // Avoid loading overlapping tiles - if a descendant is requested, do not request the ancester\n if (!this.childVisible) {\n let {z} = this;\n if (z < maxZ && z >= minZ) {\n // Adjust LOD\n // If the tile is far enough from the camera, accept a lower zoom level\n const distance =\n (boundingVolume.distanceTo(viewport.cameraPosition) * viewport.scale) / viewport.height;\n z += Math.floor(Math.log2(distance));\n }\n if (z >= maxZ) {\n // LOD is acceptable\n this.selected = true;\n return true;\n }\n }\n\n // LOD is not enough, recursively test child tiles\n this.selected = false;\n this.childVisible = true;\n for (const child of this.children) {\n child.update(params);\n }\n return true;\n }\n\n getSelected(result: OSMNode[] = []): OSMNode[] {\n if (this.selected) {\n result.push(this);\n }\n if (this._children) {\n for (const node of this._children) {\n node.getSelected(result);\n }\n }\n return result;\n }\n\n insideBounds([minX, minY, maxX, maxY]: Bounds): boolean {\n const scale = Math.pow(2, this.z);\n const extent = TILE_SIZE / scale;\n\n return (\n this.x * extent < maxX &&\n this.y * extent < maxY &&\n (this.x + 1) * extent > minX &&\n (this.y + 1) * extent > minY\n );\n }\n\n getBoundingVolume(\n zRange: ZRange,\n worldOffset: number,\n project: ((xyz: number[]) => number[]) | null\n ) {\n if (project) {\n // Custom projection\n // Estimate bounding box from sample points\n // At low zoom level we need more samples to calculate the bounding volume correctly\n const refPoints = this.z < 1 ? REF_POINTS_11 : this.z < 2 ? REF_POINTS_9 : REF_POINTS_5;\n\n // Convert from tile-relative coordinates to common space\n const refPointPositions: number[][] = [];\n for (const p of refPoints) {\n const lngLat: number[] = osmTile2lngLat(this.x + p[0], this.y + p[1], this.z);\n lngLat[2] = zRange[0];\n refPointPositions.push(project(lngLat));\n\n if (zRange[0] !== zRange[1]) {\n // Account for the elevation volume\n lngLat[2] = zRange[1];\n refPointPositions.push(project(lngLat));\n }\n }\n\n return makeOrientedBoundingBoxFromPoints(refPointPositions);\n }\n\n // Use WebMercator projection\n const scale = Math.pow(2, this.z);\n const extent = TILE_SIZE / scale;\n const originX = this.x * extent + worldOffset * TILE_SIZE;\n // deck's common space is y-flipped\n const originY = TILE_SIZE - (this.y + 1) * extent;\n\n return new AxisAlignedBoundingBox(\n [originX, originY, zRange[0]],\n [originX + extent, originY + extent, zRange[1]]\n );\n }\n}\n\n// eslint-disable-next-line complexity\nexport function getOSMTileIndices(\n viewport: Viewport,\n maxZ: number,\n zRange: ZRange | undefined,\n bounds?: Bounds\n): TileIndex[] {\n const project: ((xyz: number[]) => number[]) | null =\n viewport instanceof _GlobeViewport && viewport.resolution\n ? // eslint-disable-next-line @typescript-eslint/unbound-method\n viewport.projectPosition\n : null;\n\n // Get the culling volume of the current camera\n const planes: Plane[] = Object.values(viewport.getFrustumPlanes()).map(\n ({normal, distance}) => new Plane(normal.clone().negate(), distance)\n );\n const cullingVolume = new CullingVolume(planes);\n\n // Project zRange from meters to common space\n const unitsPerMeter = viewport.distanceScales.unitsPerMeter[2];\n const elevationMin = (zRange && zRange[0] * unitsPerMeter) || 0;\n const elevationMax = (zRange && zRange[1] * unitsPerMeter) || 0;\n\n // Always load at the current zoom level if pitch is small\n const minZ = viewport instanceof WebMercatorViewport && viewport.pitch <= 60 ? maxZ : 0;\n\n // Map extent to OSM position\n if (bounds) {\n const [minLng, minLat, maxLng, maxLat] = bounds;\n const topLeft = lngLatToWorld([minLng, maxLat]);\n const bottomRight = lngLatToWorld([maxLng, minLat]);\n bounds = [topLeft[0], TILE_SIZE - topLeft[1], bottomRight[0], TILE_SIZE - bottomRight[1]];\n }\n\n const root = new OSMNode(0, 0, 0);\n const traversalParams = {\n viewport,\n project,\n cullingVolume,\n elevationBounds: [elevationMin, elevationMax] as ZRange,\n minZ,\n maxZ,\n bounds,\n // num. of worlds from the center. For repeated maps\n offset: 0\n };\n\n root.update(traversalParams);\n\n if (\n viewport instanceof WebMercatorViewport &&\n viewport.subViewports &&\n viewport.subViewports.length > 1\n ) {\n // Check worlds in repeated maps\n traversalParams.offset = -1;\n while (root.update(traversalParams)) {\n if (--traversalParams.offset < -MAX_MAPS) {\n break;\n }\n }\n traversalParams.offset = 1;\n while (root.update(traversalParams)) {\n if (++traversalParams.offset > MAX_MAPS) {\n break;\n }\n }\n }\n\n return root.getSelected();\n}\n"],"file":"tile-2d-traversal.js"}
1
+ {"version":3,"sources":["../../../src/tileset-2d/tile-2d-traversal.ts"],"names":["TILE_SIZE","MAX_MAPS","REF_POINTS_5","REF_POINTS_9","concat","REF_POINTS_11","OSMNode","x","y","z","childVisible","selected","_children","update","params","viewport","cullingVolume","elevationBounds","minZ","maxZ","bounds","offset","project","boundingVolume","getBoundingVolume","insideBounds","isInside","computeVisibility","distance","distanceTo","cameraPosition","scale","height","Math","floor","log2","children","child","getSelected","result","push","node","minX","minY","maxX","maxY","pow","extent","zRange","worldOffset","refPoints","refPointPositions","p","lngLat","originX","originY","AxisAlignedBoundingBox","getOSMTileIndices","_GlobeViewport","resolution","projectPosition","planes","Object","values","getFrustumPlanes","map","normal","Plane","clone","negate","CullingVolume","unitsPerMeter","distanceScales","elevationMin","elevationMax","WebMercatorViewport","pitch","minLng","minLat","maxLng","maxLat","topLeft","bottomRight","root","traversalParams","subViewports","length"],"mappings":"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","sourcesContent":["import {Viewport, WebMercatorViewport, _GlobeViewport} from '@deck.gl/core';\n\nimport {\n CullingVolume,\n Plane,\n AxisAlignedBoundingBox,\n makeOrientedBoundingBoxFromPoints\n} from '@math.gl/culling';\nimport {lngLatToWorld} from '@math.gl/web-mercator';\nimport {Bounds, TileIndex, ZRange} from './types';\nimport {osmTile2lngLat} from './utils';\n\nconst TILE_SIZE = 512;\n// number of world copies to check\nconst MAX_MAPS = 3;\n// for calculating bounding volume of a tile in a non-web-mercator viewport\nconst REF_POINTS_5 = [\n [0.5, 0.5],\n [0, 0],\n [0, 1],\n [1, 0],\n [1, 1]\n]; // 4 corners and center\nconst REF_POINTS_9 = REF_POINTS_5.concat([\n [0, 0.5],\n [0.5, 0],\n [1, 0.5],\n [0.5, 1]\n]); // 4 corners, center and 4 mid points\nconst REF_POINTS_11 = REF_POINTS_9.concat([\n [0.25, 0.5],\n [0.75, 0.5]\n]); // 2 additional points on equator for top tile\n\nclass OSMNode {\n x: number;\n y: number;\n z: number;\n\n private childVisible?: boolean;\n private selected?: boolean;\n\n private _children?: OSMNode[];\n\n constructor(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n\n get children() {\n if (!this._children) {\n const x = this.x * 2;\n const y = this.y * 2;\n const z = this.z + 1;\n this._children = [\n new OSMNode(x, y, z),\n new OSMNode(x, y + 1, z),\n new OSMNode(x + 1, y, z),\n new OSMNode(x + 1, y + 1, z)\n ];\n }\n return this._children;\n }\n\n // eslint-disable-next-line complexity\n update(params: {\n viewport: Viewport;\n project: ((xyz: number[]) => number[]) | null;\n cullingVolume: CullingVolume;\n elevationBounds: ZRange;\n minZ: number;\n maxZ: number;\n bounds?: Bounds;\n offset: number;\n }) {\n const {viewport, cullingVolume, elevationBounds, minZ, maxZ, bounds, offset, project} = params;\n const boundingVolume = this.getBoundingVolume(elevationBounds, offset, project);\n\n // First, check if this tile is visible\n if (bounds && !this.insideBounds(bounds)) {\n return false;\n }\n\n const isInside = cullingVolume.computeVisibility(boundingVolume);\n if (isInside < 0) {\n return false;\n }\n\n // Avoid loading overlapping tiles - if a descendant is requested, do not request the ancester\n if (!this.childVisible) {\n let {z} = this;\n if (z < maxZ && z >= minZ) {\n // Adjust LOD\n // If the tile is far enough from the camera, accept a lower zoom level\n const distance =\n (boundingVolume.distanceTo(viewport.cameraPosition) * viewport.scale) / viewport.height;\n z += Math.floor(Math.log2(distance));\n }\n if (z >= maxZ) {\n // LOD is acceptable\n this.selected = true;\n return true;\n }\n }\n\n // LOD is not enough, recursively test child tiles\n this.selected = false;\n this.childVisible = true;\n for (const child of this.children) {\n child.update(params);\n }\n return true;\n }\n\n getSelected(result: OSMNode[] = []): OSMNode[] {\n if (this.selected) {\n result.push(this);\n }\n if (this._children) {\n for (const node of this._children) {\n node.getSelected(result);\n }\n }\n return result;\n }\n\n insideBounds([minX, minY, maxX, maxY]: Bounds): boolean {\n const scale = Math.pow(2, this.z);\n const extent = TILE_SIZE / scale;\n\n return (\n this.x * extent < maxX &&\n this.y * extent < maxY &&\n (this.x + 1) * extent > minX &&\n (this.y + 1) * extent > minY\n );\n }\n\n getBoundingVolume(\n zRange: ZRange,\n worldOffset: number,\n project: ((xyz: number[]) => number[]) | null\n ) {\n if (project) {\n // Custom projection\n // Estimate bounding box from sample points\n // At low zoom level we need more samples to calculate the bounding volume correctly\n const refPoints = this.z < 1 ? REF_POINTS_11 : this.z < 2 ? REF_POINTS_9 : REF_POINTS_5;\n\n // Convert from tile-relative coordinates to common space\n const refPointPositions: number[][] = [];\n for (const p of refPoints) {\n const lngLat: number[] = osmTile2lngLat(this.x + p[0], this.y + p[1], this.z);\n lngLat[2] = zRange[0];\n refPointPositions.push(project(lngLat));\n\n if (zRange[0] !== zRange[1]) {\n // Account for the elevation volume\n lngLat[2] = zRange[1];\n refPointPositions.push(project(lngLat));\n }\n }\n\n return makeOrientedBoundingBoxFromPoints(refPointPositions);\n }\n\n // Use WebMercator projection\n const scale = Math.pow(2, this.z);\n const extent = TILE_SIZE / scale;\n const originX = this.x * extent + worldOffset * TILE_SIZE;\n // deck's common space is y-flipped\n const originY = TILE_SIZE - (this.y + 1) * extent;\n\n return new AxisAlignedBoundingBox(\n [originX, originY, zRange[0]],\n [originX + extent, originY + extent, zRange[1]]\n );\n }\n}\n\n// eslint-disable-next-line complexity\nexport function getOSMTileIndices(\n viewport: Viewport,\n maxZ: number,\n zRange?: ZRange | null,\n bounds?: Bounds\n): TileIndex[] {\n const project: ((xyz: number[]) => number[]) | null =\n viewport instanceof _GlobeViewport && viewport.resolution\n ? // eslint-disable-next-line @typescript-eslint/unbound-method\n viewport.projectPosition\n : null;\n\n // Get the culling volume of the current camera\n const planes: Plane[] = Object.values(viewport.getFrustumPlanes()).map(\n ({normal, distance}) => new Plane(normal.clone().negate(), distance)\n );\n const cullingVolume = new CullingVolume(planes);\n\n // Project zRange from meters to common space\n const unitsPerMeter = viewport.distanceScales.unitsPerMeter[2];\n const elevationMin = (zRange && zRange[0] * unitsPerMeter) || 0;\n const elevationMax = (zRange && zRange[1] * unitsPerMeter) || 0;\n\n // Always load at the current zoom level if pitch is small\n const minZ = viewport instanceof WebMercatorViewport && viewport.pitch <= 60 ? maxZ : 0;\n\n // Map extent to OSM position\n if (bounds) {\n const [minLng, minLat, maxLng, maxLat] = bounds;\n const topLeft = lngLatToWorld([minLng, maxLat]);\n const bottomRight = lngLatToWorld([maxLng, minLat]);\n bounds = [topLeft[0], TILE_SIZE - topLeft[1], bottomRight[0], TILE_SIZE - bottomRight[1]];\n }\n\n const root = new OSMNode(0, 0, 0);\n const traversalParams = {\n viewport,\n project,\n cullingVolume,\n elevationBounds: [elevationMin, elevationMax] as ZRange,\n minZ,\n maxZ,\n bounds,\n // num. of worlds from the center. For repeated maps\n offset: 0\n };\n\n root.update(traversalParams);\n\n if (\n viewport instanceof WebMercatorViewport &&\n viewport.subViewports &&\n viewport.subViewports.length > 1\n ) {\n // Check worlds in repeated maps\n traversalParams.offset = -1;\n while (root.update(traversalParams)) {\n if (--traversalParams.offset < -MAX_MAPS) {\n break;\n }\n }\n traversalParams.offset = 1;\n while (root.update(traversalParams)) {\n if (++traversalParams.offset > MAX_MAPS) {\n break;\n }\n }\n }\n\n return root.getSelected();\n}\n"],"file":"tile-2d-traversal.js"}
@@ -183,7 +183,7 @@ var Tileset2D = function () {
183
183
  zRange = _ref.zRange,
184
184
  modelMatrix = _ref.modelMatrix;
185
185
 
186
- var modelMatrixAsMatrix4 = new _core.Matrix4(modelMatrix);
186
+ var modelMatrixAsMatrix4 = modelMatrix ? new _core.Matrix4(modelMatrix) : new _core.Matrix4();
187
187
  var isModelMatrixNew = !modelMatrixAsMatrix4.equals(this._modelMatrix);
188
188
 
189
189
  if (!this._viewport || !viewport.equals(this._viewport) || !(0, _core.equals)(this._zRange, zRange) || isModelMatrixNew) {