@deck.gl/geo-layers 8.7.0-beta.1 → 8.7.0-beta.5
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.
- package/dist/dist.dev.js +38 -24
- package/dist/es5/tile-layer/tileset-2d.js +19 -2
- package/dist/es5/tile-layer/tileset-2d.js.map +1 -1
- package/dist/esm/tile-layer/tileset-2d.js +14 -2
- package/dist/esm/tile-layer/tileset-2d.js.map +1 -1
- package/dist.min.js +1 -1
- package/package.json +5 -5
- package/src/tile-layer/tileset-2d.js +14 -2
package/dist/dist.dev.js
CHANGED
|
@@ -52545,9 +52545,9 @@ function assert(condition, message) {
|
|
|
52545
52545
|
"use strict";
|
|
52546
52546
|
__webpack_require__.r(__webpack_exports__);
|
|
52547
52547
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return fitBounds; });
|
|
52548
|
-
/* harmony import */ var
|
|
52549
|
-
/* harmony import */ var
|
|
52550
|
-
/* harmony import */ var
|
|
52548
|
+
/* harmony import */ var _assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./assert */ "../../node_modules/@math.gl/web-mercator/dist/esm/assert.js");
|
|
52549
|
+
/* harmony import */ var _math_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math-utils */ "../../node_modules/@math.gl/web-mercator/dist/esm/math-utils.js");
|
|
52550
|
+
/* harmony import */ var _web_mercator_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./web-mercator-utils */ "../../node_modules/@math.gl/web-mercator/dist/esm/web-mercator-utils.js");
|
|
52551
52551
|
|
|
52552
52552
|
|
|
52553
52553
|
|
|
@@ -52571,29 +52571,22 @@ function fitBounds({
|
|
|
52571
52571
|
right: p
|
|
52572
52572
|
};
|
|
52573
52573
|
} else {
|
|
52574
|
-
Object(
|
|
52574
|
+
Object(_assert__WEBPACK_IMPORTED_MODULE_0__["default"])(Number.isFinite(padding.top) && Number.isFinite(padding.bottom) && Number.isFinite(padding.left) && Number.isFinite(padding.right));
|
|
52575
52575
|
}
|
|
52576
52576
|
|
|
52577
|
-
const
|
|
52578
|
-
|
|
52579
|
-
height,
|
|
52580
|
-
longitude: 0,
|
|
52581
|
-
latitude: 0,
|
|
52582
|
-
zoom: 0
|
|
52583
|
-
});
|
|
52584
|
-
const nw = viewport.project([west, north]);
|
|
52585
|
-
const se = viewport.project([east, south]);
|
|
52577
|
+
const nw = Object(_web_mercator_utils__WEBPACK_IMPORTED_MODULE_2__["lngLatToWorld"])([west, Object(_math_utils__WEBPACK_IMPORTED_MODULE_1__["clamp"])(north, -_web_mercator_utils__WEBPACK_IMPORTED_MODULE_2__["MAX_LATITUDE"], _web_mercator_utils__WEBPACK_IMPORTED_MODULE_2__["MAX_LATITUDE"])]);
|
|
52578
|
+
const se = Object(_web_mercator_utils__WEBPACK_IMPORTED_MODULE_2__["lngLatToWorld"])([east, Object(_math_utils__WEBPACK_IMPORTED_MODULE_1__["clamp"])(south, -_web_mercator_utils__WEBPACK_IMPORTED_MODULE_2__["MAX_LATITUDE"], _web_mercator_utils__WEBPACK_IMPORTED_MODULE_2__["MAX_LATITUDE"])]);
|
|
52586
52579
|
const size = [Math.max(Math.abs(se[0] - nw[0]), minExtent), Math.max(Math.abs(se[1] - nw[1]), minExtent)];
|
|
52587
52580
|
const targetSize = [width - padding.left - padding.right - Math.abs(offset[0]) * 2, height - padding.top - padding.bottom - Math.abs(offset[1]) * 2];
|
|
52588
|
-
Object(
|
|
52581
|
+
Object(_assert__WEBPACK_IMPORTED_MODULE_0__["default"])(targetSize[0] > 0 && targetSize[1] > 0);
|
|
52589
52582
|
const scaleX = targetSize[0] / size[0];
|
|
52590
52583
|
const scaleY = targetSize[1] / size[1];
|
|
52591
52584
|
const offsetX = (padding.right - padding.left) / 2 / scaleX;
|
|
52592
52585
|
const offsetY = (padding.bottom - padding.top) / 2 / scaleY;
|
|
52593
52586
|
const center = [(se[0] + nw[0]) / 2 + offsetX, (se[1] + nw[1]) / 2 + offsetY];
|
|
52594
|
-
const centerLngLat =
|
|
52595
|
-
const zoom = Math.min(maxZoom,
|
|
52596
|
-
Object(
|
|
52587
|
+
const centerLngLat = Object(_web_mercator_utils__WEBPACK_IMPORTED_MODULE_2__["worldToLngLat"])(center);
|
|
52588
|
+
const zoom = Math.min(maxZoom, Object(_math_utils__WEBPACK_IMPORTED_MODULE_1__["log2"])(Math.abs(Math.min(scaleX, scaleY))));
|
|
52589
|
+
Object(_assert__WEBPACK_IMPORTED_MODULE_0__["default"])(Number.isFinite(zoom));
|
|
52597
52590
|
return {
|
|
52598
52591
|
longitude: centerLngLat[0],
|
|
52599
52592
|
latitude: centerLngLat[1],
|
|
@@ -52793,7 +52786,7 @@ function unprojectOnFarPlane(viewport, x, targetZ) {
|
|
|
52793
52786
|
/*!***************************************************************************************!*\
|
|
52794
52787
|
!*** /Users/alasarr/dev/deck.gl/node_modules/@math.gl/web-mercator/dist/esm/index.js ***!
|
|
52795
52788
|
\***************************************************************************************/
|
|
52796
|
-
/*! exports provided: default, WebMercatorViewport, getBounds, fitBounds, normalizeViewportProps, flyToViewport, getFlyToDuration, lngLatToWorld, worldToLngLat, worldToPixels, pixelsToWorld, zoomToScale, scaleToZoom, altitudeToFovy, fovyToAltitude, getMeterZoom, getDistanceScales, addMetersToLngLat, getViewMatrix, getProjectionMatrix, getProjectionParameters */
|
|
52789
|
+
/*! exports provided: default, WebMercatorViewport, getBounds, fitBounds, normalizeViewportProps, flyToViewport, getFlyToDuration, MAX_LATITUDE, lngLatToWorld, worldToLngLat, worldToPixels, pixelsToWorld, zoomToScale, scaleToZoom, altitudeToFovy, fovyToAltitude, getMeterZoom, getDistanceScales, addMetersToLngLat, getViewMatrix, getProjectionMatrix, getProjectionParameters */
|
|
52797
52790
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
52798
52791
|
|
|
52799
52792
|
"use strict";
|
|
@@ -52818,6 +52811,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
52818
52811
|
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getFlyToDuration", function() { return _fly_to_viewport__WEBPACK_IMPORTED_MODULE_4__["getFlyToDuration"]; });
|
|
52819
52812
|
|
|
52820
52813
|
/* harmony import */ var _web_mercator_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./web-mercator-utils */ "../../node_modules/@math.gl/web-mercator/dist/esm/web-mercator-utils.js");
|
|
52814
|
+
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "MAX_LATITUDE", function() { return _web_mercator_utils__WEBPACK_IMPORTED_MODULE_5__["MAX_LATITUDE"]; });
|
|
52815
|
+
|
|
52821
52816
|
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "lngLatToWorld", function() { return _web_mercator_utils__WEBPACK_IMPORTED_MODULE_5__["lngLatToWorld"]; });
|
|
52822
52817
|
|
|
52823
52818
|
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "worldToLngLat", function() { return _web_mercator_utils__WEBPACK_IMPORTED_MODULE_5__["worldToLngLat"]; });
|
|
@@ -52861,7 +52856,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
52861
52856
|
/*!********************************************************************************************!*\
|
|
52862
52857
|
!*** /Users/alasarr/dev/deck.gl/node_modules/@math.gl/web-mercator/dist/esm/math-utils.js ***!
|
|
52863
52858
|
\********************************************************************************************/
|
|
52864
|
-
/*! exports provided: createMat4, transformVector, mod, lerp, log2 */
|
|
52859
|
+
/*! exports provided: createMat4, transformVector, mod, lerp, clamp, log2 */
|
|
52865
52860
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
52866
52861
|
|
|
52867
52862
|
"use strict";
|
|
@@ -52870,6 +52865,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
52870
52865
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "transformVector", function() { return transformVector; });
|
|
52871
52866
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mod", function() { return mod; });
|
|
52872
52867
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lerp", function() { return lerp; });
|
|
52868
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clamp", function() { return clamp; });
|
|
52873
52869
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "log2", function() { return log2; });
|
|
52874
52870
|
/* harmony import */ var gl_matrix_vec4__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! gl-matrix/vec4 */ "../../node_modules/gl-matrix/esm/vec4.js");
|
|
52875
52871
|
|
|
@@ -52888,6 +52884,9 @@ function mod(value, divisor) {
|
|
|
52888
52884
|
function lerp(start, end, step) {
|
|
52889
52885
|
return step * end + (1 - step) * start;
|
|
52890
52886
|
}
|
|
52887
|
+
function clamp(x, min, max) {
|
|
52888
|
+
return x < min ? min : x > max ? max : x;
|
|
52889
|
+
}
|
|
52891
52890
|
|
|
52892
52891
|
function ieLog2(x) {
|
|
52893
52892
|
return Math.log(x) * Math.LOG2E;
|
|
@@ -52968,11 +52967,12 @@ function normalizeViewportProps({
|
|
|
52968
52967
|
/*!****************************************************************************************************!*\
|
|
52969
52968
|
!*** /Users/alasarr/dev/deck.gl/node_modules/@math.gl/web-mercator/dist/esm/web-mercator-utils.js ***!
|
|
52970
52969
|
\****************************************************************************************************/
|
|
52971
|
-
/*! exports provided: DEFAULT_ALTITUDE, zoomToScale, scaleToZoom, lngLatToWorld, worldToLngLat, getMeterZoom, getDistanceScales, addMetersToLngLat, getViewMatrix, getProjectionParameters, getProjectionMatrix, altitudeToFovy, fovyToAltitude, worldToPixels, pixelsToWorld */
|
|
52970
|
+
/*! exports provided: MAX_LATITUDE, DEFAULT_ALTITUDE, zoomToScale, scaleToZoom, lngLatToWorld, worldToLngLat, getMeterZoom, getDistanceScales, addMetersToLngLat, getViewMatrix, getProjectionParameters, getProjectionMatrix, altitudeToFovy, fovyToAltitude, worldToPixels, pixelsToWorld */
|
|
52972
52971
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
52973
52972
|
|
|
52974
52973
|
"use strict";
|
|
52975
52974
|
__webpack_require__.r(__webpack_exports__);
|
|
52975
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MAX_LATITUDE", function() { return MAX_LATITUDE; });
|
|
52976
52976
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DEFAULT_ALTITUDE", function() { return DEFAULT_ALTITUDE; });
|
|
52977
52977
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "zoomToScale", function() { return zoomToScale; });
|
|
52978
52978
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scaleToZoom", function() { return scaleToZoom; });
|
|
@@ -53004,6 +53004,7 @@ const DEGREES_TO_RADIANS = PI / 180;
|
|
|
53004
53004
|
const RADIANS_TO_DEGREES = 180 / PI;
|
|
53005
53005
|
const TILE_SIZE = 512;
|
|
53006
53006
|
const EARTH_CIRCUMFERENCE = 40.03e6;
|
|
53007
|
+
const MAX_LATITUDE = 85.051129;
|
|
53007
53008
|
const DEFAULT_ALTITUDE = 1.5;
|
|
53008
53009
|
function zoomToScale(zoom) {
|
|
53009
53010
|
return Math.pow(2, zoom);
|
|
@@ -63371,7 +63372,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
63371
63372
|
|
|
63372
63373
|
|
|
63373
63374
|
|
|
63374
|
-
const VERSION = true ? "8.7.0-beta.
|
|
63375
|
+
const VERSION = true ? "8.7.0-beta.5" : undefined;
|
|
63375
63376
|
const isBrowser = Object(_env_is_browser__WEBPACK_IMPORTED_MODULE_0__["default"])();
|
|
63376
63377
|
//# sourceMappingURL=globals.js.map
|
|
63377
63378
|
|
|
@@ -67347,6 +67348,8 @@ class Tileset2D {
|
|
|
67347
67348
|
this._viewport = null;
|
|
67348
67349
|
this._selectedTiles = null;
|
|
67349
67350
|
this._frameNumber = 0;
|
|
67351
|
+
this._modelMatrix = new _math_gl_core__WEBPACK_IMPORTED_MODULE_3__["Matrix4"]();
|
|
67352
|
+
this._modelMatrixInverse = new _math_gl_core__WEBPACK_IMPORTED_MODULE_3__["Matrix4"]();
|
|
67350
67353
|
this.setOptions(opts);
|
|
67351
67354
|
}
|
|
67352
67355
|
/* Public API */
|
|
@@ -67364,6 +67367,10 @@ class Tileset2D {
|
|
|
67364
67367
|
return this._selectedTiles.every(tile => tile.isLoaded);
|
|
67365
67368
|
}
|
|
67366
67369
|
|
|
67370
|
+
get needsReload() {
|
|
67371
|
+
return this._selectedTiles.some(tile => tile.needsReload);
|
|
67372
|
+
}
|
|
67373
|
+
|
|
67367
67374
|
setOptions(opts) {
|
|
67368
67375
|
Object.assign(this.opts, opts);
|
|
67369
67376
|
|
|
@@ -67418,8 +67425,8 @@ class Tileset2D {
|
|
|
67418
67425
|
|
|
67419
67426
|
if (!viewport.equals(this._viewport) || isModelMatrixNew) {
|
|
67420
67427
|
if (isModelMatrixNew) {
|
|
67421
|
-
this._modelMatrixInverse =
|
|
67422
|
-
this._modelMatrix =
|
|
67428
|
+
this._modelMatrixInverse = modelMatrixAsMatrix4.clone().invert();
|
|
67429
|
+
this._modelMatrix = modelMatrixAsMatrix4;
|
|
67423
67430
|
}
|
|
67424
67431
|
|
|
67425
67432
|
this._viewport = viewport;
|
|
@@ -67436,7 +67443,14 @@ class Tileset2D {
|
|
|
67436
67443
|
if (this._dirty) {
|
|
67437
67444
|
// Some new tiles are added
|
|
67438
67445
|
this._rebuildTree();
|
|
67439
|
-
}
|
|
67446
|
+
} // Check for needed reloads explicitly even if the view/matrix has not changed.
|
|
67447
|
+
|
|
67448
|
+
} else if (this.needsReload) {
|
|
67449
|
+
this._selectedTiles = this._selectedTiles.map(tile => this._getTile({
|
|
67450
|
+
x: tile.x,
|
|
67451
|
+
y: tile.y,
|
|
67452
|
+
z: tile.z
|
|
67453
|
+
}));
|
|
67440
67454
|
} // Update tile states
|
|
67441
67455
|
|
|
67442
67456
|
|
|
@@ -70,6 +70,8 @@ var Tileset2D = function () {
|
|
|
70
70
|
this._viewport = null;
|
|
71
71
|
this._selectedTiles = null;
|
|
72
72
|
this._frameNumber = 0;
|
|
73
|
+
this._modelMatrix = new _core.Matrix4();
|
|
74
|
+
this._modelMatrixInverse = new _core.Matrix4();
|
|
73
75
|
this.setOptions(opts);
|
|
74
76
|
}
|
|
75
77
|
|
|
@@ -90,6 +92,13 @@ var Tileset2D = function () {
|
|
|
90
92
|
return tile.isLoaded;
|
|
91
93
|
});
|
|
92
94
|
}
|
|
95
|
+
}, {
|
|
96
|
+
key: "needsReload",
|
|
97
|
+
get: function get() {
|
|
98
|
+
return this._selectedTiles.some(function (tile) {
|
|
99
|
+
return tile.needsReload;
|
|
100
|
+
});
|
|
101
|
+
}
|
|
93
102
|
}, {
|
|
94
103
|
key: "setOptions",
|
|
95
104
|
value: function setOptions(opts) {
|
|
@@ -166,8 +175,8 @@ var Tileset2D = function () {
|
|
|
166
175
|
|
|
167
176
|
if (!viewport.equals(this._viewport) || isModelMatrixNew) {
|
|
168
177
|
if (isModelMatrixNew) {
|
|
169
|
-
this._modelMatrixInverse =
|
|
170
|
-
this._modelMatrix =
|
|
178
|
+
this._modelMatrixInverse = modelMatrixAsMatrix4.clone().invert();
|
|
179
|
+
this._modelMatrix = modelMatrixAsMatrix4;
|
|
171
180
|
}
|
|
172
181
|
|
|
173
182
|
this._viewport = viewport;
|
|
@@ -186,6 +195,14 @@ var Tileset2D = function () {
|
|
|
186
195
|
if (this._dirty) {
|
|
187
196
|
this._rebuildTree();
|
|
188
197
|
}
|
|
198
|
+
} else if (this.needsReload) {
|
|
199
|
+
this._selectedTiles = this._selectedTiles.map(function (tile) {
|
|
200
|
+
return _this2._getTile({
|
|
201
|
+
x: tile.x,
|
|
202
|
+
y: tile.y,
|
|
203
|
+
z: tile.z
|
|
204
|
+
});
|
|
205
|
+
});
|
|
189
206
|
}
|
|
190
207
|
|
|
191
208
|
var changed = this.updateTileStates();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/tile-layer/tileset-2d.js"],"names":["TILE_STATE_VISITED","TILE_STATE_VISIBLE","STRATEGY_NEVER","STRATEGY_REPLACE","STRATEGY_DEFAULT","DEFAULT_CACHE_SCALE","STRATEGIES","updateTileStateDefault","updateTileStateReplace","Tileset2D","opts","onTileLoad","tile","maxCacheByteSize","_cacheByteSize","byteLength","_resizeCache","_requestScheduler","RequestScheduler","maxRequests","throttleRequests","_cache","Map","_tiles","_dirty","_viewport","_selectedTiles","_frameNumber","setOptions","every","isLoaded","Object","assign","Number","isFinite","maxZoom","_maxZoom","Math","floor","minZoom","_minZoom","ceil","values","isLoading","abort","clear","keys","tileId","get","includes","delete","setNeedsReload","viewport","zRange","modelMatrix","modelMatrixAsMatrix4","Matrix4","isModelMatrixNew","equals","_modelMatrix","_modelMatrixInverse","clone","invert","tileIndices","getTileIndices","modelMatrixInverse","map","index","_getTile","_rebuildTree","changed","updateTileStates","_pruneRequests","tileSize","extent","zoomOffset","x","y","z","bbox","tileIndex","refinementStrategy","visibilities","Array","size","i","isVisible","isSelected","from","abortCandidates","ongoingRequestCount","push","length","shift","parent","children","_getNearestAncestor","maxCacheSize","Infinity","selectedTiles","overflown","onTileUnload","sort","t1","t2","create","needsReload","Tile2DHeader","getTileMetadata","set","loadData","getData","getTileData","requestScheduler","onLoad","onError","onTileError","getParentIndex","allTiles","state","getPlaceholderInAncestors","getPlaceholderInChildren","Boolean","sortedTiles","child","content"],"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/core';\n\n// bit masks\nconst TILE_STATE_VISITED = 1;\nconst TILE_STATE_VISIBLE = 2;\n/*\n show cached parent tile if children are loading\n +-----------+ +-----+ +-----+-----+\n | | | | | | |\n | | | | | | |\n | | --> +-----+-----+ -> +-----+-----+\n | | | | | | |\n | | | | | | |\n +-----------+ +-----+ +-----+-----+\n\n show cached children tiles when parent is loading\n +-------+---- +------------\n | | |\n | | |\n | | |\n +-------+---- --> |\n | | |\n */\n\nexport const STRATEGY_NEVER = 'never';\nexport const STRATEGY_REPLACE = 'no-overlap';\nexport const STRATEGY_DEFAULT = 'best-available';\n\nconst DEFAULT_CACHE_SCALE = 5;\n\nconst STRATEGIES = {\n [STRATEGY_DEFAULT]: updateTileStateDefault,\n [STRATEGY_REPLACE]: updateTileStateReplace,\n [STRATEGY_NEVER]: () => {}\n};\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 this._pruneRequests();\n\n if (this._dirty) {\n // cache size is either the user defined maxSize or 5 * number of current tiles in the viewport.\n this._resizeCache();\n }\n\n if (changed) {\n this._frameNumber++;\n }\n\n return this._frameNumber;\n }\n\n /* 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 const refinementStrategy = this.opts.refinementStrategy || STRATEGY_DEFAULT;\n\n const visibilities = new Array(this._cache.size);\n let i = 0;\n // Reset state\n for (const tile of this._cache.values()) {\n // save previous state\n visibilities[i++] = tile.isVisible;\n tile.isSelected = false;\n tile.isVisible = false;\n }\n for (const tile of this._selectedTiles) {\n tile.isSelected = true;\n tile.isVisible = true;\n }\n\n // Strategy-specific state logic\n (typeof refinementStrategy === 'function'\n ? refinementStrategy\n : STRATEGIES[refinementStrategy])(Array.from(this._cache.values()));\n\n i = 0;\n // Check if any visibility has changed\n for (const tile of this._cache.values()) {\n if (visibilities[i++] !== tile.isVisible) {\n return true;\n }\n }\n\n return false;\n }\n\n /* Private methods */\n\n _pruneRequests() {\n const {maxRequests} = this.opts;\n\n const abortCandidates = [];\n let ongoingRequestCount = 0;\n for (const tile of this._cache.values()) {\n // Keep track of all the ongoing requests\n if (tile.isLoading) {\n ongoingRequestCount++;\n if (!tile.isSelected && !tile.isVisible) {\n abortCandidates.push(tile);\n }\n }\n }\n\n while (maxRequests > 0 && ongoingRequestCount > maxRequests && abortCandidates.length > 0) {\n // There are too many ongoing requests, so abort some that are unselected\n const tile = abortCandidates.shift();\n tile.abort();\n ongoingRequestCount--;\n }\n }\n\n // This needs to be called every time some tiles have been added/removed from cache\n _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 /**\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/* -- Refinement strategies --*/\n/* eslint-disable max-depth */\n\n// For all the selected && pending tiles:\n// - pick the closest ancestor as placeholder\n// - if no ancestor is visible, pick the closest children as placeholder\nfunction updateTileStateDefault(allTiles) {\n for (const tile of allTiles) {\n tile.state = 0;\n }\n for (const tile of allTiles) {\n if (tile.isSelected && !getPlaceholderInAncestors(tile)) {\n getPlaceholderInChildren(tile);\n }\n }\n for (const tile of allTiles) {\n tile.isVisible = Boolean(tile.state & TILE_STATE_VISIBLE);\n }\n}\n\n// Until a selected tile and all its selected siblings are loaded, use the closest ancestor as placeholder\nfunction updateTileStateReplace(allTiles) {\n for (const tile of allTiles) {\n tile.state = 0;\n }\n for (const tile of allTiles) {\n if (tile.isSelected) {\n getPlaceholderInAncestors(tile);\n }\n }\n // Always process parents first\n const sortedTiles = Array.from(allTiles).sort((t1, t2) => t1.z - t2.z);\n for (const tile of sortedTiles) {\n tile.isVisible = Boolean(tile.state & TILE_STATE_VISIBLE);\n\n if (tile.isVisible || tile.state & TILE_STATE_VISITED) {\n // If the tile is rendered, or if the tile has been explicitly hidden, hide all of its children\n for (const child of tile.children) {\n child.state = TILE_STATE_VISITED;\n }\n } else if (tile.isSelected) {\n getPlaceholderInChildren(tile);\n }\n }\n}\n\n// Walk up the tree until we find one ancestor that is loaded. Returns true if successful.\nfunction getPlaceholderInAncestors(tile) {\n while (tile) {\n if (tile.isLoaded || tile.content) {\n tile.state |= TILE_STATE_VISIBLE;\n return true;\n }\n tile = tile.parent;\n }\n return false;\n}\n\n// Recursively set children as placeholder\nfunction getPlaceholderInChildren(tile) {\n for (const child of tile.children) {\n if (child.isLoaded || child.content) {\n child.state |= TILE_STATE_VISIBLE;\n } else {\n getPlaceholderInChildren(child);\n }\n }\n}\n"],"file":"tileset-2d.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/tile-layer/tileset-2d.js"],"names":["TILE_STATE_VISITED","TILE_STATE_VISIBLE","STRATEGY_NEVER","STRATEGY_REPLACE","STRATEGY_DEFAULT","DEFAULT_CACHE_SCALE","STRATEGIES","updateTileStateDefault","updateTileStateReplace","Tileset2D","opts","onTileLoad","tile","maxCacheByteSize","_cacheByteSize","byteLength","_resizeCache","_requestScheduler","RequestScheduler","maxRequests","throttleRequests","_cache","Map","_tiles","_dirty","_viewport","_selectedTiles","_frameNumber","_modelMatrix","Matrix4","_modelMatrixInverse","setOptions","every","isLoaded","some","needsReload","Object","assign","Number","isFinite","maxZoom","_maxZoom","Math","floor","minZoom","_minZoom","ceil","values","isLoading","abort","clear","keys","tileId","get","includes","delete","setNeedsReload","viewport","zRange","modelMatrix","modelMatrixAsMatrix4","isModelMatrixNew","equals","clone","invert","tileIndices","getTileIndices","modelMatrixInverse","map","index","_getTile","_rebuildTree","x","y","z","changed","updateTileStates","_pruneRequests","tileSize","extent","zoomOffset","bbox","tileIndex","refinementStrategy","visibilities","Array","size","i","isVisible","isSelected","from","abortCandidates","ongoingRequestCount","push","length","shift","parent","children","_getNearestAncestor","maxCacheSize","Infinity","selectedTiles","overflown","onTileUnload","sort","t1","t2","create","Tile2DHeader","getTileMetadata","set","loadData","getData","getTileData","requestScheduler","onLoad","onError","onTileError","getParentIndex","allTiles","state","getPlaceholderInAncestors","getPlaceholderInChildren","Boolean","sortedTiles","child","content"],"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/core';\n\n// bit masks\nconst TILE_STATE_VISITED = 1;\nconst TILE_STATE_VISIBLE = 2;\n/*\n show cached parent tile if children are loading\n +-----------+ +-----+ +-----+-----+\n | | | | | | |\n | | | | | | |\n | | --> +-----+-----+ -> +-----+-----+\n | | | | | | |\n | | | | | | |\n +-----------+ +-----+ +-----+-----+\n\n show cached children tiles when parent is loading\n +-------+---- +------------\n | | |\n | | |\n | | |\n +-------+---- --> |\n | | |\n */\n\nexport const STRATEGY_NEVER = 'never';\nexport const STRATEGY_REPLACE = 'no-overlap';\nexport const STRATEGY_DEFAULT = 'best-available';\n\nconst DEFAULT_CACHE_SCALE = 5;\n\nconst STRATEGIES = {\n [STRATEGY_DEFAULT]: updateTileStateDefault,\n [STRATEGY_REPLACE]: updateTileStateReplace,\n [STRATEGY_NEVER]: () => {}\n};\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._modelMatrix = new Matrix4();\n this._modelMatrixInverse = new Matrix4();\n\n this.setOptions(opts);\n }\n\n /* Public API */\n get tiles() {\n return this._tiles;\n }\n\n get selectedTiles() {\n return this._selectedTiles;\n }\n\n get isLoaded() {\n return this._selectedTiles.every(tile => tile.isLoaded);\n }\n\n get needsReload() {\n return this._selectedTiles.some(tile => tile.needsReload);\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 = modelMatrixAsMatrix4.clone().invert();\n this._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 // Check for needed reloads explicitly even if the view/matrix has not changed.\n } else if (this.needsReload) {\n this._selectedTiles = this._selectedTiles.map(tile =>\n this._getTile({x: tile.x, y: tile.y, z: tile.z})\n );\n }\n\n // Update tile states\n const changed = this.updateTileStates();\n this._pruneRequests();\n\n if (this._dirty) {\n // cache size is either the user defined maxSize or 5 * number of current tiles in the viewport.\n this._resizeCache();\n }\n\n if (changed) {\n this._frameNumber++;\n }\n\n return this._frameNumber;\n }\n\n /* 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 const refinementStrategy = this.opts.refinementStrategy || STRATEGY_DEFAULT;\n\n const visibilities = new Array(this._cache.size);\n let i = 0;\n // Reset state\n for (const tile of this._cache.values()) {\n // save previous state\n visibilities[i++] = tile.isVisible;\n tile.isSelected = false;\n tile.isVisible = false;\n }\n for (const tile of this._selectedTiles) {\n tile.isSelected = true;\n tile.isVisible = true;\n }\n\n // Strategy-specific state logic\n (typeof refinementStrategy === 'function'\n ? refinementStrategy\n : STRATEGIES[refinementStrategy])(Array.from(this._cache.values()));\n\n i = 0;\n // Check if any visibility has changed\n for (const tile of this._cache.values()) {\n if (visibilities[i++] !== tile.isVisible) {\n return true;\n }\n }\n\n return false;\n }\n\n /* Private methods */\n\n _pruneRequests() {\n const {maxRequests} = this.opts;\n\n const abortCandidates = [];\n let ongoingRequestCount = 0;\n for (const tile of this._cache.values()) {\n // Keep track of all the ongoing requests\n if (tile.isLoading) {\n ongoingRequestCount++;\n if (!tile.isSelected && !tile.isVisible) {\n abortCandidates.push(tile);\n }\n }\n }\n\n while (maxRequests > 0 && ongoingRequestCount > maxRequests && abortCandidates.length > 0) {\n // There are too many ongoing requests, so abort some that are unselected\n const tile = abortCandidates.shift();\n tile.abort();\n ongoingRequestCount--;\n }\n }\n\n // This needs to be called every time some tiles have been added/removed from cache\n _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 /**\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/* -- Refinement strategies --*/\n/* eslint-disable max-depth */\n\n// For all the selected && pending tiles:\n// - pick the closest ancestor as placeholder\n// - if no ancestor is visible, pick the closest children as placeholder\nfunction updateTileStateDefault(allTiles) {\n for (const tile of allTiles) {\n tile.state = 0;\n }\n for (const tile of allTiles) {\n if (tile.isSelected && !getPlaceholderInAncestors(tile)) {\n getPlaceholderInChildren(tile);\n }\n }\n for (const tile of allTiles) {\n tile.isVisible = Boolean(tile.state & TILE_STATE_VISIBLE);\n }\n}\n\n// Until a selected tile and all its selected siblings are loaded, use the closest ancestor as placeholder\nfunction updateTileStateReplace(allTiles) {\n for (const tile of allTiles) {\n tile.state = 0;\n }\n for (const tile of allTiles) {\n if (tile.isSelected) {\n getPlaceholderInAncestors(tile);\n }\n }\n // Always process parents first\n const sortedTiles = Array.from(allTiles).sort((t1, t2) => t1.z - t2.z);\n for (const tile of sortedTiles) {\n tile.isVisible = Boolean(tile.state & TILE_STATE_VISIBLE);\n\n if (tile.isVisible || tile.state & TILE_STATE_VISITED) {\n // If the tile is rendered, or if the tile has been explicitly hidden, hide all of its children\n for (const child of tile.children) {\n child.state = TILE_STATE_VISITED;\n }\n } else if (tile.isSelected) {\n getPlaceholderInChildren(tile);\n }\n }\n}\n\n// Walk up the tree until we find one ancestor that is loaded. Returns true if successful.\nfunction getPlaceholderInAncestors(tile) {\n while (tile) {\n if (tile.isLoaded || tile.content) {\n tile.state |= TILE_STATE_VISIBLE;\n return true;\n }\n tile = tile.parent;\n }\n return false;\n}\n\n// Recursively set children as placeholder\nfunction getPlaceholderInChildren(tile) {\n for (const child of tile.children) {\n if (child.isLoaded || child.content) {\n child.state |= TILE_STATE_VISIBLE;\n } else {\n getPlaceholderInChildren(child);\n }\n }\n}\n"],"file":"tileset-2d.js"}
|
|
@@ -38,6 +38,8 @@ export default class Tileset2D {
|
|
|
38
38
|
this._viewport = null;
|
|
39
39
|
this._selectedTiles = null;
|
|
40
40
|
this._frameNumber = 0;
|
|
41
|
+
this._modelMatrix = new Matrix4();
|
|
42
|
+
this._modelMatrixInverse = new Matrix4();
|
|
41
43
|
this.setOptions(opts);
|
|
42
44
|
}
|
|
43
45
|
|
|
@@ -53,6 +55,10 @@ export default class Tileset2D {
|
|
|
53
55
|
return this._selectedTiles.every(tile => tile.isLoaded);
|
|
54
56
|
}
|
|
55
57
|
|
|
58
|
+
get needsReload() {
|
|
59
|
+
return this._selectedTiles.some(tile => tile.needsReload);
|
|
60
|
+
}
|
|
61
|
+
|
|
56
62
|
setOptions(opts) {
|
|
57
63
|
Object.assign(this.opts, opts);
|
|
58
64
|
|
|
@@ -99,8 +105,8 @@ export default class Tileset2D {
|
|
|
99
105
|
|
|
100
106
|
if (!viewport.equals(this._viewport) || isModelMatrixNew) {
|
|
101
107
|
if (isModelMatrixNew) {
|
|
102
|
-
this._modelMatrixInverse =
|
|
103
|
-
this._modelMatrix =
|
|
108
|
+
this._modelMatrixInverse = modelMatrixAsMatrix4.clone().invert();
|
|
109
|
+
this._modelMatrix = modelMatrixAsMatrix4;
|
|
104
110
|
}
|
|
105
111
|
|
|
106
112
|
this._viewport = viewport;
|
|
@@ -117,6 +123,12 @@ export default class Tileset2D {
|
|
|
117
123
|
if (this._dirty) {
|
|
118
124
|
this._rebuildTree();
|
|
119
125
|
}
|
|
126
|
+
} else if (this.needsReload) {
|
|
127
|
+
this._selectedTiles = this._selectedTiles.map(tile => this._getTile({
|
|
128
|
+
x: tile.x,
|
|
129
|
+
y: tile.y,
|
|
130
|
+
z: tile.z
|
|
131
|
+
}));
|
|
120
132
|
}
|
|
121
133
|
|
|
122
134
|
const changed = this.updateTileStates();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/tile-layer/tileset-2d.js"],"names":["Tile2DHeader","getTileIndices","tileToBoundingBox","RequestScheduler","Matrix4","TILE_STATE_VISITED","TILE_STATE_VISIBLE","STRATEGY_NEVER","STRATEGY_REPLACE","STRATEGY_DEFAULT","DEFAULT_CACHE_SCALE","STRATEGIES","updateTileStateDefault","updateTileStateReplace","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","_pruneRequests","tileSize","extent","zoomOffset","getTileMetadata","x","y","z","bbox","getParentIndex","tileIndex","refinementStrategy","visibilities","Array","size","i","isVisible","isSelected","from","abortCandidates","ongoingRequestCount","push","length","shift","parent","children","_getNearestAncestor","maxCacheSize","Infinity","overflown","onTileUnload","sort","t1","t2","create","needsReload","set","loadData","getData","getTileData","requestScheduler","onLoad","onError","onTileError","allTiles","state","getPlaceholderInAncestors","getPlaceholderInChildren","Boolean","sortedTiles","child","content"],"mappings":"AAAA,OAAOA,YAAP,MAAyB,kBAAzB;AACA,SAAQC,cAAR,EAAwBC,iBAAxB,QAAgD,SAAhD;AACA,SAAQC,gBAAR,QAA+B,0BAA/B;AACA,SAAQC,OAAR,QAAsB,eAAtB;AAGA,MAAMC,kBAAkB,GAAG,CAA3B;AACA,MAAMC,kBAAkB,GAAG,CAA3B;AAoBA,OAAO,MAAMC,cAAc,GAAG,OAAvB;AACP,OAAO,MAAMC,gBAAgB,GAAG,YAAzB;AACP,OAAO,MAAMC,gBAAgB,GAAG,gBAAzB;AAEP,MAAMC,mBAAmB,GAAG,CAA5B;AAEA,MAAMC,UAAU,GAAG;AACjB,GAACF,gBAAD,GAAoBG,sBADH;AAEjB,GAACJ,gBAAD,GAAoBK,sBAFH;AAGjB,GAACN,cAAD,GAAkB,MAAM,CAAE;AAHT,CAAnB;AAWA,eAAe,MAAMO,SAAN,CAAgB;AAK7BC,EAAAA,WAAW,CAACC,IAAD,EAAO;AAChB,SAAKA,IAAL,GAAYA,IAAZ;;AAEA,SAAKC,UAAL,GAAkBC,IAAI,IAAI;AACxB,WAAKF,IAAL,CAAUC,UAAV,CAAqBC,IAArB;;AACA,UAAI,KAAKF,IAAL,CAAUG,gBAAd,EAAgC;AAC9B,aAAKC,cAAL,IAAuBF,IAAI,CAACG,UAA5B;;AACA,aAAKC,YAAL;AACD;AACF,KAND;;AAQA,SAAKC,iBAAL,GAAyB,IAAIpB,gBAAJ,CAAqB;AAC5CqB,MAAAA,WAAW,EAAER,IAAI,CAACQ,WAD0B;AAE5CC,MAAAA,gBAAgB,EAAET,IAAI,CAACQ,WAAL,GAAmB;AAFO,KAArB,CAAzB;AAMA,SAAKE,MAAL,GAAc,IAAIC,GAAJ,EAAd;AACA,SAAKC,MAAL,GAAc,EAAd;AACA,SAAKC,MAAL,GAAc,KAAd;AACA,SAAKT,cAAL,GAAsB,CAAtB;AAGA,SAAKU,SAAL,GAAiB,IAAjB;AACA,SAAKC,cAAL,GAAsB,IAAtB;AACA,SAAKC,YAAL,GAAoB,CAApB;AAEA,SAAKC,UAAL,CAAgBjB,IAAhB;AACD;;AAGQ,MAALkB,KAAK,GAAG;AACV,WAAO,KAAKN,MAAZ;AACD;;AAEgB,MAAbO,aAAa,GAAG;AAClB,WAAO,KAAKJ,cAAZ;AACD;;AAEW,MAARK,QAAQ,GAAG;AACb,WAAO,KAAKL,cAAL,CAAoBM,KAApB,CAA0BnB,IAAI,IAAIA,IAAI,CAACkB,QAAvC,CAAP;AACD;;AAEDH,EAAAA,UAAU,CAACjB,IAAD,EAAO;AACfsB,IAAAA,MAAM,CAACC,MAAP,CAAc,KAAKvB,IAAnB,EAAyBA,IAAzB;;AACA,QAAIwB,MAAM,CAACC,QAAP,CAAgBzB,IAAI,CAAC0B,OAArB,CAAJ,EAAmC;AACjC,WAAKC,QAAL,GAAgBC,IAAI,CAACC,KAAL,CAAW7B,IAAI,CAAC0B,OAAhB,CAAhB;AACD;;AACD,QAAIF,MAAM,CAACC,QAAP,CAAgBzB,IAAI,CAAC8B,OAArB,CAAJ,EAAmC;AACjC,WAAKC,QAAL,GAAgBH,IAAI,CAACI,IAAL,CAAUhC,IAAI,CAAC8B,OAAf,CAAhB;AACD;AACF;;AAGDG,EAAAA,QAAQ,GAAG;AACT,SAAK,MAAM/B,IAAX,IAAmB,KAAKQ,MAAL,CAAYwB,MAAZ,EAAnB,EAAyC;AACvC,UAAIhC,IAAI,CAACiC,SAAT,EAAoB;AAClBjC,QAAAA,IAAI,CAACkC,KAAL;AACD;AACF;;AACD,SAAK1B,MAAL,CAAY2B,KAAZ;;AACA,SAAKzB,MAAL,GAAc,EAAd;AACA,SAAKG,cAAL,GAAsB,IAAtB;AACD;;AAEDuB,EAAAA,SAAS,GAAG;AACV,SAAK,MAAMC,MAAX,IAAqB,KAAK7B,MAAL,CAAY8B,IAAZ,EAArB,EAAyC;AACvC,YAAMtC,IAAI,GAAG,KAAKQ,MAAL,CAAY+B,GAAZ,CAAgBF,MAAhB,CAAb;;AACA,UAAI,CAAC,KAAKxB,cAAL,CAAoB2B,QAApB,CAA6BxC,IAA7B,CAAL,EAAyC;AACvC,aAAKQ,MAAL,CAAYiC,MAAZ,CAAmBJ,MAAnB;AACD,OAFD,MAEO;AACLrC,QAAAA,IAAI,CAAC0C,cAAL;AACD;AACF;AACF;;AAQDC,EAAAA,MAAM,CAACC,QAAD,EAAW;AAACC,IAAAA,MAAD;AAASC,IAAAA;AAAT,MAAwB,EAAnC,EAAuC;AAC3C,UAAMC,oBAAoB,GAAG,IAAI7D,OAAJ,CAAY4D,WAAZ,CAA7B;AACA,UAAME,gBAAgB,GAAG,CAACD,oBAAoB,CAACE,MAArB,CAA4B,KAAKC,YAAjC,CAA1B;;AACA,QAAI,CAACN,QAAQ,CAACK,MAAT,CAAgB,KAAKrC,SAArB,CAAD,IAAoCoC,gBAAxC,EAA0D;AACxD,UAAIA,gBAAJ,EAAsB;AACpB,aAAKG,mBAAL,GAA2BL,WAAW,IAAIC,oBAAoB,CAACK,KAArB,GAA6BC,MAA7B,EAA1C;AACA,aAAKH,YAAL,GAAoBJ,WAAW,IAAIC,oBAAnC;AACD;;AACD,WAAKnC,SAAL,GAAiBgC,QAAjB;AACA,YAAMU,WAAW,GAAG,KAAKvE,cAAL,CAAoB;AACtC6D,QAAAA,QADsC;AAEtCpB,QAAAA,OAAO,EAAE,KAAKC,QAFwB;AAGtCG,QAAAA,OAAO,EAAE,KAAKC,QAHwB;AAItCgB,QAAAA,MAJsC;AAKtCC,QAAAA,WAAW,EAAE,KAAKI,YALoB;AAMtCK,QAAAA,kBAAkB,EAAE,KAAKJ;AANa,OAApB,CAApB;AAQA,WAAKtC,cAAL,GAAsByC,WAAW,CAACE,GAAZ,CAAgBC,KAAK,IAAI,KAAKC,QAAL,CAAcD,KAAd,EAAqB,IAArB,CAAzB,CAAtB;;AAEA,UAAI,KAAK9C,MAAT,EAAiB;AAEf,aAAKgD,YAAL;AACD;AACF;;AAGD,UAAMC,OAAO,GAAG,KAAKC,gBAAL,EAAhB;;AACA,SAAKC,cAAL;;AAEA,QAAI,KAAKnD,MAAT,EAAiB;AAEf,WAAKP,YAAL;AACD;;AAED,QAAIwD,OAAJ,EAAa;AACX,WAAK9C,YAAL;AACD;;AAED,WAAO,KAAKA,YAAZ;AACD;;AAKD/B,EAAAA,cAAc,CAAC;AAAC6D,IAAAA,QAAD;AAAWpB,IAAAA,OAAX;AAAoBI,IAAAA,OAApB;AAA6BiB,IAAAA,MAA7B;AAAqCC,IAAAA,WAArC;AAAkDS,IAAAA;AAAlD,GAAD,EAAwE;AACpF,UAAM;AAACQ,MAAAA,QAAD;AAAWC,MAAAA,MAAX;AAAmBC,MAAAA;AAAnB,QAAiC,KAAKnE,IAA5C;AACA,WAAOf,cAAc,CAAC;AACpB6D,MAAAA,QADoB;AAEpBpB,MAAAA,OAFoB;AAGpBI,MAAAA,OAHoB;AAIpBiB,MAAAA,MAJoB;AAKpBkB,MAAAA,QALoB;AAMpBC,MAAAA,MANoB;AAOpBlB,MAAAA,WAPoB;AAQpBS,MAAAA,kBARoB;AASpBU,MAAAA;AAToB,KAAD,CAArB;AAWD;;AAGDC,EAAAA,eAAe,CAAC;AAACC,IAAAA,CAAD;AAAIC,IAAAA,CAAJ;AAAOC,IAAAA;AAAP,GAAD,EAAY;AACzB,UAAM;AAACN,MAAAA;AAAD,QAAa,KAAKjE,IAAxB;AACA,WAAO;AAACwE,MAAAA,IAAI,EAAEtF,iBAAiB,CAAC,KAAK4B,SAAN,EAAiBuD,CAAjB,EAAoBC,CAApB,EAAuBC,CAAvB,EAA0BN,QAA1B;AAAxB,KAAP;AACD;;AAGDQ,EAAAA,cAAc,CAACC,SAAD,EAAY;AAExBA,IAAAA,SAAS,CAACL,CAAV,GAAczC,IAAI,CAACC,KAAL,CAAW6C,SAAS,CAACL,CAAV,GAAc,CAAzB,CAAd;AACAK,IAAAA,SAAS,CAACJ,CAAV,GAAc1C,IAAI,CAACC,KAAL,CAAW6C,SAAS,CAACJ,CAAV,GAAc,CAAzB,CAAd;AACAI,IAAAA,SAAS,CAACH,CAAV,IAAe,CAAf;AACA,WAAOG,SAAP;AACD;;AAGDX,EAAAA,gBAAgB,GAAG;AACjB,UAAMY,kBAAkB,GAAG,KAAK3E,IAAL,CAAU2E,kBAAV,IAAgClF,gBAA3D;AAEA,UAAMmF,YAAY,GAAG,IAAIC,KAAJ,CAAU,KAAKnE,MAAL,CAAYoE,IAAtB,CAArB;AACA,QAAIC,CAAC,GAAG,CAAR;;AAEA,SAAK,MAAM7E,IAAX,IAAmB,KAAKQ,MAAL,CAAYwB,MAAZ,EAAnB,EAAyC;AAEvC0C,MAAAA,YAAY,CAACG,CAAC,EAAF,CAAZ,GAAoB7E,IAAI,CAAC8E,SAAzB;AACA9E,MAAAA,IAAI,CAAC+E,UAAL,GAAkB,KAAlB;AACA/E,MAAAA,IAAI,CAAC8E,SAAL,GAAiB,KAAjB;AACD;;AACD,SAAK,MAAM9E,IAAX,IAAmB,KAAKa,cAAxB,EAAwC;AACtCb,MAAAA,IAAI,CAAC+E,UAAL,GAAkB,IAAlB;AACA/E,MAAAA,IAAI,CAAC8E,SAAL,GAAiB,IAAjB;AACD;;AAGD,KAAC,OAAOL,kBAAP,KAA8B,UAA9B,GACGA,kBADH,GAEGhF,UAAU,CAACgF,kBAAD,CAFd,EAEoCE,KAAK,CAACK,IAAN,CAAW,KAAKxE,MAAL,CAAYwB,MAAZ,EAAX,CAFpC;AAIA6C,IAAAA,CAAC,GAAG,CAAJ;;AAEA,SAAK,MAAM7E,IAAX,IAAmB,KAAKQ,MAAL,CAAYwB,MAAZ,EAAnB,EAAyC;AACvC,UAAI0C,YAAY,CAACG,CAAC,EAAF,CAAZ,KAAsB7E,IAAI,CAAC8E,SAA/B,EAA0C;AACxC,eAAO,IAAP;AACD;AACF;;AAED,WAAO,KAAP;AACD;;AAIDhB,EAAAA,cAAc,GAAG;AACf,UAAM;AAACxD,MAAAA;AAAD,QAAgB,KAAKR,IAA3B;AAEA,UAAMmF,eAAe,GAAG,EAAxB;AACA,QAAIC,mBAAmB,GAAG,CAA1B;;AACA,SAAK,MAAMlF,IAAX,IAAmB,KAAKQ,MAAL,CAAYwB,MAAZ,EAAnB,EAAyC;AAEvC,UAAIhC,IAAI,CAACiC,SAAT,EAAoB;AAClBiD,QAAAA,mBAAmB;;AACnB,YAAI,CAAClF,IAAI,CAAC+E,UAAN,IAAoB,CAAC/E,IAAI,CAAC8E,SAA9B,EAAyC;AACvCG,UAAAA,eAAe,CAACE,IAAhB,CAAqBnF,IAArB;AACD;AACF;AACF;;AAED,WAAOM,WAAW,GAAG,CAAd,IAAmB4E,mBAAmB,GAAG5E,WAAzC,IAAwD2E,eAAe,CAACG,MAAhB,GAAyB,CAAxF,EAA2F;AAEzF,YAAMpF,IAAI,GAAGiF,eAAe,CAACI,KAAhB,EAAb;AACArF,MAAAA,IAAI,CAACkC,KAAL;AACAgD,MAAAA,mBAAmB;AACpB;AACF;;AAGDvB,EAAAA,YAAY,GAAG;AACb,UAAM;AAACnD,MAAAA;AAAD,QAAW,IAAjB;;AAGA,SAAK,MAAMR,IAAX,IAAmBQ,MAAM,CAACwB,MAAP,EAAnB,EAAoC;AAClChC,MAAAA,IAAI,CAACsF,MAAL,GAAc,IAAd;AACAtF,MAAAA,IAAI,CAACuF,QAAL,CAAcH,MAAd,GAAuB,CAAvB;AACD;;AAGD,SAAK,MAAMpF,IAAX,IAAmBQ,MAAM,CAACwB,MAAP,EAAnB,EAAoC;AAClC,YAAMsD,MAAM,GAAG,KAAKE,mBAAL,CAAyBxF,IAAI,CAACmE,CAA9B,EAAiCnE,IAAI,CAACoE,CAAtC,EAAyCpE,IAAI,CAACqE,CAA9C,CAAf;;AACArE,MAAAA,IAAI,CAACsF,MAAL,GAAcA,MAAd;;AACA,UAAIA,MAAJ,EAAY;AACVA,QAAAA,MAAM,CAACC,QAAP,CAAgBJ,IAAhB,CAAqBnF,IAArB;AACD;AACF;AACF;;AAMDI,EAAAA,YAAY,GAAG;AACb,UAAM;AAACI,MAAAA,MAAD;AAASV,MAAAA;AAAT,QAAiB,IAAvB;AAEA,UAAM2F,YAAY,GAChB3F,IAAI,CAAC2F,YAAL,KACC3F,IAAI,CAACG,gBAAL,GAAwByF,QAAxB,GAAmClG,mBAAmB,GAAG,KAAKyB,aAAL,CAAmBmE,MAD7E,CADF;AAGA,UAAMnF,gBAAgB,GAAGH,IAAI,CAACG,gBAAL,IAAyByF,QAAlD;AAEA,UAAMC,SAAS,GAAGnF,MAAM,CAACoE,IAAP,GAAca,YAAd,IAA8B,KAAKvF,cAAL,GAAsBD,gBAAtE;;AAEA,QAAI0F,SAAJ,EAAe;AACb,WAAK,MAAM,CAACtD,MAAD,EAASrC,IAAT,CAAX,IAA6BQ,MAA7B,EAAqC;AACnC,YAAI,CAACR,IAAI,CAAC8E,SAAV,EAAqB;AAEnB,eAAK5E,cAAL,IAAuBJ,IAAI,CAACG,gBAAL,GAAwBD,IAAI,CAACG,UAA7B,GAA0C,CAAjE;;AACAK,UAAAA,MAAM,CAACiC,MAAP,CAAcJ,MAAd;;AACA,eAAKvC,IAAL,CAAU8F,YAAV,CAAuB5F,IAAvB;AACD;;AACD,YAAIQ,MAAM,CAACoE,IAAP,IAAea,YAAf,IAA+B,KAAKvF,cAAL,IAAuBD,gBAA1D,EAA4E;AAC1E;AACD;AACF;;AACD,WAAK0D,YAAL;;AACA,WAAKhD,MAAL,GAAc,IAAd;AACD;;AACD,QAAI,KAAKA,MAAT,EAAiB;AACf,WAAKD,MAAL,GAAciE,KAAK,CAACK,IAAN,CAAW,KAAKxE,MAAL,CAAYwB,MAAZ,EAAX,EAEX6D,IAFW,CAEN,CAACC,EAAD,EAAKC,EAAL,KAAYD,EAAE,CAACzB,CAAH,GAAO0B,EAAE,CAAC1B,CAFhB,CAAd;AAIA,WAAK1D,MAAL,GAAc,KAAd;AACD;AACF;;AAGD+C,EAAAA,QAAQ,CAAC;AAACS,IAAAA,CAAD;AAAIC,IAAAA,CAAJ;AAAOC,IAAAA;AAAP,GAAD,EAAY2B,MAAZ,EAAoB;AAC1B,UAAM3D,MAAM,aAAM8B,CAAN,cAAWC,CAAX,cAAgBC,CAAhB,CAAZ;;AACA,QAAIrE,IAAI,GAAG,KAAKQ,MAAL,CAAY+B,GAAZ,CAAgBF,MAAhB,CAAX;;AACA,QAAI4D,WAAW,GAAG,KAAlB;;AAEA,QAAI,CAACjG,IAAD,IAASgG,MAAb,EAAqB;AACnBhG,MAAAA,IAAI,GAAG,IAAIlB,YAAJ,CAAiB;AAACqF,QAAAA,CAAD;AAAIC,QAAAA,CAAJ;AAAOC,QAAAA;AAAP,OAAjB,CAAP;AACAjD,MAAAA,MAAM,CAACC,MAAP,CAAcrB,IAAd,EAAoB,KAAKkE,eAAL,CAAqBlE,IAArB,CAApB;AACAiG,MAAAA,WAAW,GAAG,IAAd;;AACA,WAAKzF,MAAL,CAAY0F,GAAZ,CAAgB7D,MAAhB,EAAwBrC,IAAxB;;AACA,WAAKW,MAAL,GAAc,IAAd;AACD,KAND,MAMO,IAAIX,IAAI,IAAIA,IAAI,CAACiG,WAAjB,EAA8B;AACnCA,MAAAA,WAAW,GAAG,IAAd;AACD;;AACD,QAAIA,WAAJ,EAAiB;AACfjG,MAAAA,IAAI,CAACmG,QAAL,CAAc;AACZC,QAAAA,OAAO,EAAE,KAAKtG,IAAL,CAAUuG,WADP;AAEZC,QAAAA,gBAAgB,EAAE,KAAKjG,iBAFX;AAGZkG,QAAAA,MAAM,EAAE,KAAKxG,UAHD;AAIZyG,QAAAA,OAAO,EAAE,KAAK1G,IAAL,CAAU2G;AAJP,OAAd;AAMD;;AAED,WAAOzG,IAAP;AACD;;AAEDwF,EAAAA,mBAAmB,CAACrB,CAAD,EAAIC,CAAJ,EAAOC,CAAP,EAAU;AAC3B,UAAM;AAACxC,MAAAA,QAAQ,GAAG;AAAZ,QAAiB,IAAvB;AACA,QAAI4B,KAAK,GAAG;AAACU,MAAAA,CAAD;AAAIC,MAAAA,CAAJ;AAAOC,MAAAA;AAAP,KAAZ;;AAEA,WAAOZ,KAAK,CAACY,CAAN,GAAUxC,QAAjB,EAA2B;AACzB4B,MAAAA,KAAK,GAAG,KAAKc,cAAL,CAAoBd,KAApB,CAAR;;AACA,YAAM6B,MAAM,GAAG,KAAK5B,QAAL,CAAcD,KAAd,CAAf;;AACA,UAAI6B,MAAJ,EAAY;AACV,eAAOA,MAAP;AACD;AACF;;AACD,WAAO,IAAP;AACD;;AA7T4B;;AAsU/B,SAAS5F,sBAAT,CAAgCgH,QAAhC,EAA0C;AACxC,OAAK,MAAM1G,IAAX,IAAmB0G,QAAnB,EAA6B;AAC3B1G,IAAAA,IAAI,CAAC2G,KAAL,GAAa,CAAb;AACD;;AACD,OAAK,MAAM3G,IAAX,IAAmB0G,QAAnB,EAA6B;AAC3B,QAAI1G,IAAI,CAAC+E,UAAL,IAAmB,CAAC6B,yBAAyB,CAAC5G,IAAD,CAAjD,EAAyD;AACvD6G,MAAAA,wBAAwB,CAAC7G,IAAD,CAAxB;AACD;AACF;;AACD,OAAK,MAAMA,IAAX,IAAmB0G,QAAnB,EAA6B;AAC3B1G,IAAAA,IAAI,CAAC8E,SAAL,GAAiBgC,OAAO,CAAC9G,IAAI,CAAC2G,KAAL,GAAavH,kBAAd,CAAxB;AACD;AACF;;AAGD,SAASO,sBAAT,CAAgC+G,QAAhC,EAA0C;AACxC,OAAK,MAAM1G,IAAX,IAAmB0G,QAAnB,EAA6B;AAC3B1G,IAAAA,IAAI,CAAC2G,KAAL,GAAa,CAAb;AACD;;AACD,OAAK,MAAM3G,IAAX,IAAmB0G,QAAnB,EAA6B;AAC3B,QAAI1G,IAAI,CAAC+E,UAAT,EAAqB;AACnB6B,MAAAA,yBAAyB,CAAC5G,IAAD,CAAzB;AACD;AACF;;AAED,QAAM+G,WAAW,GAAGpC,KAAK,CAACK,IAAN,CAAW0B,QAAX,EAAqBb,IAArB,CAA0B,CAACC,EAAD,EAAKC,EAAL,KAAYD,EAAE,CAACzB,CAAH,GAAO0B,EAAE,CAAC1B,CAAhD,CAApB;;AACA,OAAK,MAAMrE,IAAX,IAAmB+G,WAAnB,EAAgC;AAC9B/G,IAAAA,IAAI,CAAC8E,SAAL,GAAiBgC,OAAO,CAAC9G,IAAI,CAAC2G,KAAL,GAAavH,kBAAd,CAAxB;;AAEA,QAAIY,IAAI,CAAC8E,SAAL,IAAkB9E,IAAI,CAAC2G,KAAL,GAAaxH,kBAAnC,EAAuD;AAErD,WAAK,MAAM6H,KAAX,IAAoBhH,IAAI,CAACuF,QAAzB,EAAmC;AACjCyB,QAAAA,KAAK,CAACL,KAAN,GAAcxH,kBAAd;AACD;AACF,KALD,MAKO,IAAIa,IAAI,CAAC+E,UAAT,EAAqB;AAC1B8B,MAAAA,wBAAwB,CAAC7G,IAAD,CAAxB;AACD;AACF;AACF;;AAGD,SAAS4G,yBAAT,CAAmC5G,IAAnC,EAAyC;AACvC,SAAOA,IAAP,EAAa;AACX,QAAIA,IAAI,CAACkB,QAAL,IAAiBlB,IAAI,CAACiH,OAA1B,EAAmC;AACjCjH,MAAAA,IAAI,CAAC2G,KAAL,IAAcvH,kBAAd;AACA,aAAO,IAAP;AACD;;AACDY,IAAAA,IAAI,GAAGA,IAAI,CAACsF,MAAZ;AACD;;AACD,SAAO,KAAP;AACD;;AAGD,SAASuB,wBAAT,CAAkC7G,IAAlC,EAAwC;AACtC,OAAK,MAAMgH,KAAX,IAAoBhH,IAAI,CAACuF,QAAzB,EAAmC;AACjC,QAAIyB,KAAK,CAAC9F,QAAN,IAAkB8F,KAAK,CAACC,OAA5B,EAAqC;AACnCD,MAAAA,KAAK,CAACL,KAAN,IAAevH,kBAAf;AACD,KAFD,MAEO;AACLyH,MAAAA,wBAAwB,CAACG,KAAD,CAAxB;AACD;AACF;AACF","sourcesContent":["import Tile2DHeader from './tile-2d-header';\nimport {getTileIndices, tileToBoundingBox} from './utils';\nimport {RequestScheduler} from '@loaders.gl/loader-utils';\nimport {Matrix4} from '@math.gl/core';\n\n// bit masks\nconst TILE_STATE_VISITED = 1;\nconst TILE_STATE_VISIBLE = 2;\n/*\n show cached parent tile if children are loading\n +-----------+ +-----+ +-----+-----+\n | | | | | | |\n | | | | | | |\n | | --> +-----+-----+ -> +-----+-----+\n | | | | | | |\n | | | | | | |\n +-----------+ +-----+ +-----+-----+\n\n show cached children tiles when parent is loading\n +-------+---- +------------\n | | |\n | | |\n | | |\n +-------+---- --> |\n | | |\n */\n\nexport const STRATEGY_NEVER = 'never';\nexport const STRATEGY_REPLACE = 'no-overlap';\nexport const STRATEGY_DEFAULT = 'best-available';\n\nconst DEFAULT_CACHE_SCALE = 5;\n\nconst STRATEGIES = {\n [STRATEGY_DEFAULT]: updateTileStateDefault,\n [STRATEGY_REPLACE]: updateTileStateReplace,\n [STRATEGY_NEVER]: () => {}\n};\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 this._pruneRequests();\n\n if (this._dirty) {\n // cache size is either the user defined maxSize or 5 * number of current tiles in the viewport.\n this._resizeCache();\n }\n\n if (changed) {\n this._frameNumber++;\n }\n\n return this._frameNumber;\n }\n\n /* 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 const refinementStrategy = this.opts.refinementStrategy || STRATEGY_DEFAULT;\n\n const visibilities = new Array(this._cache.size);\n let i = 0;\n // Reset state\n for (const tile of this._cache.values()) {\n // save previous state\n visibilities[i++] = tile.isVisible;\n tile.isSelected = false;\n tile.isVisible = false;\n }\n for (const tile of this._selectedTiles) {\n tile.isSelected = true;\n tile.isVisible = true;\n }\n\n // Strategy-specific state logic\n (typeof refinementStrategy === 'function'\n ? refinementStrategy\n : STRATEGIES[refinementStrategy])(Array.from(this._cache.values()));\n\n i = 0;\n // Check if any visibility has changed\n for (const tile of this._cache.values()) {\n if (visibilities[i++] !== tile.isVisible) {\n return true;\n }\n }\n\n return false;\n }\n\n /* Private methods */\n\n _pruneRequests() {\n const {maxRequests} = this.opts;\n\n const abortCandidates = [];\n let ongoingRequestCount = 0;\n for (const tile of this._cache.values()) {\n // Keep track of all the ongoing requests\n if (tile.isLoading) {\n ongoingRequestCount++;\n if (!tile.isSelected && !tile.isVisible) {\n abortCandidates.push(tile);\n }\n }\n }\n\n while (maxRequests > 0 && ongoingRequestCount > maxRequests && abortCandidates.length > 0) {\n // There are too many ongoing requests, so abort some that are unselected\n const tile = abortCandidates.shift();\n tile.abort();\n ongoingRequestCount--;\n }\n }\n\n // This needs to be called every time some tiles have been added/removed from cache\n _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 /**\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/* -- Refinement strategies --*/\n/* eslint-disable max-depth */\n\n// For all the selected && pending tiles:\n// - pick the closest ancestor as placeholder\n// - if no ancestor is visible, pick the closest children as placeholder\nfunction updateTileStateDefault(allTiles) {\n for (const tile of allTiles) {\n tile.state = 0;\n }\n for (const tile of allTiles) {\n if (tile.isSelected && !getPlaceholderInAncestors(tile)) {\n getPlaceholderInChildren(tile);\n }\n }\n for (const tile of allTiles) {\n tile.isVisible = Boolean(tile.state & TILE_STATE_VISIBLE);\n }\n}\n\n// Until a selected tile and all its selected siblings are loaded, use the closest ancestor as placeholder\nfunction updateTileStateReplace(allTiles) {\n for (const tile of allTiles) {\n tile.state = 0;\n }\n for (const tile of allTiles) {\n if (tile.isSelected) {\n getPlaceholderInAncestors(tile);\n }\n }\n // Always process parents first\n const sortedTiles = Array.from(allTiles).sort((t1, t2) => t1.z - t2.z);\n for (const tile of sortedTiles) {\n tile.isVisible = Boolean(tile.state & TILE_STATE_VISIBLE);\n\n if (tile.isVisible || tile.state & TILE_STATE_VISITED) {\n // If the tile is rendered, or if the tile has been explicitly hidden, hide all of its children\n for (const child of tile.children) {\n child.state = TILE_STATE_VISITED;\n }\n } else if (tile.isSelected) {\n getPlaceholderInChildren(tile);\n }\n }\n}\n\n// Walk up the tree until we find one ancestor that is loaded. Returns true if successful.\nfunction getPlaceholderInAncestors(tile) {\n while (tile) {\n if (tile.isLoaded || tile.content) {\n tile.state |= TILE_STATE_VISIBLE;\n return true;\n }\n tile = tile.parent;\n }\n return false;\n}\n\n// Recursively set children as placeholder\nfunction getPlaceholderInChildren(tile) {\n for (const child of tile.children) {\n if (child.isLoaded || child.content) {\n child.state |= TILE_STATE_VISIBLE;\n } else {\n getPlaceholderInChildren(child);\n }\n }\n}\n"],"file":"tileset-2d.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/tile-layer/tileset-2d.js"],"names":["Tile2DHeader","getTileIndices","tileToBoundingBox","RequestScheduler","Matrix4","TILE_STATE_VISITED","TILE_STATE_VISIBLE","STRATEGY_NEVER","STRATEGY_REPLACE","STRATEGY_DEFAULT","DEFAULT_CACHE_SCALE","STRATEGIES","updateTileStateDefault","updateTileStateReplace","Tileset2D","constructor","opts","onTileLoad","tile","maxCacheByteSize","_cacheByteSize","byteLength","_resizeCache","_requestScheduler","maxRequests","throttleRequests","_cache","Map","_tiles","_dirty","_viewport","_selectedTiles","_frameNumber","_modelMatrix","_modelMatrixInverse","setOptions","tiles","selectedTiles","isLoaded","every","needsReload","some","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","clone","invert","tileIndices","modelMatrixInverse","map","index","_getTile","_rebuildTree","x","y","z","changed","updateTileStates","_pruneRequests","tileSize","extent","zoomOffset","getTileMetadata","bbox","getParentIndex","tileIndex","refinementStrategy","visibilities","Array","size","i","isVisible","isSelected","from","abortCandidates","ongoingRequestCount","push","length","shift","parent","children","_getNearestAncestor","maxCacheSize","Infinity","overflown","onTileUnload","sort","t1","t2","create","set","loadData","getData","getTileData","requestScheduler","onLoad","onError","onTileError","allTiles","state","getPlaceholderInAncestors","getPlaceholderInChildren","Boolean","sortedTiles","child","content"],"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/core';\n\n// bit masks\nconst TILE_STATE_VISITED = 1;\nconst TILE_STATE_VISIBLE = 2;\n/*\n show cached parent tile if children are loading\n +-----------+ +-----+ +-----+-----+\n | | | | | | |\n | | | | | | |\n | | --> +-----+-----+ -> +-----+-----+\n | | | | | | |\n | | | | | | |\n +-----------+ +-----+ +-----+-----+\n\n show cached children tiles when parent is loading\n +-------+---- +------------\n | | |\n | | |\n | | |\n +-------+---- --> |\n | | |\n */\n\nexport const STRATEGY_NEVER = 'never';\nexport const STRATEGY_REPLACE = 'no-overlap';\nexport const STRATEGY_DEFAULT = 'best-available';\n\nconst DEFAULT_CACHE_SCALE = 5;\n\nconst STRATEGIES = {\n [STRATEGY_DEFAULT]: updateTileStateDefault,\n [STRATEGY_REPLACE]: updateTileStateReplace,\n [STRATEGY_NEVER]: () => {}\n};\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._modelMatrix = new Matrix4();\n this._modelMatrixInverse = new Matrix4();\n\n this.setOptions(opts);\n }\n\n /* Public API */\n get tiles() {\n return this._tiles;\n }\n\n get selectedTiles() {\n return this._selectedTiles;\n }\n\n get isLoaded() {\n return this._selectedTiles.every(tile => tile.isLoaded);\n }\n\n get needsReload() {\n return this._selectedTiles.some(tile => tile.needsReload);\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 = modelMatrixAsMatrix4.clone().invert();\n this._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 // Check for needed reloads explicitly even if the view/matrix has not changed.\n } else if (this.needsReload) {\n this._selectedTiles = this._selectedTiles.map(tile =>\n this._getTile({x: tile.x, y: tile.y, z: tile.z})\n );\n }\n\n // Update tile states\n const changed = this.updateTileStates();\n this._pruneRequests();\n\n if (this._dirty) {\n // cache size is either the user defined maxSize or 5 * number of current tiles in the viewport.\n this._resizeCache();\n }\n\n if (changed) {\n this._frameNumber++;\n }\n\n return this._frameNumber;\n }\n\n /* 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 const refinementStrategy = this.opts.refinementStrategy || STRATEGY_DEFAULT;\n\n const visibilities = new Array(this._cache.size);\n let i = 0;\n // Reset state\n for (const tile of this._cache.values()) {\n // save previous state\n visibilities[i++] = tile.isVisible;\n tile.isSelected = false;\n tile.isVisible = false;\n }\n for (const tile of this._selectedTiles) {\n tile.isSelected = true;\n tile.isVisible = true;\n }\n\n // Strategy-specific state logic\n (typeof refinementStrategy === 'function'\n ? refinementStrategy\n : STRATEGIES[refinementStrategy])(Array.from(this._cache.values()));\n\n i = 0;\n // Check if any visibility has changed\n for (const tile of this._cache.values()) {\n if (visibilities[i++] !== tile.isVisible) {\n return true;\n }\n }\n\n return false;\n }\n\n /* Private methods */\n\n _pruneRequests() {\n const {maxRequests} = this.opts;\n\n const abortCandidates = [];\n let ongoingRequestCount = 0;\n for (const tile of this._cache.values()) {\n // Keep track of all the ongoing requests\n if (tile.isLoading) {\n ongoingRequestCount++;\n if (!tile.isSelected && !tile.isVisible) {\n abortCandidates.push(tile);\n }\n }\n }\n\n while (maxRequests > 0 && ongoingRequestCount > maxRequests && abortCandidates.length > 0) {\n // There are too many ongoing requests, so abort some that are unselected\n const tile = abortCandidates.shift();\n tile.abort();\n ongoingRequestCount--;\n }\n }\n\n // This needs to be called every time some tiles have been added/removed from cache\n _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 /**\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/* -- Refinement strategies --*/\n/* eslint-disable max-depth */\n\n// For all the selected && pending tiles:\n// - pick the closest ancestor as placeholder\n// - if no ancestor is visible, pick the closest children as placeholder\nfunction updateTileStateDefault(allTiles) {\n for (const tile of allTiles) {\n tile.state = 0;\n }\n for (const tile of allTiles) {\n if (tile.isSelected && !getPlaceholderInAncestors(tile)) {\n getPlaceholderInChildren(tile);\n }\n }\n for (const tile of allTiles) {\n tile.isVisible = Boolean(tile.state & TILE_STATE_VISIBLE);\n }\n}\n\n// Until a selected tile and all its selected siblings are loaded, use the closest ancestor as placeholder\nfunction updateTileStateReplace(allTiles) {\n for (const tile of allTiles) {\n tile.state = 0;\n }\n for (const tile of allTiles) {\n if (tile.isSelected) {\n getPlaceholderInAncestors(tile);\n }\n }\n // Always process parents first\n const sortedTiles = Array.from(allTiles).sort((t1, t2) => t1.z - t2.z);\n for (const tile of sortedTiles) {\n tile.isVisible = Boolean(tile.state & TILE_STATE_VISIBLE);\n\n if (tile.isVisible || tile.state & TILE_STATE_VISITED) {\n // If the tile is rendered, or if the tile has been explicitly hidden, hide all of its children\n for (const child of tile.children) {\n child.state = TILE_STATE_VISITED;\n }\n } else if (tile.isSelected) {\n getPlaceholderInChildren(tile);\n }\n }\n}\n\n// Walk up the tree until we find one ancestor that is loaded. Returns true if successful.\nfunction getPlaceholderInAncestors(tile) {\n while (tile) {\n if (tile.isLoaded || tile.content) {\n tile.state |= TILE_STATE_VISIBLE;\n return true;\n }\n tile = tile.parent;\n }\n return false;\n}\n\n// Recursively set children as placeholder\nfunction getPlaceholderInChildren(tile) {\n for (const child of tile.children) {\n if (child.isLoaded || child.content) {\n child.state |= TILE_STATE_VISIBLE;\n } else {\n getPlaceholderInChildren(child);\n }\n }\n}\n"],"file":"tileset-2d.js"}
|