@deck.gl/geo-layers 8.6.2 → 8.6.6

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 (69) hide show
  1. package/dist/dist.dev.js +7810 -4699
  2. package/dist/es5/great-circle-layer/great-circle-layer.js +4 -2
  3. package/dist/es5/great-circle-layer/great-circle-layer.js.map +1 -1
  4. package/dist/es5/h3-layers/h3-cluster-layer.js +4 -4
  5. package/dist/es5/h3-layers/h3-cluster-layer.js.map +1 -1
  6. package/dist/es5/h3-layers/h3-hexagon-layer.js +5 -5
  7. package/dist/es5/h3-layers/h3-hexagon-layer.js.map +1 -1
  8. package/dist/es5/index.js +14 -14
  9. package/dist/es5/mesh-layer/mesh-layer.js +3 -3
  10. package/dist/es5/mesh-layer/mesh-layer.js.map +1 -1
  11. package/dist/es5/mvt-layer/coordinate-transform.js +2 -2
  12. package/dist/es5/mvt-layer/find-index-binary.js +1 -1
  13. package/dist/es5/mvt-layer/find-index-binary.js.map +1 -1
  14. package/dist/es5/mvt-layer/mvt-layer.js +34 -11
  15. package/dist/es5/mvt-layer/mvt-layer.js.map +1 -1
  16. package/dist/es5/s2-layer/s2-geometry.js +2 -2
  17. package/dist/es5/s2-layer/s2-layer.js +3 -3
  18. package/dist/es5/s2-layer/s2-layer.js.map +1 -1
  19. package/dist/es5/s2-layer/s2-utils.js +1 -1
  20. package/dist/es5/terrain-layer/terrain-layer.js +8 -12
  21. package/dist/es5/terrain-layer/terrain-layer.js.map +1 -1
  22. package/dist/es5/tile-3d-layer/tile-3d-layer.js +9 -9
  23. package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +1 -1
  24. package/dist/es5/tile-layer/tile-2d-header.js +35 -35
  25. package/dist/es5/tile-layer/tile-2d-header.js.map +1 -1
  26. package/dist/es5/tile-layer/tile-2d-traversal.js +13 -13
  27. package/dist/es5/tile-layer/tile-2d-traversal.js.map +1 -1
  28. package/dist/es5/tile-layer/tile-layer.js +30 -27
  29. package/dist/es5/tile-layer/tile-layer.js.map +1 -1
  30. package/dist/es5/tile-layer/tileset-2d.js +19 -19
  31. package/dist/es5/tile-layer/tileset-2d.js.map +1 -1
  32. package/dist/es5/tile-layer/utils.js +3 -3
  33. package/dist/es5/tile-layer/utils.js.map +1 -1
  34. package/dist/es5/trips-layer/trips-layer.js +3 -3
  35. package/dist/es5/trips-layer/trips-layer.js.map +1 -1
  36. package/dist/esm/h3-layers/h3-cluster-layer.js +7 -5
  37. package/dist/esm/h3-layers/h3-cluster-layer.js.map +1 -1
  38. package/dist/esm/h3-layers/h3-hexagon-layer.js +14 -9
  39. package/dist/esm/h3-layers/h3-hexagon-layer.js.map +1 -1
  40. package/dist/esm/mesh-layer/mesh-layer.js +6 -5
  41. package/dist/esm/mesh-layer/mesh-layer.js.map +1 -1
  42. package/dist/esm/mvt-layer/coordinate-transform.js +3 -1
  43. package/dist/esm/mvt-layer/coordinate-transform.js.map +1 -1
  44. package/dist/esm/mvt-layer/mvt-layer.js +37 -7
  45. package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
  46. package/dist/esm/s2-layer/s2-geometry.js +5 -2
  47. package/dist/esm/s2-layer/s2-geometry.js.map +1 -1
  48. package/dist/esm/s2-layer/s2-utils.js +6 -5
  49. package/dist/esm/s2-layer/s2-utils.js.map +1 -1
  50. package/dist/esm/terrain-layer/terrain-layer.js +22 -21
  51. package/dist/esm/terrain-layer/terrain-layer.js.map +1 -1
  52. package/dist/esm/tile-3d-layer/tile-3d-layer.js +21 -16
  53. package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +1 -1
  54. package/dist/esm/tile-layer/tile-2d-header.js +13 -11
  55. package/dist/esm/tile-layer/tile-2d-header.js.map +1 -1
  56. package/dist/esm/tile-layer/tile-2d-traversal.js +12 -6
  57. package/dist/esm/tile-layer/tile-2d-traversal.js.map +1 -1
  58. package/dist/esm/tile-layer/tile-layer.js +24 -22
  59. package/dist/esm/tile-layer/tile-layer.js.map +1 -1
  60. package/dist/esm/tile-layer/tileset-2d.js +26 -22
  61. package/dist/esm/tile-layer/tileset-2d.js.map +1 -1
  62. package/dist/esm/tile-layer/utils.js +16 -13
  63. package/dist/esm/tile-layer/utils.js.map +1 -1
  64. package/dist.min.js +2 -2
  65. package/package.json +11 -11
  66. package/src/mvt-layer/mvt-layer.js +16 -0
  67. package/src/terrain-layer/terrain-layer.js +10 -9
  68. package/src/tile-layer/tile-layer.js +9 -6
  69. package/src/tile-layer/utils.js +4 -4
@@ -1,10 +1,11 @@
1
1
  import { log } from '@deck.gl/core';
2
2
  export default class Tile2DHeader {
3
- constructor({
4
- x,
5
- y,
6
- z
7
- }) {
3
+ constructor(_ref) {
4
+ let {
5
+ x,
6
+ y,
7
+ z
8
+ } = _ref;
8
9
  this.x = x;
9
10
  this.y = y;
10
11
  this.z = z;
@@ -45,12 +46,13 @@ export default class Tile2DHeader {
45
46
  return result;
46
47
  }
47
48
 
48
- async _loadData({
49
- getData,
50
- requestScheduler,
51
- onLoad,
52
- onError
53
- }) {
49
+ async _loadData(_ref2) {
50
+ let {
51
+ getData,
52
+ requestScheduler,
53
+ onLoad,
54
+ onError
55
+ } = _ref2;
54
56
  const {
55
57
  x,
56
58
  y,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tile-layer/tile-2d-header.js"],"names":["log","Tile2DHeader","constructor","x","y","z","isVisible","isSelected","parent","children","content","_loaderId","_isLoaded","_isCancelled","_needsReload","data","isLoading","_loader","then","isLoaded","Boolean","needsReload","byteLength","result","Number","isFinite","error","_loadData","getData","requestScheduler","onLoad","onError","bbox","loaderId","_abortController","AbortController","signal","requestToken","scheduleRequest","tile","done","tileData","err","undefined","loadData","opts","setNeedsReload","abort"],"mappings":"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","sourcesContent":["/* eslint-env browser */\nimport {log} from '@deck.gl/core';\n\nexport default class Tile2DHeader {\n constructor({x, y, z}) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.isVisible = false;\n this.isSelected = false;\n this.parent = null;\n this.children = [];\n\n this.content = null;\n\n this._loaderId = 0;\n this._isLoaded = false;\n this._isCancelled = false;\n this._needsReload = false;\n }\n\n get data() {\n return this.isLoading ? this._loader.then(() => this.data) : this.content;\n }\n\n get isLoaded() {\n return this._isLoaded && !this._needsReload;\n }\n\n get isLoading() {\n return Boolean(this._loader) && !this._isCancelled;\n }\n\n get needsReload() {\n return this._needsReload || this._isCancelled;\n }\n\n get byteLength() {\n const result = this.content ? this.content.byteLength : 0;\n if (!Number.isFinite(result)) {\n log.error('byteLength not defined in tile data')();\n }\n return result;\n }\n\n /* eslint-disable max-statements */\n async _loadData({getData, requestScheduler, onLoad, onError}) {\n const {x, y, z, bbox} = this;\n const loaderId = this._loaderId;\n\n this._abortController = new AbortController(); // eslint-disable-line no-undef\n const {signal} = this._abortController;\n\n const requestToken = await requestScheduler.scheduleRequest(this, tile => {\n return tile.isSelected ? 1 : -1;\n });\n\n if (!requestToken) {\n this._isCancelled = true;\n return;\n }\n // A tile can be cancelled while being scheduled\n if (this._isCancelled) {\n requestToken.done();\n return;\n }\n\n let tileData = null;\n let error;\n try {\n tileData = await getData({x, y, z, bbox, signal});\n } catch (err) {\n error = err || true;\n } finally {\n requestToken.done();\n }\n\n // If loadData has been called with a newer version, discard the result from this operation\n if (loaderId !== this._loaderId) {\n return;\n }\n // Clear the `isLoading` flag\n this._loader = undefined;\n // Rewrite tile content with the result of getTileData if successful, or `null` in case of\n // error or cancellation\n this.content = tileData;\n // If cancelled, do not invoke the callbacks\n // Consider it loaded if we tried to cancel but `getTileData` still returned data\n if (this._isCancelled && !tileData) {\n this._isLoaded = false;\n return;\n }\n this._isLoaded = true;\n this._isCancelled = false;\n\n if (error) {\n onError(error, this);\n } else {\n onLoad(this);\n }\n }\n /* eslint-enable max-statements */\n\n loadData(opts) {\n this._isLoaded = false;\n this._isCancelled = false;\n this._needsReload = false;\n this._loaderId++;\n this._loader = this._loadData(opts);\n return this._loader;\n }\n\n setNeedsReload() {\n if (this.isLoading) {\n this.abort();\n this._loader = undefined;\n }\n this._needsReload = true;\n }\n\n abort() {\n if (this.isLoaded) {\n return;\n }\n\n this._isCancelled = true;\n this._abortController.abort();\n }\n}\n"],"file":"tile-2d-header.js"}
1
+ {"version":3,"sources":["../../../src/tile-layer/tile-2d-header.js"],"names":["log","Tile2DHeader","constructor","x","y","z","isVisible","isSelected","parent","children","content","_loaderId","_isLoaded","_isCancelled","_needsReload","data","isLoading","_loader","then","isLoaded","Boolean","needsReload","byteLength","result","Number","isFinite","error","_loadData","getData","requestScheduler","onLoad","onError","bbox","loaderId","_abortController","AbortController","signal","requestToken","scheduleRequest","tile","done","tileData","err","undefined","loadData","opts","setNeedsReload","abort"],"mappings":"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","sourcesContent":["/* eslint-env browser */\nimport {log} from '@deck.gl/core';\n\nexport default class Tile2DHeader {\n constructor({x, y, z}) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.isVisible = false;\n this.isSelected = false;\n this.parent = null;\n this.children = [];\n\n this.content = null;\n\n this._loaderId = 0;\n this._isLoaded = false;\n this._isCancelled = false;\n this._needsReload = false;\n }\n\n get data() {\n return this.isLoading ? this._loader.then(() => this.data) : this.content;\n }\n\n get isLoaded() {\n return this._isLoaded && !this._needsReload;\n }\n\n get isLoading() {\n return Boolean(this._loader) && !this._isCancelled;\n }\n\n get needsReload() {\n return this._needsReload || this._isCancelled;\n }\n\n get byteLength() {\n const result = this.content ? this.content.byteLength : 0;\n if (!Number.isFinite(result)) {\n log.error('byteLength not defined in tile data')();\n }\n return result;\n }\n\n /* eslint-disable max-statements */\n async _loadData({getData, requestScheduler, onLoad, onError}) {\n const {x, y, z, bbox} = this;\n const loaderId = this._loaderId;\n\n this._abortController = new AbortController(); // eslint-disable-line no-undef\n const {signal} = this._abortController;\n\n const requestToken = await requestScheduler.scheduleRequest(this, tile => {\n return tile.isSelected ? 1 : -1;\n });\n\n if (!requestToken) {\n this._isCancelled = true;\n return;\n }\n // A tile can be cancelled while being scheduled\n if (this._isCancelled) {\n requestToken.done();\n return;\n }\n\n let tileData = null;\n let error;\n try {\n tileData = await getData({x, y, z, bbox, signal});\n } catch (err) {\n error = err || true;\n } finally {\n requestToken.done();\n }\n\n // If loadData has been called with a newer version, discard the result from this operation\n if (loaderId !== this._loaderId) {\n return;\n }\n // Clear the `isLoading` flag\n this._loader = undefined;\n // Rewrite tile content with the result of getTileData if successful, or `null` in case of\n // error or cancellation\n this.content = tileData;\n // If cancelled, do not invoke the callbacks\n // Consider it loaded if we tried to cancel but `getTileData` still returned data\n if (this._isCancelled && !tileData) {\n this._isLoaded = false;\n return;\n }\n this._isLoaded = true;\n this._isCancelled = false;\n\n if (error) {\n onError(error, this);\n } else {\n onLoad(this);\n }\n }\n /* eslint-enable max-statements */\n\n loadData(opts) {\n this._isLoaded = false;\n this._isCancelled = false;\n this._needsReload = false;\n this._loaderId++;\n this._loader = this._loadData(opts);\n return this._loader;\n }\n\n setNeedsReload() {\n if (this.isLoading) {\n this.abort();\n this._loader = undefined;\n }\n this._needsReload = true;\n }\n\n abort() {\n if (this.isLoaded) {\n return;\n }\n\n this._isCancelled = true;\n this._abortController.abort();\n }\n}\n"],"file":"tile-2d-header.js"}
@@ -74,7 +74,9 @@ class OSMNode {
74
74
  return true;
75
75
  }
76
76
 
77
- getSelected(result = []) {
77
+ getSelected() {
78
+ let result = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
79
+
78
80
  if (this.selected) {
79
81
  result.push(this);
80
82
  }
@@ -88,7 +90,8 @@ class OSMNode {
88
90
  return result;
89
91
  }
90
92
 
91
- insideBounds([minX, minY, maxX, maxY]) {
93
+ insideBounds(_ref) {
94
+ let [minX, minY, maxX, maxY] = _ref;
92
95
  const scale = Math.pow(2, this.z);
93
96
  const extent = TILE_SIZE / scale;
94
97
  return this.x * extent < maxX && this.y * extent < maxY && (this.x + 1) * extent > minX && (this.y + 1) * extent > minY;
@@ -124,10 +127,13 @@ class OSMNode {
124
127
 
125
128
  export function getOSMTileIndices(viewport, maxZ, zRange, bounds) {
126
129
  const project = viewport.resolution ? viewport.projectPosition : null;
127
- const planes = Object.values(viewport.getFrustumPlanes()).map(({
128
- normal,
129
- distance
130
- }) => new Plane(normal.clone().negate(), distance));
130
+ const planes = Object.values(viewport.getFrustumPlanes()).map(_ref2 => {
131
+ let {
132
+ normal,
133
+ distance
134
+ } = _ref2;
135
+ return new Plane(normal.clone().negate(), distance);
136
+ });
131
137
  const cullingVolume = new CullingVolume(planes);
132
138
  const unitsPerMeter = viewport.distanceScales.unitsPerMeter[2];
133
139
  const elevationMin = zRange && zRange[0] * unitsPerMeter || 0;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tile-layer/tile-2d-traversal.js"],"names":["CullingVolume","Plane","AxisAlignedBoundingBox","makeOrientedBoundingBoxFromPoints","lngLatToWorld","osmTile2lngLat","TILE_SIZE","MAX_MAPS","REF_POINTS_5","REF_POINTS_9","concat","REF_POINTS_11","OSMNode","constructor","x","y","z","children","_children","update","params","viewport","cullingVolume","elevationBounds","minZ","maxZ","bounds","offset","project","boundingVolume","getBoundingVolume","insideBounds","isInside","computeVisibility","childVisible","distance","distanceTo","cameraPosition","scale","height","Math","floor","log2","selected","child","getSelected","result","push","node","minX","minY","maxX","maxY","pow","extent","zRange","worldOffset","refPoints","refPointPositions","p","lngLat","originX","originY","getOSMTileIndices","resolution","projectPosition","planes","Object","values","getFrustumPlanes","map","normal","clone","negate","unitsPerMeter","distanceScales","elevationMin","elevationMax","pitch","minLng","minLat","maxLng","maxLat","topLeft","bottomRight","root","traversalParams","subViewports","length"],"mappings":"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","sourcesContent":["/* eslint-disable complexity */\nimport {\n CullingVolume,\n Plane,\n AxisAlignedBoundingBox,\n makeOrientedBoundingBoxFromPoints\n} from '@math.gl/culling';\nimport {lngLatToWorld} from '@math.gl/web-mercator';\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 = [[0.5, 0.5], [0, 0], [0, 1], [1, 0], [1, 1]]; // 4 corners and center\nconst REF_POINTS_9 = REF_POINTS_5.concat([[0, 0.5], [0.5, 0], [1, 0.5], [0.5, 1]]); // 4 corners, center and 4 mid points\nconst REF_POINTS_11 = REF_POINTS_9.concat([[0.25, 0.5], [0.75, 0.5]]); // 2 additional points on equator for top tile\n\nclass OSMNode {\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 update(params) {\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 = []) {\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]) {\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(zRange, worldOffset, project) {\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 = [];\n for (const p of refPoints) {\n const lngLat = 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\nexport function getOSMTileIndices(viewport, maxZ, zRange, bounds) {\n const project = viewport.resolution ? viewport.projectPosition : null;\n\n // Get the culling volume of the current camera\n const planes = 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.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],\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 (viewport.subViewports && viewport.subViewports.length > 1) {\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/tile-layer/tile-2d-traversal.js"],"names":["CullingVolume","Plane","AxisAlignedBoundingBox","makeOrientedBoundingBoxFromPoints","lngLatToWorld","osmTile2lngLat","TILE_SIZE","MAX_MAPS","REF_POINTS_5","REF_POINTS_9","concat","REF_POINTS_11","OSMNode","constructor","x","y","z","children","_children","update","params","viewport","cullingVolume","elevationBounds","minZ","maxZ","bounds","offset","project","boundingVolume","getBoundingVolume","insideBounds","isInside","computeVisibility","childVisible","distance","distanceTo","cameraPosition","scale","height","Math","floor","log2","selected","child","getSelected","result","push","node","minX","minY","maxX","maxY","pow","extent","zRange","worldOffset","refPoints","refPointPositions","p","lngLat","originX","originY","getOSMTileIndices","resolution","projectPosition","planes","Object","values","getFrustumPlanes","map","normal","clone","negate","unitsPerMeter","distanceScales","elevationMin","elevationMax","pitch","minLng","minLat","maxLng","maxLat","topLeft","bottomRight","root","traversalParams","subViewports","length"],"mappings":"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","sourcesContent":["/* eslint-disable complexity */\nimport {\n CullingVolume,\n Plane,\n AxisAlignedBoundingBox,\n makeOrientedBoundingBoxFromPoints\n} from '@math.gl/culling';\nimport {lngLatToWorld} from '@math.gl/web-mercator';\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 = [[0.5, 0.5], [0, 0], [0, 1], [1, 0], [1, 1]]; // 4 corners and center\nconst REF_POINTS_9 = REF_POINTS_5.concat([[0, 0.5], [0.5, 0], [1, 0.5], [0.5, 1]]); // 4 corners, center and 4 mid points\nconst REF_POINTS_11 = REF_POINTS_9.concat([[0.25, 0.5], [0.75, 0.5]]); // 2 additional points on equator for top tile\n\nclass OSMNode {\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 update(params) {\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 = []) {\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]) {\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(zRange, worldOffset, project) {\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 = [];\n for (const p of refPoints) {\n const lngLat = 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\nexport function getOSMTileIndices(viewport, maxZ, zRange, bounds) {\n const project = viewport.resolution ? viewport.projectPosition : null;\n\n // Get the culling volume of the current camera\n const planes = 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.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],\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 (viewport.subViewports && viewport.subViewports.length > 1) {\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"}
@@ -74,16 +74,18 @@ export default class TileLayer extends CompositeLayer {
74
74
  return tileset.selectedTiles.every(tile => tile.isLoaded && tile.layers && tile.layers.every(layer => layer.isLoaded));
75
75
  }
76
76
 
77
- shouldUpdateState({
78
- changeFlags
79
- }) {
77
+ shouldUpdateState(_ref) {
78
+ let {
79
+ changeFlags
80
+ } = _ref;
80
81
  return changeFlags.somethingChanged;
81
82
  }
82
83
 
83
- updateState({
84
- props,
85
- changeFlags
86
- }) {
84
+ updateState(_ref2) {
85
+ let {
86
+ props,
87
+ changeFlags
88
+ } = _ref2;
87
89
  let {
88
90
  tileset
89
91
  } = this.state;
@@ -235,14 +237,15 @@ export default class TileLayer extends CompositeLayer {
235
237
  return this.props.renderSubLayers(props);
236
238
  }
237
239
 
238
- getHighlightedObjectIndex() {
239
- return -1;
240
+ getSubLayerPropsByTile(tile) {
241
+ return null;
240
242
  }
241
243
 
242
- getPickingInfo({
243
- info,
244
- sourceLayer
245
- }) {
244
+ getPickingInfo(_ref3) {
245
+ let {
246
+ info,
247
+ sourceLayer
248
+ } = _ref3;
246
249
  info.tile = sourceLayer.props.tile;
247
250
  return info;
248
251
  }
@@ -255,7 +258,7 @@ export default class TileLayer extends CompositeLayer {
255
258
 
256
259
  renderLayers() {
257
260
  return this.state.tileset.tiles.map(tile => {
258
- const highlightedObjectIndex = this.getHighlightedObjectIndex(tile);
261
+ const subLayerProps = this.getSubLayerPropsByTile(tile);
259
262
 
260
263
  if (!tile.isLoaded && !tile.content) {} else if (!tile.layers) {
261
264
  const layers = this.renderSubLayers({ ...this.props,
@@ -266,21 +269,20 @@ export default class TileLayer extends CompositeLayer {
266
269
  });
267
270
  tile.layers = flatten(layers, Boolean).map(layer => layer.clone({
268
271
  tile,
269
- highlightedObjectIndex
270
- }));
271
- } else if (tile.layers[0] && tile.layers[0].props.highlightedObjectIndex !== highlightedObjectIndex) {
272
- tile.layers = tile.layers.map(layer => layer.clone({
273
- highlightedObjectIndex
272
+ ...subLayerProps
274
273
  }));
274
+ } else if (subLayerProps && tile.layers[0] && Object.keys(subLayerProps).some(propName => tile.layers[0].props[propName] !== subLayerProps[propName])) {
275
+ tile.layers = tile.layers.map(layer => layer.clone(subLayerProps));
275
276
  }
276
277
 
277
278
  return tile.layers;
278
279
  });
279
280
  }
280
281
 
281
- filterSubLayer({
282
- layer
283
- }) {
282
+ filterSubLayer(_ref4) {
283
+ let {
284
+ layer
285
+ } = _ref4;
284
286
  return layer.props.tile.isVisible;
285
287
  }
286
288
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tile-layer/tile-layer.js"],"names":["CompositeLayer","_flatten","flatten","GeoJsonLayer","Tileset2D","STRATEGY_DEFAULT","urlType","getURLFromTemplate","defaultProps","data","dataComparator","equals","renderSubLayers","type","value","props","compare","getTileData","optional","onViewportLoad","onTileLoad","tile","onTileUnload","onTileError","err","console","error","extent","tileSize","maxZoom","minZoom","maxCacheSize","maxCacheByteSize","refinementStrategy","zRange","maxRequests","zoomOffset","TileLayer","initializeState","state","tileset","isLoaded","finalizeState","finalize","selectedTiles","every","layers","layer","shouldUpdateState","changeFlags","somethingChanged","updateState","propsChanged","propsOrDataChanged","updateTriggersChanged","dataChanged","all","_getTilesetOptions","setState","setOptions","reloadAll","tiles","forEach","_updateTileset","bind","_onTileLoad","_onTileError","_onTileUnload","modelMatrix","frameNumber","update","context","viewport","loadingStateChanged","tilesetChanged","_onViewportLoad","isVisible","setNeedsUpdate","fetch","signal","url","propName","getHighlightedObjectIndex","getPickingInfo","info","sourceLayer","_updateAutoHighlight","updateAutoHighlight","renderLayers","map","highlightedObjectIndex","content","id","x","y","z","_offset","Boolean","clone","filterSubLayer","layerName"],"mappings":"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","sourcesContent":["import {CompositeLayer, _flatten as flatten} from '@deck.gl/core';\nimport {GeoJsonLayer} from '@deck.gl/layers';\n\nimport Tileset2D, {STRATEGY_DEFAULT} from './tileset-2d';\nimport {urlType, getURLFromTemplate} from './utils';\n\nconst defaultProps = {\n data: [],\n dataComparator: urlType.equals,\n renderSubLayers: {type: 'function', value: props => new GeoJsonLayer(props), compare: false},\n getTileData: {type: 'function', optional: true, value: null, compare: false},\n // TODO - change to onViewportLoad to align with Tile3DLayer\n onViewportLoad: {type: 'function', optional: true, value: null, compare: false},\n onTileLoad: {type: 'function', value: tile => {}, compare: false},\n onTileUnload: {type: 'function', value: tile => {}, compare: false},\n // eslint-disable-next-line\n onTileError: {type: 'function', value: err => console.error(err), compare: false},\n extent: {type: 'array', optional: true, value: null, compare: true},\n tileSize: 512,\n maxZoom: null,\n minZoom: 0,\n maxCacheSize: null,\n maxCacheByteSize: null,\n refinementStrategy: STRATEGY_DEFAULT,\n zRange: null,\n maxRequests: 6,\n zoomOffset: 0\n};\n\nexport default class TileLayer extends CompositeLayer {\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() {\n const {tileset} = this.state;\n return tileset.selectedTiles.every(\n tile => tile.isLoaded && tile.layers && tile.layers.every(layer => layer.isLoaded)\n );\n }\n\n shouldUpdateState({changeFlags}) {\n return changeFlags.somethingChanged;\n }\n\n updateState({props, changeFlags}) {\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 Tileset2D(this._getTilesetOptions(props));\n this.setState({tileset});\n } else if (propsChanged) {\n tileset.setOptions(this._getTilesetOptions(props));\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(props) {\n const {\n tileSize,\n maxCacheSize,\n maxCacheByteSize,\n refinementStrategy,\n extent,\n maxZoom,\n minZoom,\n maxRequests,\n zoomOffset\n } = 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 _updateTileset() {\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() {\n const {tileset} = this.state;\n const {onViewportLoad} = this.props;\n\n if (onViewportLoad) {\n onViewportLoad(tileset.selectedTiles);\n }\n }\n\n _onTileLoad(tile) {\n this.props.onTileLoad(tile);\n tile.layers = null;\n\n if (tile.isVisible) {\n this.setNeedsUpdate();\n }\n }\n\n _onTileError(error, tile) {\n this.props.onTileError(error);\n tile.layers = null;\n\n if (tile.isVisible) {\n this.setNeedsUpdate();\n }\n }\n\n _onTileUnload(tile) {\n this.props.onTileUnload(tile);\n }\n\n // Methods for subclass to override\n\n getTileData(tile) {\n const {data, getTileData, fetch} = this.props;\n const {signal} = tile;\n\n tile.url = getURLFromTemplate(data, tile);\n\n if (getTileData) {\n return getTileData(tile);\n }\n if (tile.url) {\n return fetch(tile.url, {propName: 'data', layer: this, signal});\n }\n return null;\n }\n\n renderSubLayers(props) {\n return this.props.renderSubLayers(props);\n }\n\n getHighlightedObjectIndex() {\n return -1;\n }\n\n getPickingInfo({info, sourceLayer}) {\n info.tile = sourceLayer.props.tile;\n return info;\n }\n\n _updateAutoHighlight(info) {\n if (info.sourceLayer) {\n info.sourceLayer.updateAutoHighlight(info);\n }\n }\n\n renderLayers() {\n return this.state.tileset.tiles.map(tile => {\n const highlightedObjectIndex = this.getHighlightedObjectIndex(tile);\n // cache the rendered layer in the tile\n if (!tile.isLoaded && !tile.content) {\n // nothing to show\n } else if (!tile.layers) {\n const layers = this.renderSubLayers({\n ...this.props,\n id: `${this.id}-${tile.x}-${tile.y}-${tile.z}`,\n data: tile.content,\n _offset: 0,\n tile\n });\n tile.layers = flatten(layers, Boolean).map(layer =>\n layer.clone({\n tile,\n highlightedObjectIndex\n })\n );\n } else if (\n tile.layers[0] &&\n tile.layers[0].props.highlightedObjectIndex !== highlightedObjectIndex\n ) {\n tile.layers = tile.layers.map(layer => layer.clone({highlightedObjectIndex}));\n }\n return tile.layers;\n });\n }\n\n filterSubLayer({layer}) {\n return layer.props.tile.isVisible;\n }\n}\n\nTileLayer.layerName = 'TileLayer';\nTileLayer.defaultProps = defaultProps;\n"],"file":"tile-layer.js"}
1
+ {"version":3,"sources":["../../../src/tile-layer/tile-layer.js"],"names":["CompositeLayer","_flatten","flatten","GeoJsonLayer","Tileset2D","STRATEGY_DEFAULT","urlType","getURLFromTemplate","defaultProps","data","dataComparator","equals","renderSubLayers","type","value","props","compare","getTileData","optional","onViewportLoad","onTileLoad","tile","onTileUnload","onTileError","err","console","error","extent","tileSize","maxZoom","minZoom","maxCacheSize","maxCacheByteSize","refinementStrategy","zRange","maxRequests","zoomOffset","TileLayer","initializeState","state","tileset","isLoaded","finalizeState","finalize","selectedTiles","every","layers","layer","shouldUpdateState","changeFlags","somethingChanged","updateState","propsChanged","propsOrDataChanged","updateTriggersChanged","dataChanged","all","_getTilesetOptions","setState","setOptions","reloadAll","tiles","forEach","_updateTileset","bind","_onTileLoad","_onTileError","_onTileUnload","modelMatrix","frameNumber","update","context","viewport","loadingStateChanged","tilesetChanged","_onViewportLoad","isVisible","setNeedsUpdate","fetch","signal","url","propName","getSubLayerPropsByTile","getPickingInfo","info","sourceLayer","_updateAutoHighlight","updateAutoHighlight","renderLayers","map","subLayerProps","content","id","x","y","z","_offset","Boolean","clone","Object","keys","some","filterSubLayer","layerName"],"mappings":"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","sourcesContent":["import {CompositeLayer, _flatten as flatten} from '@deck.gl/core';\nimport {GeoJsonLayer} from '@deck.gl/layers';\n\nimport Tileset2D, {STRATEGY_DEFAULT} from './tileset-2d';\nimport {urlType, getURLFromTemplate} from './utils';\n\nconst defaultProps = {\n data: [],\n dataComparator: urlType.equals,\n renderSubLayers: {type: 'function', value: props => new GeoJsonLayer(props), compare: false},\n getTileData: {type: 'function', optional: true, value: null, compare: false},\n // TODO - change to onViewportLoad to align with Tile3DLayer\n onViewportLoad: {type: 'function', optional: true, value: null, compare: false},\n onTileLoad: {type: 'function', value: tile => {}, compare: false},\n onTileUnload: {type: 'function', value: tile => {}, compare: false},\n // eslint-disable-next-line\n onTileError: {type: 'function', value: err => console.error(err), compare: false},\n extent: {type: 'array', optional: true, value: null, compare: true},\n tileSize: 512,\n maxZoom: null,\n minZoom: 0,\n maxCacheSize: null,\n maxCacheByteSize: null,\n refinementStrategy: STRATEGY_DEFAULT,\n zRange: null,\n maxRequests: 6,\n zoomOffset: 0\n};\n\nexport default class TileLayer extends CompositeLayer {\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() {\n const {tileset} = this.state;\n return tileset.selectedTiles.every(\n tile => tile.isLoaded && tile.layers && tile.layers.every(layer => layer.isLoaded)\n );\n }\n\n shouldUpdateState({changeFlags}) {\n return changeFlags.somethingChanged;\n }\n\n updateState({props, changeFlags}) {\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 Tileset2D(this._getTilesetOptions(props));\n this.setState({tileset});\n } else if (propsChanged) {\n tileset.setOptions(this._getTilesetOptions(props));\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(props) {\n const {\n tileSize,\n maxCacheSize,\n maxCacheByteSize,\n refinementStrategy,\n extent,\n maxZoom,\n minZoom,\n maxRequests,\n zoomOffset\n } = 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 _updateTileset() {\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() {\n const {tileset} = this.state;\n const {onViewportLoad} = this.props;\n\n if (onViewportLoad) {\n onViewportLoad(tileset.selectedTiles);\n }\n }\n\n _onTileLoad(tile) {\n this.props.onTileLoad(tile);\n tile.layers = null;\n\n if (tile.isVisible) {\n this.setNeedsUpdate();\n }\n }\n\n _onTileError(error, tile) {\n this.props.onTileError(error);\n tile.layers = null;\n\n if (tile.isVisible) {\n this.setNeedsUpdate();\n }\n }\n\n _onTileUnload(tile) {\n this.props.onTileUnload(tile);\n }\n\n // Methods for subclass to override\n\n getTileData(tile) {\n const {data, getTileData, fetch} = this.props;\n const {signal} = tile;\n\n tile.url = getURLFromTemplate(data, tile);\n\n if (getTileData) {\n return getTileData(tile);\n }\n if (tile.url) {\n return fetch(tile.url, {propName: 'data', layer: this, signal});\n }\n return null;\n }\n\n renderSubLayers(props) {\n return this.props.renderSubLayers(props);\n }\n\n getSubLayerPropsByTile(tile) {\n return null;\n }\n\n getPickingInfo({info, sourceLayer}) {\n info.tile = sourceLayer.props.tile;\n return info;\n }\n\n _updateAutoHighlight(info) {\n if (info.sourceLayer) {\n info.sourceLayer.updateAutoHighlight(info);\n }\n }\n\n renderLayers() {\n return this.state.tileset.tiles.map(tile => {\n const subLayerProps = this.getSubLayerPropsByTile(tile);\n // cache the rendered layer in the tile\n if (!tile.isLoaded && !tile.content) {\n // nothing to show\n } else if (!tile.layers) {\n const layers = this.renderSubLayers({\n ...this.props,\n id: `${this.id}-${tile.x}-${tile.y}-${tile.z}`,\n data: tile.content,\n _offset: 0,\n tile\n });\n tile.layers = flatten(layers, Boolean).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}) {\n return layer.props.tile.isVisible;\n }\n}\n\nTileLayer.layerName = 'TileLayer';\nTileLayer.defaultProps = defaultProps;\n"],"file":"tile-layer.js"}
@@ -88,10 +88,11 @@ export default class Tileset2D {
88
88
  }
89
89
  }
90
90
 
91
- update(viewport, {
92
- zRange,
93
- modelMatrix
94
- } = {}) {
91
+ update(viewport) {
92
+ let {
93
+ zRange,
94
+ modelMatrix
95
+ } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
95
96
  const modelMatrixAsMatrix4 = new Matrix4(modelMatrix);
96
97
  const isModelMatrixNew = !modelMatrixAsMatrix4.equals(this._modelMatrix);
97
98
 
@@ -130,14 +131,15 @@ export default class Tileset2D {
130
131
  return this._frameNumber;
131
132
  }
132
133
 
133
- getTileIndices({
134
- viewport,
135
- maxZoom,
136
- minZoom,
137
- zRange,
138
- modelMatrix,
139
- modelMatrixInverse
140
- }) {
134
+ getTileIndices(_ref) {
135
+ let {
136
+ viewport,
137
+ maxZoom,
138
+ minZoom,
139
+ zRange,
140
+ modelMatrix,
141
+ modelMatrixInverse
142
+ } = _ref;
141
143
  const {
142
144
  tileSize,
143
145
  extent,
@@ -156,11 +158,12 @@ export default class Tileset2D {
156
158
  });
157
159
  }
158
160
 
159
- getTileMetadata({
160
- x,
161
- y,
162
- z
163
- }) {
161
+ getTileMetadata(_ref2) {
162
+ let {
163
+ x,
164
+ y,
165
+ z
166
+ } = _ref2;
164
167
  const {
165
168
  tileSize
166
169
  } = this.opts;
@@ -301,11 +304,12 @@ export default class Tileset2D {
301
304
  }
302
305
  }
303
306
 
304
- _getTile({
305
- x,
306
- y,
307
- z
308
- }, create) {
307
+ _getTile(_ref3, create) {
308
+ let {
309
+ x,
310
+ y,
311
+ z
312
+ } = _ref3;
309
313
  const tileId = "".concat(x, ",").concat(y, ",").concat(z);
310
314
 
311
315
  let tile = this._cache.get(tileId);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tile-layer/tileset-2d.js"],"names":["Tile2DHeader","getTileIndices","tileToBoundingBox","RequestScheduler","Matrix4","TILE_STATE_UNKNOWN","TILE_STATE_VISIBLE","TILE_STATE_PLACEHOLDER","TILE_STATE_HIDDEN","TILE_STATE_SELECTED","STRATEGY_NEVER","STRATEGY_REPLACE","STRATEGY_DEFAULT","DEFAULT_CACHE_SCALE","Tileset2D","constructor","opts","onTileLoad","tile","maxCacheByteSize","_cacheByteSize","byteLength","_resizeCache","_requestScheduler","maxRequests","throttleRequests","_cache","Map","_tiles","_dirty","_viewport","_selectedTiles","_frameNumber","setOptions","tiles","selectedTiles","isLoaded","every","Object","assign","Number","isFinite","maxZoom","_maxZoom","Math","floor","minZoom","_minZoom","ceil","finalize","values","isLoading","abort","clear","reloadAll","tileId","keys","get","includes","delete","setNeedsReload","update","viewport","zRange","modelMatrix","modelMatrixAsMatrix4","isModelMatrixNew","equals","_modelMatrix","_modelMatrixInverse","clone","invert","tileIndices","modelMatrixInverse","map","index","_getTile","_rebuildTree","changed","updateTileStates","tileSize","extent","zoomOffset","getTileMetadata","x","y","z","bbox","getParentIndex","tileIndex","_updateTileStates","abortCandidates","ongoingRequestCount","isVisible","Boolean","state","isSelected","push","length","shift","parent","children","_getNearestAncestor","refinementStrategy","getPlaceholderInAncestors","needsPlaceholder","getPlaceholderInChildren","maxCacheSize","Infinity","overflown","size","onTileUnload","Array","from","sort","t1","t2","create","needsReload","set","loadData","getData","getTileData","requestScheduler","onLoad","onError","onTileError","t","max","child"],"mappings":"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","sourcesContent":["import Tile2DHeader from './tile-2d-header';\nimport {getTileIndices, tileToBoundingBox} from './utils';\nimport {RequestScheduler} from '@loaders.gl/loader-utils';\nimport {Matrix4} from 'math.gl';\n\nconst TILE_STATE_UNKNOWN = 0;\nconst TILE_STATE_VISIBLE = 1;\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 */\nconst TILE_STATE_PLACEHOLDER = 3;\nconst TILE_STATE_HIDDEN = 4;\n// tiles that should be displayed in the current viewport\nconst TILE_STATE_SELECTED = 5;\n\nexport const STRATEGY_NEVER = 'never';\nexport const STRATEGY_REPLACE = 'no-overlap';\nexport const STRATEGY_DEFAULT = 'best-available';\n\nconst DEFAULT_CACHE_SCALE = 5;\n\n/**\n * Manages loading and purging of tiles data. This class caches recently visited tiles\n * and only create new tiles if they are present.\n */\n\nexport default class Tileset2D {\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) {\n this.opts = 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: 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.setOptions(opts);\n }\n\n /* Public API */\n get tiles() {\n return this._tiles;\n }\n\n get selectedTiles() {\n return this._selectedTiles;\n }\n\n get isLoaded() {\n return this._selectedTiles.every(tile => tile.isLoaded);\n }\n\n setOptions(opts) {\n Object.assign(this.opts, opts);\n if (Number.isFinite(opts.maxZoom)) {\n this._maxZoom = Math.floor(opts.maxZoom);\n }\n if (Number.isFinite(opts.minZoom)) {\n this._minZoom = Math.ceil(opts.minZoom);\n }\n }\n\n // Clean up any outstanding tile requests.\n finalize() {\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() {\n for (const tileId of this._cache.keys()) {\n const tile = this._cache.get(tileId);\n if (!this._selectedTiles.includes(tile)) {\n this._cache.delete(tileId);\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 * @param {*} viewport\n * @param {*} onUpdate\n * @param {*} modelMatrix\n */\n update(viewport, {zRange, modelMatrix} = {}) {\n const modelMatrixAsMatrix4 = new Matrix4(modelMatrix);\n const isModelMatrixNew = !modelMatrixAsMatrix4.equals(this._modelMatrix);\n if (!viewport.equals(this._viewport) || isModelMatrixNew) {\n if (isModelMatrixNew) {\n this._modelMatrixInverse = modelMatrix && modelMatrixAsMatrix4.clone().invert();\n this._modelMatrix = modelMatrix && modelMatrixAsMatrix4;\n }\n this._viewport = viewport;\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 }\n\n // Update tile states\n const changed = this.updateTileStates();\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 /* Public interface for subclassing */\n\n // Returns array of {x, y, z}\n getTileIndices({viewport, maxZoom, minZoom, zRange, modelMatrix, modelMatrixInverse}) {\n const {tileSize, extent, zoomOffset} = this.opts;\n return getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n tileSize,\n extent,\n modelMatrix,\n modelMatrixInverse,\n zoomOffset\n });\n }\n\n // Add custom metadata to tiles\n getTileMetadata({x, y, z}) {\n const {tileSize} = this.opts;\n return {bbox: tileToBoundingBox(this._viewport, x, y, z, tileSize)};\n }\n\n // Returns {x, y, z} of the parent tile\n getParentIndex(tileIndex) {\n // Perf: mutate the input object to avoid GC\n tileIndex.x = Math.floor(tileIndex.x / 2);\n tileIndex.y = Math.floor(tileIndex.y / 2);\n tileIndex.z -= 1;\n return tileIndex;\n }\n\n // Returns true if any tile's visibility changed\n updateTileStates() {\n this._updateTileStates(this.selectedTiles);\n\n const {maxRequests} = this.opts;\n\n const abortCandidates = [];\n let ongoingRequestCount = 0;\n let changed = false;\n for (const tile of this._cache.values()) {\n const isVisible = Boolean(tile.state & TILE_STATE_VISIBLE);\n if (tile.isVisible !== isVisible) {\n changed = true;\n tile.isVisible = isVisible;\n }\n\n // isSelected used in request scheduler\n tile.isSelected = tile.state === TILE_STATE_SELECTED;\n\n // Keep track of all the ongoing requests\n if (tile.isLoading) {\n ongoingRequestCount++;\n if (!tile.isSelected) {\n abortCandidates.push(tile);\n }\n }\n }\n\n if (maxRequests > 0) {\n while (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 return changed;\n }\n\n /* Private methods */\n\n // This needs to be called every time some tiles have been added/removed from cache\n _rebuildTree() {\n const {_cache} = this;\n\n // Reset states\n for (const tile of _cache.values()) {\n tile.parent = null;\n tile.children.length = 0;\n }\n\n // Rebuild tree\n for (const tile of _cache.values()) {\n const parent = this._getNearestAncestor(tile.x, tile.y, tile.z);\n tile.parent = parent;\n if (parent) {\n parent.children.push(tile);\n }\n }\n }\n\n // A selected tile is always visible.\n // Never show two overlapping tiles.\n // If a selected tile is loading, try showing a cached ancester with the closest z\n // If a selected tile is loading, and no ancester is shown - try showing cached\n // descendants with the closest z\n _updateTileStates(selectedTiles) {\n const {_cache} = this;\n const refinementStrategy = this.opts.refinementStrategy || STRATEGY_DEFAULT;\n\n // Reset states\n for (const tile of _cache.values()) {\n tile.state = TILE_STATE_UNKNOWN;\n }\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\n for (const tile of selectedTiles) {\n tile.state = TILE_STATE_SELECTED;\n }\n\n if (refinementStrategy === STRATEGY_NEVER) {\n return;\n }\n for (const tile of selectedTiles) {\n getPlaceholderInAncestors(tile, refinementStrategy);\n }\n for (const tile of selectedTiles) {\n if (needsPlaceholder(tile)) {\n getPlaceholderInChildren(tile);\n }\n }\n }\n\n /**\n * Clear tiles that are not visible when the cache is full\n */\n /* eslint-disable complexity */\n _resizeCache() {\n const {_cache, opts} = this;\n\n const maxCacheSize =\n opts.maxCacheSize ||\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 [tileId, tile] of _cache) {\n if (!tile.isVisible) {\n // delete tile\n this._cacheByteSize -= opts.maxCacheByteSize ? tile.byteLength : 0;\n _cache.delete(tileId);\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 this._tiles = Array.from(this._cache.values())\n // sort by zoom level so that smaller tiles are displayed on top\n .sort((t1, t2) => t1.z - t2.z);\n\n this._dirty = false;\n }\n }\n /* eslint-enable complexity */\n\n _getTile({x, y, z}, create) {\n const tileId = `${x},${y},${z}`;\n let tile = this._cache.get(tileId);\n let needsReload = false;\n\n if (!tile && create) {\n tile = new Tile2DHeader({x, y, z});\n Object.assign(tile, this.getTileMetadata(tile));\n needsReload = true;\n this._cache.set(tileId, tile);\n this._dirty = true;\n } else if (tile && tile.needsReload) {\n needsReload = true;\n }\n if (needsReload) {\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(x, y, z) {\n const {_minZoom = 0} = this;\n let index = {x, y, z};\n\n while (index.z > _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// A selected tile needs placeholder from its children if\n// - it is not loaded\n// - none of its ancestors is visible and loaded\nfunction needsPlaceholder(tile) {\n let t = tile;\n while (t) {\n if (t.state & (TILE_STATE_VISIBLE === 0)) {\n return true;\n }\n if (t.isLoaded) {\n return false;\n }\n t = t.parent;\n }\n return true;\n}\n\nfunction getPlaceholderInAncestors(tile, refinementStrategy) {\n let parent;\n let state = TILE_STATE_PLACEHOLDER;\n while ((parent = tile.parent)) {\n if (tile.isLoaded) {\n // If a tile is loaded, mark all its ancestors as hidden\n state = TILE_STATE_HIDDEN;\n if (refinementStrategy === STRATEGY_DEFAULT) {\n return;\n }\n }\n parent.state = Math.max(parent.state, state);\n tile = parent;\n }\n}\n\n// Recursively set children as placeholder\nfunction getPlaceholderInChildren(tile) {\n for (const child of tile.children) {\n child.state = Math.max(child.state, TILE_STATE_PLACEHOLDER);\n if (!child.isLoaded) {\n getPlaceholderInChildren(child);\n }\n }\n}\n"],"file":"tileset-2d.js"}
1
+ {"version":3,"sources":["../../../src/tile-layer/tileset-2d.js"],"names":["Tile2DHeader","getTileIndices","tileToBoundingBox","RequestScheduler","Matrix4","TILE_STATE_UNKNOWN","TILE_STATE_VISIBLE","TILE_STATE_PLACEHOLDER","TILE_STATE_HIDDEN","TILE_STATE_SELECTED","STRATEGY_NEVER","STRATEGY_REPLACE","STRATEGY_DEFAULT","DEFAULT_CACHE_SCALE","Tileset2D","constructor","opts","onTileLoad","tile","maxCacheByteSize","_cacheByteSize","byteLength","_resizeCache","_requestScheduler","maxRequests","throttleRequests","_cache","Map","_tiles","_dirty","_viewport","_selectedTiles","_frameNumber","setOptions","tiles","selectedTiles","isLoaded","every","Object","assign","Number","isFinite","maxZoom","_maxZoom","Math","floor","minZoom","_minZoom","ceil","finalize","values","isLoading","abort","clear","reloadAll","tileId","keys","get","includes","delete","setNeedsReload","update","viewport","zRange","modelMatrix","modelMatrixAsMatrix4","isModelMatrixNew","equals","_modelMatrix","_modelMatrixInverse","clone","invert","tileIndices","modelMatrixInverse","map","index","_getTile","_rebuildTree","changed","updateTileStates","tileSize","extent","zoomOffset","getTileMetadata","x","y","z","bbox","getParentIndex","tileIndex","_updateTileStates","abortCandidates","ongoingRequestCount","isVisible","Boolean","state","isSelected","push","length","shift","parent","children","_getNearestAncestor","refinementStrategy","getPlaceholderInAncestors","needsPlaceholder","getPlaceholderInChildren","maxCacheSize","Infinity","overflown","size","onTileUnload","Array","from","sort","t1","t2","create","needsReload","set","loadData","getData","getTileData","requestScheduler","onLoad","onError","onTileError","t","max","child"],"mappings":"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","sourcesContent":["import Tile2DHeader from './tile-2d-header';\nimport {getTileIndices, tileToBoundingBox} from './utils';\nimport {RequestScheduler} from '@loaders.gl/loader-utils';\nimport {Matrix4} from 'math.gl';\n\nconst TILE_STATE_UNKNOWN = 0;\nconst TILE_STATE_VISIBLE = 1;\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 */\nconst TILE_STATE_PLACEHOLDER = 3;\nconst TILE_STATE_HIDDEN = 4;\n// tiles that should be displayed in the current viewport\nconst TILE_STATE_SELECTED = 5;\n\nexport const STRATEGY_NEVER = 'never';\nexport const STRATEGY_REPLACE = 'no-overlap';\nexport const STRATEGY_DEFAULT = 'best-available';\n\nconst DEFAULT_CACHE_SCALE = 5;\n\n/**\n * Manages loading and purging of tiles data. This class caches recently visited tiles\n * and only create new tiles if they are present.\n */\n\nexport default class Tileset2D {\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) {\n this.opts = 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: 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.setOptions(opts);\n }\n\n /* Public API */\n get tiles() {\n return this._tiles;\n }\n\n get selectedTiles() {\n return this._selectedTiles;\n }\n\n get isLoaded() {\n return this._selectedTiles.every(tile => tile.isLoaded);\n }\n\n setOptions(opts) {\n Object.assign(this.opts, opts);\n if (Number.isFinite(opts.maxZoom)) {\n this._maxZoom = Math.floor(opts.maxZoom);\n }\n if (Number.isFinite(opts.minZoom)) {\n this._minZoom = Math.ceil(opts.minZoom);\n }\n }\n\n // Clean up any outstanding tile requests.\n finalize() {\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() {\n for (const tileId of this._cache.keys()) {\n const tile = this._cache.get(tileId);\n if (!this._selectedTiles.includes(tile)) {\n this._cache.delete(tileId);\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 * @param {*} viewport\n * @param {*} onUpdate\n * @param {*} modelMatrix\n */\n update(viewport, {zRange, modelMatrix} = {}) {\n const modelMatrixAsMatrix4 = new Matrix4(modelMatrix);\n const isModelMatrixNew = !modelMatrixAsMatrix4.equals(this._modelMatrix);\n if (!viewport.equals(this._viewport) || isModelMatrixNew) {\n if (isModelMatrixNew) {\n this._modelMatrixInverse = modelMatrix && modelMatrixAsMatrix4.clone().invert();\n this._modelMatrix = modelMatrix && modelMatrixAsMatrix4;\n }\n this._viewport = viewport;\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 }\n\n // Update tile states\n const changed = this.updateTileStates();\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 /* Public interface for subclassing */\n\n // Returns array of {x, y, z}\n getTileIndices({viewport, maxZoom, minZoom, zRange, modelMatrix, modelMatrixInverse}) {\n const {tileSize, extent, zoomOffset} = this.opts;\n return getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n tileSize,\n extent,\n modelMatrix,\n modelMatrixInverse,\n zoomOffset\n });\n }\n\n // Add custom metadata to tiles\n getTileMetadata({x, y, z}) {\n const {tileSize} = this.opts;\n return {bbox: tileToBoundingBox(this._viewport, x, y, z, tileSize)};\n }\n\n // Returns {x, y, z} of the parent tile\n getParentIndex(tileIndex) {\n // Perf: mutate the input object to avoid GC\n tileIndex.x = Math.floor(tileIndex.x / 2);\n tileIndex.y = Math.floor(tileIndex.y / 2);\n tileIndex.z -= 1;\n return tileIndex;\n }\n\n // Returns true if any tile's visibility changed\n updateTileStates() {\n this._updateTileStates(this.selectedTiles);\n\n const {maxRequests} = this.opts;\n\n const abortCandidates = [];\n let ongoingRequestCount = 0;\n let changed = false;\n for (const tile of this._cache.values()) {\n const isVisible = Boolean(tile.state & TILE_STATE_VISIBLE);\n if (tile.isVisible !== isVisible) {\n changed = true;\n tile.isVisible = isVisible;\n }\n\n // isSelected used in request scheduler\n tile.isSelected = tile.state === TILE_STATE_SELECTED;\n\n // Keep track of all the ongoing requests\n if (tile.isLoading) {\n ongoingRequestCount++;\n if (!tile.isSelected) {\n abortCandidates.push(tile);\n }\n }\n }\n\n if (maxRequests > 0) {\n while (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 return changed;\n }\n\n /* Private methods */\n\n // This needs to be called every time some tiles have been added/removed from cache\n _rebuildTree() {\n const {_cache} = this;\n\n // Reset states\n for (const tile of _cache.values()) {\n tile.parent = null;\n tile.children.length = 0;\n }\n\n // Rebuild tree\n for (const tile of _cache.values()) {\n const parent = this._getNearestAncestor(tile.x, tile.y, tile.z);\n tile.parent = parent;\n if (parent) {\n parent.children.push(tile);\n }\n }\n }\n\n // A selected tile is always visible.\n // Never show two overlapping tiles.\n // If a selected tile is loading, try showing a cached ancester with the closest z\n // If a selected tile is loading, and no ancester is shown - try showing cached\n // descendants with the closest z\n _updateTileStates(selectedTiles) {\n const {_cache} = this;\n const refinementStrategy = this.opts.refinementStrategy || STRATEGY_DEFAULT;\n\n // Reset states\n for (const tile of _cache.values()) {\n tile.state = TILE_STATE_UNKNOWN;\n }\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\n for (const tile of selectedTiles) {\n tile.state = TILE_STATE_SELECTED;\n }\n\n if (refinementStrategy === STRATEGY_NEVER) {\n return;\n }\n for (const tile of selectedTiles) {\n getPlaceholderInAncestors(tile, refinementStrategy);\n }\n for (const tile of selectedTiles) {\n if (needsPlaceholder(tile)) {\n getPlaceholderInChildren(tile);\n }\n }\n }\n\n /**\n * Clear tiles that are not visible when the cache is full\n */\n /* eslint-disable complexity */\n _resizeCache() {\n const {_cache, opts} = this;\n\n const maxCacheSize =\n opts.maxCacheSize ||\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 [tileId, tile] of _cache) {\n if (!tile.isVisible) {\n // delete tile\n this._cacheByteSize -= opts.maxCacheByteSize ? tile.byteLength : 0;\n _cache.delete(tileId);\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 this._tiles = Array.from(this._cache.values())\n // sort by zoom level so that smaller tiles are displayed on top\n .sort((t1, t2) => t1.z - t2.z);\n\n this._dirty = false;\n }\n }\n /* eslint-enable complexity */\n\n _getTile({x, y, z}, create) {\n const tileId = `${x},${y},${z}`;\n let tile = this._cache.get(tileId);\n let needsReload = false;\n\n if (!tile && create) {\n tile = new Tile2DHeader({x, y, z});\n Object.assign(tile, this.getTileMetadata(tile));\n needsReload = true;\n this._cache.set(tileId, tile);\n this._dirty = true;\n } else if (tile && tile.needsReload) {\n needsReload = true;\n }\n if (needsReload) {\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(x, y, z) {\n const {_minZoom = 0} = this;\n let index = {x, y, z};\n\n while (index.z > _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// A selected tile needs placeholder from its children if\n// - it is not loaded\n// - none of its ancestors is visible and loaded\nfunction needsPlaceholder(tile) {\n let t = tile;\n while (t) {\n if (t.state & (TILE_STATE_VISIBLE === 0)) {\n return true;\n }\n if (t.isLoaded) {\n return false;\n }\n t = t.parent;\n }\n return true;\n}\n\nfunction getPlaceholderInAncestors(tile, refinementStrategy) {\n let parent;\n let state = TILE_STATE_PLACEHOLDER;\n while ((parent = tile.parent)) {\n if (tile.isLoaded) {\n // If a tile is loaded, mark all its ancestors as hidden\n state = TILE_STATE_HIDDEN;\n if (refinementStrategy === STRATEGY_DEFAULT) {\n return;\n }\n }\n parent.state = Math.max(parent.state, state);\n tile = parent;\n }\n}\n\n// Recursively set children as placeholder\nfunction getPlaceholderInChildren(tile) {\n for (const child of tile.children) {\n child.state = Math.max(child.state, TILE_STATE_PLACEHOLDER);\n if (!child.isLoaded) {\n getPlaceholderInChildren(child);\n }\n }\n}\n"],"file":"tileset-2d.js"}
@@ -51,7 +51,7 @@ export function getURLFromTemplate(template, properties) {
51
51
  y,
52
52
  z
53
53
  } = properties;
54
- return template.replace('{x}', x).replace('{y}', y).replace('{z}', z).replace('{-y}', Math.pow(2, z) - y - 1);
54
+ return template.replace(/\{x\}/g, x).replace(/\{y\}/g, y).replace(/\{z\}/g, z).replace(/\{-y\}/g, Math.pow(2, z) - y - 1);
55
55
  }
56
56
 
57
57
  function getBoundingBox(viewport, zRange, extent) {
@@ -103,7 +103,9 @@ function tile2XY(x, y, z, tileSize) {
103
103
  return [x / scale * TILE_SIZE, y / scale * TILE_SIZE];
104
104
  }
105
105
 
106
- export function tileToBoundingBox(viewport, x, y, z, tileSize = TILE_SIZE) {
106
+ export function tileToBoundingBox(viewport, x, y, z) {
107
+ let tileSize = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : TILE_SIZE;
108
+
107
109
  if (viewport.isGeospatial) {
108
110
  const [west, north] = osmTile2lngLat(x, y, z);
109
111
  const [east, south] = osmTile2lngLat(x + 1, y + 1, z);
@@ -144,17 +146,18 @@ function getIdentityTileIndices(viewport, z, tileSize, extent, modelMatrixInvers
144
146
  return indices;
145
147
  }
146
148
 
147
- export function getTileIndices({
148
- viewport,
149
- maxZoom,
150
- minZoom,
151
- zRange,
152
- extent,
153
- tileSize = TILE_SIZE,
154
- modelMatrix,
155
- modelMatrixInverse,
156
- zoomOffset = 0
157
- }) {
149
+ export function getTileIndices(_ref) {
150
+ let {
151
+ viewport,
152
+ maxZoom,
153
+ minZoom,
154
+ zRange,
155
+ extent,
156
+ tileSize = TILE_SIZE,
157
+ modelMatrix,
158
+ modelMatrixInverse,
159
+ zoomOffset = 0
160
+ } = _ref;
158
161
  let z = viewport.isGeospatial ? Math.round(viewport.zoom + Math.log2(TILE_SIZE / tileSize)) + zoomOffset : Math.ceil(viewport.zoom) + zoomOffset;
159
162
 
160
163
  if (Number.isFinite(minZoom) && z < minZoom) {