@deck.gl/geo-layers 8.6.0-alpha.3 → 8.6.1
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 +4574 -622
- package/dist/es5/h3-layers/h3-hexagon-layer.js +61 -46
- package/dist/es5/h3-layers/h3-hexagon-layer.js.map +1 -1
- package/dist/es5/mvt-layer/mvt-layer.js +2 -2
- package/dist/es5/mvt-layer/mvt-layer.js.map +1 -1
- package/dist/es5/tile-3d-layer/tile-3d-layer.js +1 -1
- package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +1 -1
- package/dist/es5/tile-layer/tile-2d-header.js +70 -55
- package/dist/es5/tile-layer/tile-2d-header.js.map +1 -1
- package/dist/es5/tile-layer/tile-2d-traversal.js +42 -4
- package/dist/es5/tile-layer/tile-2d-traversal.js.map +1 -1
- package/dist/es5/tile-layer/tile-layer.js +31 -33
- package/dist/es5/tile-layer/tile-layer.js.map +1 -1
- package/dist/es5/tile-layer/tileset-2d.js +102 -67
- package/dist/es5/tile-layer/tileset-2d.js.map +1 -1
- package/dist/es5/tile-layer/utils.js +1 -1
- package/dist/es5/tile-layer/utils.js.map +1 -1
- package/dist/esm/h3-layers/h3-hexagon-layer.js +52 -38
- package/dist/esm/h3-layers/h3-hexagon-layer.js.map +1 -1
- package/dist/esm/mvt-layer/mvt-layer.js +2 -4
- package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
- package/dist/esm/tile-3d-layer/tile-3d-layer.js +1 -1
- package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +1 -1
- package/dist/esm/tile-layer/tile-2d-header.js +43 -31
- package/dist/esm/tile-layer/tile-2d-header.js.map +1 -1
- package/dist/esm/tile-layer/tile-2d-traversal.js +23 -1
- package/dist/esm/tile-layer/tile-2d-traversal.js.map +1 -1
- package/dist/esm/tile-layer/tile-layer.js +29 -33
- package/dist/esm/tile-layer/tile-layer.js.map +1 -1
- package/dist/esm/tile-layer/tileset-2d.js +34 -11
- package/dist/esm/tile-layer/tileset-2d.js.map +1 -1
- package/dist/esm/tile-layer/utils.js +1 -1
- package/dist/esm/tile-layer/utils.js.map +1 -1
- package/dist.min.js +2 -2
- package/package.json +3 -3
- package/src/h3-layers/h3-hexagon-layer.js +47 -37
- package/src/mvt-layer/mvt-layer.js +2 -2
- package/src/tile-3d-layer/tile-3d-layer.js +1 -1
- package/src/tile-layer/tile-2d-header.js +43 -32
- package/src/tile-layer/tile-2d-traversal.js +28 -2
- package/src/tile-layer/tile-layer.js +33 -34
- package/src/tile-layer/tileset-2d.js +29 -15
- package/src/tile-layer/utils.js +1 -1
|
@@ -46,11 +46,9 @@ var Tileset2D = function () {
|
|
|
46
46
|
|
|
47
47
|
(0, _classCallCheck2.default)(this, Tileset2D);
|
|
48
48
|
this.opts = opts;
|
|
49
|
-
this._getTileData = opts.getTileData;
|
|
50
|
-
this.onTileError = opts.onTileError;
|
|
51
49
|
|
|
52
50
|
this.onTileLoad = function (tile) {
|
|
53
|
-
opts.onTileLoad(tile);
|
|
51
|
+
_this.opts.onTileLoad(tile);
|
|
54
52
|
|
|
55
53
|
if (_this.opts.maxCacheByteSize) {
|
|
56
54
|
_this._cacheByteSize += tile.byteLength;
|
|
@@ -59,7 +57,6 @@ var Tileset2D = function () {
|
|
|
59
57
|
}
|
|
60
58
|
};
|
|
61
59
|
|
|
62
|
-
this.onTileUnload = opts.onTileUnload;
|
|
63
60
|
this._requestScheduler = new _loaderUtils.RequestScheduler({
|
|
64
61
|
maxRequests: opts.maxRequests,
|
|
65
62
|
throttleRequests: opts.maxRequests > 0
|
|
@@ -106,6 +103,35 @@ var Tileset2D = function () {
|
|
|
106
103
|
} finally {
|
|
107
104
|
_iterator.f();
|
|
108
105
|
}
|
|
106
|
+
|
|
107
|
+
this._cache.clear();
|
|
108
|
+
|
|
109
|
+
this._tiles = [];
|
|
110
|
+
this._selectedTiles = null;
|
|
111
|
+
}
|
|
112
|
+
}, {
|
|
113
|
+
key: "reloadAll",
|
|
114
|
+
value: function reloadAll() {
|
|
115
|
+
var _iterator2 = _createForOfIteratorHelper(this._cache.keys()),
|
|
116
|
+
_step2;
|
|
117
|
+
|
|
118
|
+
try {
|
|
119
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
120
|
+
var tileId = _step2.value;
|
|
121
|
+
|
|
122
|
+
var tile = this._cache.get(tileId);
|
|
123
|
+
|
|
124
|
+
if (!this._selectedTiles.includes(tile)) {
|
|
125
|
+
this._cache.delete(tileId);
|
|
126
|
+
} else {
|
|
127
|
+
tile.setNeedsReload();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
} catch (err) {
|
|
131
|
+
_iterator2.e(err);
|
|
132
|
+
} finally {
|
|
133
|
+
_iterator2.f();
|
|
134
|
+
}
|
|
109
135
|
}
|
|
110
136
|
}, {
|
|
111
137
|
key: "update",
|
|
@@ -209,12 +235,12 @@ var Tileset2D = function () {
|
|
|
209
235
|
var ongoingRequestCount = 0;
|
|
210
236
|
var changed = false;
|
|
211
237
|
|
|
212
|
-
var
|
|
213
|
-
|
|
238
|
+
var _iterator3 = _createForOfIteratorHelper(this._cache.values()),
|
|
239
|
+
_step3;
|
|
214
240
|
|
|
215
241
|
try {
|
|
216
|
-
for (
|
|
217
|
-
var _tile =
|
|
242
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
243
|
+
var _tile = _step3.value;
|
|
218
244
|
var isVisible = Boolean(_tile.state & TILE_STATE_VISIBLE);
|
|
219
245
|
|
|
220
246
|
if (_tile.isVisible !== isVisible) {
|
|
@@ -233,9 +259,9 @@ var Tileset2D = function () {
|
|
|
233
259
|
}
|
|
234
260
|
}
|
|
235
261
|
} catch (err) {
|
|
236
|
-
|
|
262
|
+
_iterator3.e(err);
|
|
237
263
|
} finally {
|
|
238
|
-
|
|
264
|
+
_iterator3.f();
|
|
239
265
|
}
|
|
240
266
|
|
|
241
267
|
if (maxRequests > 0) {
|
|
@@ -253,27 +279,27 @@ var Tileset2D = function () {
|
|
|
253
279
|
value: function _rebuildTree() {
|
|
254
280
|
var _cache = this._cache;
|
|
255
281
|
|
|
256
|
-
var
|
|
257
|
-
|
|
282
|
+
var _iterator4 = _createForOfIteratorHelper(_cache.values()),
|
|
283
|
+
_step4;
|
|
258
284
|
|
|
259
285
|
try {
|
|
260
|
-
for (
|
|
261
|
-
var tile =
|
|
286
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
287
|
+
var tile = _step4.value;
|
|
262
288
|
tile.parent = null;
|
|
263
289
|
tile.children.length = 0;
|
|
264
290
|
}
|
|
265
291
|
} catch (err) {
|
|
266
|
-
|
|
292
|
+
_iterator4.e(err);
|
|
267
293
|
} finally {
|
|
268
|
-
|
|
294
|
+
_iterator4.f();
|
|
269
295
|
}
|
|
270
296
|
|
|
271
|
-
var
|
|
272
|
-
|
|
297
|
+
var _iterator5 = _createForOfIteratorHelper(_cache.values()),
|
|
298
|
+
_step5;
|
|
273
299
|
|
|
274
300
|
try {
|
|
275
|
-
for (
|
|
276
|
-
var _tile2 =
|
|
301
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
302
|
+
var _tile2 = _step5.value;
|
|
277
303
|
|
|
278
304
|
var parent = this._getNearestAncestor(_tile2.x, _tile2.y, _tile2.z);
|
|
279
305
|
|
|
@@ -284,9 +310,9 @@ var Tileset2D = function () {
|
|
|
284
310
|
}
|
|
285
311
|
}
|
|
286
312
|
} catch (err) {
|
|
287
|
-
|
|
313
|
+
_iterator5.e(err);
|
|
288
314
|
} finally {
|
|
289
|
-
|
|
315
|
+
_iterator5.f();
|
|
290
316
|
}
|
|
291
317
|
}
|
|
292
318
|
}, {
|
|
@@ -295,67 +321,67 @@ var Tileset2D = function () {
|
|
|
295
321
|
var _cache = this._cache;
|
|
296
322
|
var refinementStrategy = this.opts.refinementStrategy || STRATEGY_DEFAULT;
|
|
297
323
|
|
|
298
|
-
var
|
|
299
|
-
|
|
324
|
+
var _iterator6 = _createForOfIteratorHelper(_cache.values()),
|
|
325
|
+
_step6;
|
|
300
326
|
|
|
301
327
|
try {
|
|
302
|
-
for (
|
|
303
|
-
var tile =
|
|
328
|
+
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
|
329
|
+
var tile = _step6.value;
|
|
304
330
|
tile.state = TILE_STATE_UNKNOWN;
|
|
305
331
|
}
|
|
306
332
|
} catch (err) {
|
|
307
|
-
|
|
333
|
+
_iterator6.e(err);
|
|
308
334
|
} finally {
|
|
309
|
-
|
|
335
|
+
_iterator6.f();
|
|
310
336
|
}
|
|
311
337
|
|
|
312
|
-
var
|
|
313
|
-
|
|
338
|
+
var _iterator7 = _createForOfIteratorHelper(selectedTiles),
|
|
339
|
+
_step7;
|
|
314
340
|
|
|
315
341
|
try {
|
|
316
|
-
for (
|
|
317
|
-
var _tile3 =
|
|
342
|
+
for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
|
|
343
|
+
var _tile3 = _step7.value;
|
|
318
344
|
_tile3.state = TILE_STATE_SELECTED;
|
|
319
345
|
}
|
|
320
346
|
} catch (err) {
|
|
321
|
-
|
|
347
|
+
_iterator7.e(err);
|
|
322
348
|
} finally {
|
|
323
|
-
|
|
349
|
+
_iterator7.f();
|
|
324
350
|
}
|
|
325
351
|
|
|
326
352
|
if (refinementStrategy === STRATEGY_NEVER) {
|
|
327
353
|
return;
|
|
328
354
|
}
|
|
329
355
|
|
|
330
|
-
var
|
|
331
|
-
|
|
356
|
+
var _iterator8 = _createForOfIteratorHelper(selectedTiles),
|
|
357
|
+
_step8;
|
|
332
358
|
|
|
333
359
|
try {
|
|
334
|
-
for (
|
|
335
|
-
var _tile4 =
|
|
360
|
+
for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
|
|
361
|
+
var _tile4 = _step8.value;
|
|
336
362
|
getPlaceholderInAncestors(_tile4, refinementStrategy);
|
|
337
363
|
}
|
|
338
364
|
} catch (err) {
|
|
339
|
-
|
|
365
|
+
_iterator8.e(err);
|
|
340
366
|
} finally {
|
|
341
|
-
|
|
367
|
+
_iterator8.f();
|
|
342
368
|
}
|
|
343
369
|
|
|
344
|
-
var
|
|
345
|
-
|
|
370
|
+
var _iterator9 = _createForOfIteratorHelper(selectedTiles),
|
|
371
|
+
_step9;
|
|
346
372
|
|
|
347
373
|
try {
|
|
348
|
-
for (
|
|
349
|
-
var _tile5 =
|
|
374
|
+
for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
|
|
375
|
+
var _tile5 = _step9.value;
|
|
350
376
|
|
|
351
377
|
if (needsPlaceholder(_tile5)) {
|
|
352
378
|
getPlaceholderInChildren(_tile5);
|
|
353
379
|
}
|
|
354
380
|
}
|
|
355
381
|
} catch (err) {
|
|
356
|
-
|
|
382
|
+
_iterator9.e(err);
|
|
357
383
|
} finally {
|
|
358
|
-
|
|
384
|
+
_iterator9.f();
|
|
359
385
|
}
|
|
360
386
|
}
|
|
361
387
|
}, {
|
|
@@ -368,21 +394,21 @@ var Tileset2D = function () {
|
|
|
368
394
|
var overflown = _cache.size > maxCacheSize || this._cacheByteSize > maxCacheByteSize;
|
|
369
395
|
|
|
370
396
|
if (overflown) {
|
|
371
|
-
var
|
|
372
|
-
|
|
397
|
+
var _iterator10 = _createForOfIteratorHelper(_cache),
|
|
398
|
+
_step10;
|
|
373
399
|
|
|
374
400
|
try {
|
|
375
|
-
for (
|
|
376
|
-
var
|
|
377
|
-
tileId =
|
|
378
|
-
tile =
|
|
401
|
+
for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
|
|
402
|
+
var _step10$value = (0, _slicedToArray2.default)(_step10.value, 2),
|
|
403
|
+
tileId = _step10$value[0],
|
|
404
|
+
tile = _step10$value[1];
|
|
379
405
|
|
|
380
406
|
if (!tile.isVisible) {
|
|
381
407
|
this._cacheByteSize -= opts.maxCacheByteSize ? tile.byteLength : 0;
|
|
382
408
|
|
|
383
409
|
_cache.delete(tileId);
|
|
384
410
|
|
|
385
|
-
this.onTileUnload(tile);
|
|
411
|
+
this.opts.onTileUnload(tile);
|
|
386
412
|
}
|
|
387
413
|
|
|
388
414
|
if (_cache.size <= maxCacheSize && this._cacheByteSize <= maxCacheByteSize) {
|
|
@@ -390,9 +416,9 @@ var Tileset2D = function () {
|
|
|
390
416
|
}
|
|
391
417
|
}
|
|
392
418
|
} catch (err) {
|
|
393
|
-
|
|
419
|
+
_iterator10.e(err);
|
|
394
420
|
} finally {
|
|
395
|
-
|
|
421
|
+
_iterator10.f();
|
|
396
422
|
}
|
|
397
423
|
|
|
398
424
|
this._rebuildTree();
|
|
@@ -417,22 +443,31 @@ var Tileset2D = function () {
|
|
|
417
443
|
|
|
418
444
|
var tile = this._cache.get(tileId);
|
|
419
445
|
|
|
446
|
+
var needsReload = false;
|
|
447
|
+
|
|
420
448
|
if (!tile && create) {
|
|
421
449
|
tile = new _tile2dHeader.default({
|
|
422
450
|
x: x,
|
|
423
451
|
y: y,
|
|
424
|
-
z: z
|
|
425
|
-
onTileLoad: this.onTileLoad,
|
|
426
|
-
onTileError: this.onTileError
|
|
452
|
+
z: z
|
|
427
453
|
});
|
|
428
454
|
Object.assign(tile, this.getTileMetadata(tile));
|
|
429
|
-
|
|
455
|
+
needsReload = true;
|
|
430
456
|
|
|
431
457
|
this._cache.set(tileId, tile);
|
|
432
458
|
|
|
433
459
|
this._dirty = true;
|
|
434
|
-
} else if (tile && tile.
|
|
435
|
-
|
|
460
|
+
} else if (tile && tile.needsReload) {
|
|
461
|
+
needsReload = true;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
if (needsReload) {
|
|
465
|
+
tile.loadData({
|
|
466
|
+
getData: this.opts.getTileData,
|
|
467
|
+
requestScheduler: this._requestScheduler,
|
|
468
|
+
onLoad: this.onTileLoad,
|
|
469
|
+
onError: this.opts.onTileError
|
|
470
|
+
});
|
|
436
471
|
}
|
|
437
472
|
|
|
438
473
|
return tile;
|
|
@@ -521,12 +556,12 @@ function getPlaceholderInAncestors(tile, refinementStrategy) {
|
|
|
521
556
|
}
|
|
522
557
|
|
|
523
558
|
function getPlaceholderInChildren(tile) {
|
|
524
|
-
var
|
|
525
|
-
|
|
559
|
+
var _iterator11 = _createForOfIteratorHelper(tile.children),
|
|
560
|
+
_step11;
|
|
526
561
|
|
|
527
562
|
try {
|
|
528
|
-
for (
|
|
529
|
-
var child =
|
|
563
|
+
for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
|
|
564
|
+
var child = _step11.value;
|
|
530
565
|
child.state = Math.max(child.state, TILE_STATE_PLACEHOLDER);
|
|
531
566
|
|
|
532
567
|
if (!child.isLoaded) {
|
|
@@ -534,9 +569,9 @@ function getPlaceholderInChildren(tile) {
|
|
|
534
569
|
}
|
|
535
570
|
}
|
|
536
571
|
} catch (err) {
|
|
537
|
-
|
|
572
|
+
_iterator11.e(err);
|
|
538
573
|
} finally {
|
|
539
|
-
|
|
574
|
+
_iterator11.f();
|
|
540
575
|
}
|
|
541
576
|
}
|
|
542
577
|
//# sourceMappingURL=tileset-2d.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/tile-layer/tileset-2d.js"],"names":["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","opts","_getTileData","getTileData","onTileError","onTileLoad","tile","maxCacheByteSize","_cacheByteSize","byteLength","_resizeCache","onTileUnload","_requestScheduler","RequestScheduler","maxRequests","throttleRequests","_cache","Map","_tiles","_dirty","_viewport","_selectedTiles","_frameNumber","setOptions","Object","assign","Number","isFinite","maxZoom","_maxZoom","Math","floor","minZoom","_minZoom","ceil","values","isLoading","abort","viewport","zRange","modelMatrix","modelMatrixAsMatrix4","Matrix4","isModelMatrixNew","equals","_modelMatrix","_modelMatrixInverse","clone","invert","tileIndices","getTileIndices","modelMatrixInverse","map","index","_getTile","_rebuildTree","changed","updateTileStates","tileSize","extent","zoomOffset","x","y","z","bbox","tileIndex","_updateTileStates","selectedTiles","abortCandidates","ongoingRequestCount","isVisible","Boolean","state","isSelected","push","length","shift","parent","children","_getNearestAncestor","refinementStrategy","getPlaceholderInAncestors","needsPlaceholder","getPlaceholderInChildren","maxCacheSize","Infinity","overflown","size","tileId","delete","Array","from","sort","t1","t2","create","get","Tile2DHeader","getTileMetadata","loadData","set","isCancelled","getParentIndex","every","isLoaded","t","max","child"],"mappings":";;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;;;AAEA,IAAMA,kBAAkB,GAAG,CAA3B;AACA,IAAMC,kBAAkB,GAAG,CAA3B;AAmBA,IAAMC,sBAAsB,GAAG,CAA/B;AACA,IAAMC,iBAAiB,GAAG,CAA1B;AAEA,IAAMC,mBAAmB,GAAG,CAA5B;AAEO,IAAMC,cAAc,GAAG,OAAvB;;AACA,IAAMC,gBAAgB,GAAG,YAAzB;;AACA,IAAMC,gBAAgB,GAAG,gBAAzB;;AAEP,IAAMC,mBAAmB,GAAG,CAA5B;;IAOqBC,S;AAKnB,qBAAYC,IAAZ,EAAkB;AAAA;;AAAA;AAChB,SAAKA,IAAL,GAAYA,IAAZ;AACA,SAAKC,YAAL,GAAoBD,IAAI,CAACE,WAAzB;AAEA,SAAKC,WAAL,GAAmBH,IAAI,CAACG,WAAxB;;AACA,SAAKC,UAAL,GAAkB,UAAAC,IAAI,EAAI;AACxBL,MAAAA,IAAI,CAACI,UAAL,CAAgBC,IAAhB;;AACA,UAAI,KAAI,CAACL,IAAL,CAAUM,gBAAd,EAAgC;AAC9B,QAAA,KAAI,CAACC,cAAL,IAAuBF,IAAI,CAACG,UAA5B;;AACA,QAAA,KAAI,CAACC,YAAL;AACD;AACF,KAND;;AAOA,SAAKC,YAAL,GAAoBV,IAAI,CAACU,YAAzB;AAEA,SAAKC,iBAAL,GAAyB,IAAIC,6BAAJ,CAAqB;AAC5CC,MAAAA,WAAW,EAAEb,IAAI,CAACa,WAD0B;AAE5CC,MAAAA,gBAAgB,EAAEd,IAAI,CAACa,WAAL,GAAmB;AAFO,KAArB,CAAzB;AAMA,SAAKE,MAAL,GAAc,IAAIC,GAAJ,EAAd;AACA,SAAKC,MAAL,GAAc,EAAd;AACA,SAAKC,MAAL,GAAc,KAAd;AACA,SAAKX,cAAL,GAAsB,CAAtB;AAGA,SAAKY,SAAL,GAAiB,IAAjB;AACA,SAAKC,cAAL,GAAsB,IAAtB;AACA,SAAKC,YAAL,GAAoB,CAApB;AAEA,SAAKC,UAAL,CAAgBtB,IAAhB;AACD;;;;+BAeUA,I,EAAM;AACfuB,MAAAA,MAAM,CAACC,MAAP,CAAc,KAAKxB,IAAnB,EAAyBA,IAAzB;;AACA,UAAIyB,MAAM,CAACC,QAAP,CAAgB1B,IAAI,CAAC2B,OAArB,CAAJ,EAAmC;AACjC,aAAKC,QAAL,GAAgBC,IAAI,CAACC,KAAL,CAAW9B,IAAI,CAAC2B,OAAhB,CAAhB;AACD;;AACD,UAAIF,MAAM,CAACC,QAAP,CAAgB1B,IAAI,CAAC+B,OAArB,CAAJ,EAAmC;AACjC,aAAKC,QAAL,GAAgBH,IAAI,CAACI,IAAL,CAAUjC,IAAI,CAAC+B,OAAf,CAAhB;AACD;AACF;;;+BAGU;AAAA,iDACU,KAAKhB,MAAL,CAAYmB,MAAZ,EADV;AAAA;;AAAA;AACT,4DAAyC;AAAA,cAA9B7B,IAA8B;;AACvC,cAAIA,IAAI,CAAC8B,SAAT,EAAoB;AAClB9B,YAAAA,IAAI,CAAC+B,KAAL;AACD;AACF;AALQ;AAAA;AAAA;AAAA;AAAA;AAMV;;;2BAQMC,Q,EAAsC;AAAA;;AAAA,qFAAJ,EAAI;AAAA,UAA3BC,MAA2B,QAA3BA,MAA2B;AAAA,UAAnBC,WAAmB,QAAnBA,WAAmB;;AAC3C,UAAMC,oBAAoB,GAAG,IAAIC,aAAJ,CAAYF,WAAZ,CAA7B;AACA,UAAMG,gBAAgB,GAAG,CAACF,oBAAoB,CAACG,MAArB,CAA4B,KAAKC,YAAjC,CAA1B;;AACA,UAAI,CAACP,QAAQ,CAACM,MAAT,CAAgB,KAAKxB,SAArB,CAAD,IAAoCuB,gBAAxC,EAA0D;AACxD,YAAIA,gBAAJ,EAAsB;AACpB,eAAKG,mBAAL,GAA2BN,WAAW,IAAIC,oBAAoB,CAACM,KAArB,GAA6BC,MAA7B,EAA1C;AACA,eAAKH,YAAL,GAAoBL,WAAW,IAAIC,oBAAnC;AACD;;AACD,aAAKrB,SAAL,GAAiBkB,QAAjB;AACA,YAAMW,WAAW,GAAG,KAAKC,cAAL,CAAoB;AACtCZ,UAAAA,QAAQ,EAARA,QADsC;AAEtCV,UAAAA,OAAO,EAAE,KAAKC,QAFwB;AAGtCG,UAAAA,OAAO,EAAE,KAAKC,QAHwB;AAItCM,UAAAA,MAAM,EAANA,MAJsC;AAKtCC,UAAAA,WAAW,EAAE,KAAKK,YALoB;AAMtCM,UAAAA,kBAAkB,EAAE,KAAKL;AANa,SAApB,CAApB;AAQA,aAAKzB,cAAL,GAAsB4B,WAAW,CAACG,GAAZ,CAAgB,UAAAC,KAAK;AAAA,iBAAI,MAAI,CAACC,QAAL,CAAcD,KAAd,EAAqB,IAArB,CAAJ;AAAA,SAArB,CAAtB;;AAEA,YAAI,KAAKlC,MAAT,EAAiB;AAEf,eAAKoC,YAAL;AACD;AACF;;AAGD,UAAMC,OAAO,GAAG,KAAKC,gBAAL,EAAhB;;AAEA,UAAI,KAAKtC,MAAT,EAAiB;AAEf,aAAKT,YAAL;AACD;;AAED,UAAI8C,OAAJ,EAAa;AACX,aAAKlC,YAAL;AACD;;AAED,aAAO,KAAKA,YAAZ;AACD;;;0CAKqF;AAAA,UAAtEgB,QAAsE,SAAtEA,QAAsE;AAAA,UAA5DV,OAA4D,SAA5DA,OAA4D;AAAA,UAAnDI,OAAmD,SAAnDA,OAAmD;AAAA,UAA1CO,MAA0C,SAA1CA,MAA0C;AAAA,UAAlCC,WAAkC,SAAlCA,WAAkC;AAAA,UAArBW,kBAAqB,SAArBA,kBAAqB;AAAA,uBAC7C,KAAKlD,IADwC;AAAA,UAC7EyD,QAD6E,cAC7EA,QAD6E;AAAA,UACnEC,MADmE,cACnEA,MADmE;AAAA,UAC3DC,UAD2D,cAC3DA,UAD2D;AAEpF,aAAO,2BAAe;AACpBtB,QAAAA,QAAQ,EAARA,QADoB;AAEpBV,QAAAA,OAAO,EAAPA,OAFoB;AAGpBI,QAAAA,OAAO,EAAPA,OAHoB;AAIpBO,QAAAA,MAAM,EAANA,MAJoB;AAKpBmB,QAAAA,QAAQ,EAARA,QALoB;AAMpBC,QAAAA,MAAM,EAANA,MANoB;AAOpBnB,QAAAA,WAAW,EAAXA,WAPoB;AAQpBW,QAAAA,kBAAkB,EAAlBA,kBARoB;AASpBS,QAAAA,UAAU,EAAVA;AAToB,OAAf,CAAP;AAWD;;;2CAG0B;AAAA,UAAVC,CAAU,SAAVA,CAAU;AAAA,UAAPC,CAAO,SAAPA,CAAO;AAAA,UAAJC,CAAI,SAAJA,CAAI;AAAA,UAClBL,QADkB,GACN,KAAKzD,IADC,CAClByD,QADkB;AAEzB,aAAO;AAACM,QAAAA,IAAI,EAAE,8BAAkB,KAAK5C,SAAvB,EAAkCyC,CAAlC,EAAqCC,CAArC,EAAwCC,CAAxC,EAA2CL,QAA3C;AAAP,OAAP;AACD;;;mCAGcO,S,EAAW;AAExBA,MAAAA,SAAS,CAACJ,CAAV,GAAc/B,IAAI,CAACC,KAAL,CAAWkC,SAAS,CAACJ,CAAV,GAAc,CAAzB,CAAd;AACAI,MAAAA,SAAS,CAACH,CAAV,GAAchC,IAAI,CAACC,KAAL,CAAWkC,SAAS,CAACH,CAAV,GAAc,CAAzB,CAAd;AACAG,MAAAA,SAAS,CAACF,CAAV,IAAe,CAAf;AACA,aAAOE,SAAP;AACD;;;uCAGkB;AACjB,WAAKC,iBAAL,CAAuB,KAAKC,aAA5B;;AADiB,UAGVrD,WAHU,GAGK,KAAKb,IAHV,CAGVa,WAHU;AAKjB,UAAMsD,eAAe,GAAG,EAAxB;AACA,UAAIC,mBAAmB,GAAG,CAA1B;AACA,UAAIb,OAAO,GAAG,KAAd;;AAPiB,kDAQE,KAAKxC,MAAL,CAAYmB,MAAZ,EARF;AAAA;;AAAA;AAQjB,+DAAyC;AAAA,cAA9B7B,KAA8B;AACvC,cAAMgE,SAAS,GAAGC,OAAO,CAACjE,KAAI,CAACkE,KAAL,GAAahF,kBAAd,CAAzB;;AACA,cAAIc,KAAI,CAACgE,SAAL,KAAmBA,SAAvB,EAAkC;AAChCd,YAAAA,OAAO,GAAG,IAAV;AACAlD,YAAAA,KAAI,CAACgE,SAAL,GAAiBA,SAAjB;AACD;;AAGDhE,UAAAA,KAAI,CAACmE,UAAL,GAAkBnE,KAAI,CAACkE,KAAL,KAAe7E,mBAAjC;;AAGA,cAAIW,KAAI,CAAC8B,SAAT,EAAoB;AAClBiC,YAAAA,mBAAmB;;AACnB,gBAAI,CAAC/D,KAAI,CAACmE,UAAV,EAAsB;AACpBL,cAAAA,eAAe,CAACM,IAAhB,CAAqBpE,KAArB;AACD;AACF;AACF;AAzBgB;AAAA;AAAA;AAAA;AAAA;;AA2BjB,UAAIQ,WAAW,GAAG,CAAlB,EAAqB;AACnB,eAAOuD,mBAAmB,GAAGvD,WAAtB,IAAqCsD,eAAe,CAACO,MAAhB,GAAyB,CAArE,EAAwE;AAEtE,cAAMrE,IAAI,GAAG8D,eAAe,CAACQ,KAAhB,EAAb;AACAtE,UAAAA,IAAI,CAAC+B,KAAL;AACAgC,UAAAA,mBAAmB;AACpB;AACF;;AAED,aAAOb,OAAP;AACD;;;mCAKc;AAAA,UACNxC,MADM,GACI,IADJ,CACNA,MADM;;AAAA,kDAIMA,MAAM,CAACmB,MAAP,EAJN;AAAA;;AAAA;AAIb,+DAAoC;AAAA,cAAzB7B,IAAyB;AAClCA,UAAAA,IAAI,CAACuE,MAAL,GAAc,IAAd;AACAvE,UAAAA,IAAI,CAACwE,QAAL,CAAcH,MAAd,GAAuB,CAAvB;AACD;AAPY;AAAA;AAAA;AAAA;AAAA;;AAAA,kDAUM3D,MAAM,CAACmB,MAAP,EAVN;AAAA;;AAAA;AAUb,+DAAoC;AAAA,cAAzB7B,MAAyB;;AAClC,cAAMuE,MAAM,GAAG,KAAKE,mBAAL,CAAyBzE,MAAI,CAACuD,CAA9B,EAAiCvD,MAAI,CAACwD,CAAtC,EAAyCxD,MAAI,CAACyD,CAA9C,CAAf;;AACAzD,UAAAA,MAAI,CAACuE,MAAL,GAAcA,MAAd;;AACA,cAAIA,MAAJ,EAAY;AACVA,YAAAA,MAAM,CAACC,QAAP,CAAgBJ,IAAhB,CAAqBpE,MAArB;AACD;AACF;AAhBY;AAAA;AAAA;AAAA;AAAA;AAiBd;;;sCAOiB6D,a,EAAe;AAAA,UACxBnD,MADwB,GACd,IADc,CACxBA,MADwB;AAE/B,UAAMgE,kBAAkB,GAAG,KAAK/E,IAAL,CAAU+E,kBAAV,IAAgClF,gBAA3D;;AAF+B,kDAKZkB,MAAM,CAACmB,MAAP,EALY;AAAA;;AAAA;AAK/B,+DAAoC;AAAA,cAAzB7B,IAAyB;AAClCA,UAAAA,IAAI,CAACkE,KAAL,GAAajF,kBAAb;AACD;AAP8B;AAAA;AAAA;AAAA;AAAA;;AAAA,kDAYZ4E,aAZY;AAAA;;AAAA;AAY/B,+DAAkC;AAAA,cAAvB7D,MAAuB;AAChCA,UAAAA,MAAI,CAACkE,KAAL,GAAa7E,mBAAb;AACD;AAd8B;AAAA;AAAA;AAAA;AAAA;;AAgB/B,UAAIqF,kBAAkB,KAAKpF,cAA3B,EAA2C;AACzC;AACD;;AAlB8B,kDAmBZuE,aAnBY;AAAA;;AAAA;AAmB/B,+DAAkC;AAAA,cAAvB7D,MAAuB;AAChC2E,UAAAA,yBAAyB,CAAC3E,MAAD,EAAO0E,kBAAP,CAAzB;AACD;AArB8B;AAAA;AAAA;AAAA;AAAA;;AAAA,kDAsBZb,aAtBY;AAAA;;AAAA;AAsB/B,+DAAkC;AAAA,cAAvB7D,MAAuB;;AAChC,cAAI4E,gBAAgB,CAAC5E,MAAD,CAApB,EAA4B;AAC1B6E,YAAAA,wBAAwB,CAAC7E,MAAD,CAAxB;AACD;AACF;AA1B8B;AAAA;AAAA;AAAA;AAAA;AA2BhC;;;mCAMc;AAAA,UACNU,MADM,GACU,IADV,CACNA,MADM;AAAA,UACEf,IADF,GACU,IADV,CACEA,IADF;AAGb,UAAMmF,YAAY,GAChBnF,IAAI,CAACmF,YAAL,KACCnF,IAAI,CAACM,gBAAL,GAAwB8E,QAAxB,GAAmCtF,mBAAmB,GAAG,KAAKoE,aAAL,CAAmBQ,MAD7E,CADF;AAGA,UAAMpE,gBAAgB,GAAGN,IAAI,CAACM,gBAAL,IAAyB8E,QAAlD;AAEA,UAAMC,SAAS,GAAGtE,MAAM,CAACuE,IAAP,GAAcH,YAAd,IAA8B,KAAK5E,cAAL,GAAsBD,gBAAtE;;AAEA,UAAI+E,SAAJ,EAAe;AAAA,oDACgBtE,MADhB;AAAA;;AAAA;AACb,iEAAqC;AAAA;AAAA,gBAAzBwE,MAAyB;AAAA,gBAAjBlF,IAAiB;;AACnC,gBAAI,CAACA,IAAI,CAACgE,SAAV,EAAqB;AAEnB,mBAAK9D,cAAL,IAAuBP,IAAI,CAACM,gBAAL,GAAwBD,IAAI,CAACG,UAA7B,GAA0C,CAAjE;;AACAO,cAAAA,MAAM,CAACyE,MAAP,CAAcD,MAAd;;AACA,mBAAK7E,YAAL,CAAkBL,IAAlB;AACD;;AACD,gBAAIU,MAAM,CAACuE,IAAP,IAAeH,YAAf,IAA+B,KAAK5E,cAAL,IAAuBD,gBAA1D,EAA4E;AAC1E;AACD;AACF;AAXY;AAAA;AAAA;AAAA;AAAA;;AAYb,aAAKgD,YAAL;;AACA,aAAKpC,MAAL,GAAc,IAAd;AACD;;AACD,UAAI,KAAKA,MAAT,EAAiB;AACf,aAAKD,MAAL,GAAcwE,KAAK,CAACC,IAAN,CAAW,KAAK3E,MAAL,CAAYmB,MAAZ,EAAX,EAEXyD,IAFW,CAEN,UAACC,EAAD,EAAKC,EAAL;AAAA,iBAAYD,EAAE,CAAC9B,CAAH,GAAO+B,EAAE,CAAC/B,CAAtB;AAAA,SAFM,CAAd;AAIA,aAAK5C,MAAL,GAAc,KAAd;AACD;AACF;;;oCAGmB4E,M,EAAQ;AAAA,UAAlBlC,CAAkB,SAAlBA,CAAkB;AAAA,UAAfC,CAAe,SAAfA,CAAe;AAAA,UAAZC,CAAY,SAAZA,CAAY;AAC1B,UAAMyB,MAAM,aAAM3B,CAAN,cAAWC,CAAX,cAAgBC,CAAhB,CAAZ;;AACA,UAAIzD,IAAI,GAAG,KAAKU,MAAL,CAAYgF,GAAZ,CAAgBR,MAAhB,CAAX;;AAEA,UAAI,CAAClF,IAAD,IAASyF,MAAb,EAAqB;AACnBzF,QAAAA,IAAI,GAAG,IAAI2F,qBAAJ,CAAiB;AACtBpC,UAAAA,CAAC,EAADA,CADsB;AAEtBC,UAAAA,CAAC,EAADA,CAFsB;AAGtBC,UAAAA,CAAC,EAADA,CAHsB;AAItB1D,UAAAA,UAAU,EAAE,KAAKA,UAJK;AAKtBD,UAAAA,WAAW,EAAE,KAAKA;AALI,SAAjB,CAAP;AAOAoB,QAAAA,MAAM,CAACC,MAAP,CAAcnB,IAAd,EAAoB,KAAK4F,eAAL,CAAqB5F,IAArB,CAApB;AACAA,QAAAA,IAAI,CAAC6F,QAAL,CAAc,KAAKjG,YAAnB,EAAiC,KAAKU,iBAAtC;;AACA,aAAKI,MAAL,CAAYoF,GAAZ,CAAgBZ,MAAhB,EAAwBlF,IAAxB;;AACA,aAAKa,MAAL,GAAc,IAAd;AACD,OAZD,MAYO,IAAIb,IAAI,IAAIA,IAAI,CAAC+F,WAAb,IAA4B,CAAC/F,IAAI,CAAC8B,SAAtC,EAAiD;AACtD9B,QAAAA,IAAI,CAAC6F,QAAL,CAAc,KAAKjG,YAAnB,EAAiC,KAAKU,iBAAtC;AACD;;AAED,aAAON,IAAP;AACD;;;wCAEmBuD,C,EAAGC,C,EAAGC,C,EAAG;AAAA,2BACJ,IADI,CACpB9B,QADoB;AAAA,UACpBA,QADoB,+BACT,CADS;;AAE3B,UAAIoB,KAAK,GAAG;AAACQ,QAAAA,CAAC,EAADA,CAAD;AAAIC,QAAAA,CAAC,EAADA,CAAJ;AAAOC,QAAAA,CAAC,EAADA;AAAP,OAAZ;;AAEA,aAAOV,KAAK,CAACU,CAAN,GAAU9B,QAAjB,EAA2B;AACzBoB,QAAAA,KAAK,GAAG,KAAKiD,cAAL,CAAoBjD,KAApB,CAAR;;AACA,YAAMwB,MAAM,GAAG,KAAKvB,QAAL,CAAcD,KAAd,CAAf;;AACA,YAAIwB,MAAJ,EAAY;AACV,iBAAOA,MAAP;AACD;AACF;;AACD,aAAO,IAAP;AACD;;;wBAxRW;AACV,aAAO,KAAK3D,MAAZ;AACD;;;wBAEmB;AAClB,aAAO,KAAKG,cAAZ;AACD;;;wBAEc;AACb,aAAO,KAAKA,cAAL,CAAoBkF,KAApB,CAA0B,UAAAjG,IAAI;AAAA,eAAIA,IAAI,CAACkG,QAAT;AAAA,OAA9B,CAAP;AACD;;;;;;;AAoRH,SAAStB,gBAAT,CAA0B5E,IAA1B,EAAgC;AAC9B,MAAImG,CAAC,GAAGnG,IAAR;;AACA,SAAOmG,CAAP,EAAU;AACR,QAAIA,CAAC,CAACjC,KAAF,GAAWhF,kBAAkB,KAAK,CAAtC,EAA0C;AACxC,aAAO,IAAP;AACD;;AACD,QAAIiH,CAAC,CAACD,QAAN,EAAgB;AACd,aAAO,KAAP;AACD;;AACDC,IAAAA,CAAC,GAAGA,CAAC,CAAC5B,MAAN;AACD;;AACD,SAAO,IAAP;AACD;;AAED,SAASI,yBAAT,CAAmC3E,IAAnC,EAAyC0E,kBAAzC,EAA6D;AAC3D,MAAIH,MAAJ;AACA,MAAIL,KAAK,GAAG/E,sBAAZ;;AACA,SAAQoF,MAAM,GAAGvE,IAAI,CAACuE,MAAtB,EAA+B;AAC7B,QAAIvE,IAAI,CAACkG,QAAT,EAAmB;AAEjBhC,MAAAA,KAAK,GAAG9E,iBAAR;;AACA,UAAIsF,kBAAkB,KAAKlF,gBAA3B,EAA6C;AAC3C;AACD;AACF;;AACD+E,IAAAA,MAAM,CAACL,KAAP,GAAe1C,IAAI,CAAC4E,GAAL,CAAS7B,MAAM,CAACL,KAAhB,EAAuBA,KAAvB,CAAf;AACAlE,IAAAA,IAAI,GAAGuE,MAAP;AACD;AACF;;AAGD,SAASM,wBAAT,CAAkC7E,IAAlC,EAAwC;AAAA,+CAClBA,IAAI,CAACwE,QADa;AAAA;;AAAA;AACtC,8DAAmC;AAAA,UAAxB6B,KAAwB;AACjCA,MAAAA,KAAK,CAACnC,KAAN,GAAc1C,IAAI,CAAC4E,GAAL,CAASC,KAAK,CAACnC,KAAf,EAAsB/E,sBAAtB,CAAd;;AACA,UAAI,CAACkH,KAAK,CAACH,QAAX,EAAqB;AACnBrB,QAAAA,wBAAwB,CAACwB,KAAD,CAAxB;AACD;AACF;AANqC;AAAA;AAAA;AAAA;AAAA;AAOvC","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 this._getTileData = opts.getTileData;\n\n this.onTileError = opts.onTileError;\n this.onTileLoad = tile => {\n opts.onTileLoad(tile);\n if (this.opts.maxCacheByteSize) {\n this._cacheByteSize += tile.byteLength;\n this._resizeCache();\n }\n };\n this.onTileUnload = opts.onTileUnload;\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 }\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.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\n if (!tile && create) {\n tile = new Tile2DHeader({\n x,\n y,\n z,\n onTileLoad: this.onTileLoad,\n onTileError: this.onTileError\n });\n Object.assign(tile, this.getTileMetadata(tile));\n tile.loadData(this._getTileData, this._requestScheduler);\n this._cache.set(tileId, tile);\n this._dirty = true;\n } else if (tile && tile.isCancelled && !tile.isLoading) {\n tile.loadData(this._getTileData, this._requestScheduler);\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":["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","opts","onTileLoad","tile","maxCacheByteSize","_cacheByteSize","byteLength","_resizeCache","_requestScheduler","RequestScheduler","maxRequests","throttleRequests","_cache","Map","_tiles","_dirty","_viewport","_selectedTiles","_frameNumber","setOptions","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","tileSize","extent","zoomOffset","x","y","z","bbox","tileIndex","_updateTileStates","selectedTiles","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","Tile2DHeader","getTileMetadata","set","loadData","getData","getTileData","requestScheduler","onLoad","onError","onTileError","getParentIndex","every","isLoaded","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"}
|
|
@@ -238,7 +238,7 @@ function getTileIndices(_ref) {
|
|
|
238
238
|
transformedExtent = transformBox(extent, modelMatrix);
|
|
239
239
|
}
|
|
240
240
|
|
|
241
|
-
return viewport.isGeospatial ? (0, _tile2dTraversal.getOSMTileIndices)(viewport, z, zRange, extent
|
|
241
|
+
return viewport.isGeospatial ? (0, _tile2dTraversal.getOSMTileIndices)(viewport, z, zRange, extent) : getIdentityTileIndices(viewport, z, tileSize, transformedExtent || DEFAULT_EXTENT, modelMatrixInverse);
|
|
242
242
|
}
|
|
243
243
|
|
|
244
244
|
function isURLTemplate(s) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/tile-layer/utils.js"],"names":["TILE_SIZE","DEFAULT_EXTENT","Infinity","urlType","type","value","validate","propType","optional","Array","isArray","every","url","equals","value1","value2","len","length","i","transformBox","bbox","modelMatrix","transformedCoords","transformPoint","transformedBox","Math","min","map","max","getURLFromTemplate","template","properties","index","abs","x","y","z","replace","pow","getBoundingBox","viewport","zRange","extent","bounds","minZ","maxZ","bounds0","getBounds","bounds1","isGeospatial","getIndexingCoords","scale","modelMatrixInverse","transformedTileIndex","getScale","tileSize","osmTile2lngLat","lng","n","PI","lat","atan","exp","tile2XY","tileToBoundingBox","west","north","east","south","left","top","right","bottom","getIdentityTileIndices","minX","minY","maxX","maxY","indices","floor","push","getTileIndices","maxZoom","minZoom","zoomOffset","round","zoom","log2","ceil","Number","isFinite","transformedExtent","isURLTemplate","s","test"],"mappings":"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","sourcesContent":["import {getOSMTileIndices} from './tile-2d-traversal';\n\nconst TILE_SIZE = 512;\nconst DEFAULT_EXTENT = [-Infinity, -Infinity, Infinity, Infinity];\n\nexport const urlType = {\n type: 'url',\n value: null,\n validate: (value, propType) =>\n (propType.optional && value === null) ||\n typeof value === 'string' ||\n (Array.isArray(value) && value.every(url => typeof url === 'string')),\n equals: (value1, value2) => {\n if (value1 === value2) {\n return true;\n }\n if (!Array.isArray(value1) || !Array.isArray(value2)) {\n return false;\n }\n const len = value1.length;\n if (len !== value2.length) {\n return false;\n }\n for (let i = 0; i < len; i++) {\n if (value1[i] !== value2[i]) {\n return false;\n }\n }\n return true;\n }\n};\n\nfunction transformBox(bbox, modelMatrix) {\n const transformedCoords = [\n // top-left\n modelMatrix.transformPoint([bbox[0], bbox[1]]),\n // top-right\n modelMatrix.transformPoint([bbox[2], bbox[1]]),\n // bottom-left\n modelMatrix.transformPoint([bbox[0], bbox[3]]),\n // bottom-right\n modelMatrix.transformPoint([bbox[2], bbox[3]])\n ];\n const transformedBox = [\n // Minimum x coord\n Math.min(...transformedCoords.map(i => i[0])),\n // Minimum y coord\n Math.min(...transformedCoords.map(i => i[1])),\n // Max x coord\n Math.max(...transformedCoords.map(i => i[0])),\n // Max y coord\n Math.max(...transformedCoords.map(i => i[1]))\n ];\n return transformedBox;\n}\n\nexport function getURLFromTemplate(template, properties) {\n if (!template || !template.length) {\n return null;\n }\n if (Array.isArray(template)) {\n const index = Math.abs(properties.x + properties.y) % template.length;\n template = template[index];\n }\n\n const {x, y, z} = properties;\n return template\n .replace('{x}', x)\n .replace('{y}', y)\n .replace('{z}', z)\n .replace('{-y}', Math.pow(2, z) - y - 1);\n}\n\n/**\n * gets the bounding box of a viewport\n */\nfunction getBoundingBox(viewport, zRange, extent) {\n let bounds;\n if (zRange && zRange.length === 2) {\n const [minZ, maxZ] = zRange;\n const bounds0 = viewport.getBounds({z: minZ});\n const bounds1 = viewport.getBounds({z: maxZ});\n bounds = [\n Math.min(bounds0[0], bounds1[0]),\n Math.min(bounds0[1], bounds1[1]),\n Math.max(bounds0[2], bounds1[2]),\n Math.max(bounds0[3], bounds1[3])\n ];\n } else {\n bounds = viewport.getBounds();\n }\n if (!viewport.isGeospatial) {\n return [\n // Top corner should not be more then bottom corner in either direction\n Math.max(Math.min(bounds[0], extent[2]), extent[0]),\n Math.max(Math.min(bounds[1], extent[3]), extent[1]),\n // Bottom corner should not be less then top corner in either direction\n Math.min(Math.max(bounds[2], extent[0]), extent[2]),\n Math.min(Math.max(bounds[3], extent[1]), extent[3])\n ];\n }\n return [\n Math.max(bounds[0], extent[0]),\n Math.max(bounds[1], extent[1]),\n Math.min(bounds[2], extent[2]),\n Math.min(bounds[3], extent[3])\n ];\n}\n\nfunction getIndexingCoords(bbox, scale, modelMatrixInverse) {\n if (modelMatrixInverse) {\n const transformedTileIndex = transformBox(bbox, modelMatrixInverse).map(\n i => (i * scale) / TILE_SIZE\n );\n return transformedTileIndex;\n }\n return bbox.map(i => (i * scale) / TILE_SIZE);\n}\n\nfunction getScale(z, tileSize) {\n return (Math.pow(2, z) * TILE_SIZE) / tileSize;\n}\n\n// https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Lon..2Flat._to_tile_numbers_2\nexport function osmTile2lngLat(x, y, z) {\n const scale = getScale(z, TILE_SIZE);\n const lng = (x / scale) * 360 - 180;\n const n = Math.PI - (2 * Math.PI * y) / scale;\n const lat = (180 / Math.PI) * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n)));\n return [lng, lat];\n}\n\nfunction tile2XY(x, y, z, tileSize) {\n const scale = getScale(z, tileSize);\n return [(x / scale) * TILE_SIZE, (y / scale) * TILE_SIZE];\n}\nexport function tileToBoundingBox(viewport, x, y, z, tileSize = TILE_SIZE) {\n if (viewport.isGeospatial) {\n const [west, north] = osmTile2lngLat(x, y, z);\n const [east, south] = osmTile2lngLat(x + 1, y + 1, z);\n return {west, north, east, south};\n }\n const [left, top] = tile2XY(x, y, z, tileSize);\n const [right, bottom] = tile2XY(x + 1, y + 1, z, tileSize);\n return {left, top, right, bottom};\n}\n\nfunction getIdentityTileIndices(viewport, z, tileSize, extent, modelMatrixInverse) {\n const bbox = getBoundingBox(viewport, null, extent);\n const scale = getScale(z, tileSize);\n const [minX, minY, maxX, maxY] = getIndexingCoords(bbox, scale, modelMatrixInverse);\n const indices = [];\n\n /*\n | TILE | TILE | TILE |\n |(minX) |(maxX)\n */\n for (let x = Math.floor(minX); x < maxX; x++) {\n for (let y = Math.floor(minY); y < maxY; y++) {\n indices.push({x, y, z});\n }\n }\n return indices;\n}\n\n/**\n * Returns all tile indices in the current viewport. If the current zoom level is smaller\n * than minZoom, return an empty array. If the current zoom level is greater than maxZoom,\n * return tiles that are on maxZoom.\n */\n// eslint-disable-next-line complexity\nexport function getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n extent,\n tileSize = TILE_SIZE,\n modelMatrix,\n modelMatrixInverse,\n zoomOffset = 0\n}) {\n let z = viewport.isGeospatial\n ? Math.round(viewport.zoom + Math.log2(TILE_SIZE / tileSize)) + zoomOffset\n : Math.ceil(viewport.zoom) + zoomOffset;\n if (Number.isFinite(minZoom) && z < minZoom) {\n if (!extent) {\n return [];\n }\n z = minZoom;\n }\n if (Number.isFinite(maxZoom) && z > maxZoom) {\n z = maxZoom;\n }\n let transformedExtent = extent;\n if (modelMatrix && modelMatrixInverse && extent && !viewport.isGeospatial) {\n transformedExtent = transformBox(extent, modelMatrix);\n }\n return viewport.isGeospatial\n ? getOSMTileIndices(viewport, z, zRange, extent || DEFAULT_EXTENT)\n : getIdentityTileIndices(\n viewport,\n z,\n tileSize,\n transformedExtent || DEFAULT_EXTENT,\n modelMatrixInverse\n );\n}\n\n/**\n * Returns true if s is a valid URL template\n */\nexport function isURLTemplate(s) {\n return /(?=.*{z})(?=.*{x})(?=.*({y}|{-y}))/.test(s);\n}\n"],"file":"utils.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/tile-layer/utils.js"],"names":["TILE_SIZE","DEFAULT_EXTENT","Infinity","urlType","type","value","validate","propType","optional","Array","isArray","every","url","equals","value1","value2","len","length","i","transformBox","bbox","modelMatrix","transformedCoords","transformPoint","transformedBox","Math","min","map","max","getURLFromTemplate","template","properties","index","abs","x","y","z","replace","pow","getBoundingBox","viewport","zRange","extent","bounds","minZ","maxZ","bounds0","getBounds","bounds1","isGeospatial","getIndexingCoords","scale","modelMatrixInverse","transformedTileIndex","getScale","tileSize","osmTile2lngLat","lng","n","PI","lat","atan","exp","tile2XY","tileToBoundingBox","west","north","east","south","left","top","right","bottom","getIdentityTileIndices","minX","minY","maxX","maxY","indices","floor","push","getTileIndices","maxZoom","minZoom","zoomOffset","round","zoom","log2","ceil","Number","isFinite","transformedExtent","isURLTemplate","s","test"],"mappings":"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","sourcesContent":["import {getOSMTileIndices} from './tile-2d-traversal';\n\nconst TILE_SIZE = 512;\nconst DEFAULT_EXTENT = [-Infinity, -Infinity, Infinity, Infinity];\n\nexport const urlType = {\n type: 'url',\n value: null,\n validate: (value, propType) =>\n (propType.optional && value === null) ||\n typeof value === 'string' ||\n (Array.isArray(value) && value.every(url => typeof url === 'string')),\n equals: (value1, value2) => {\n if (value1 === value2) {\n return true;\n }\n if (!Array.isArray(value1) || !Array.isArray(value2)) {\n return false;\n }\n const len = value1.length;\n if (len !== value2.length) {\n return false;\n }\n for (let i = 0; i < len; i++) {\n if (value1[i] !== value2[i]) {\n return false;\n }\n }\n return true;\n }\n};\n\nfunction transformBox(bbox, modelMatrix) {\n const transformedCoords = [\n // top-left\n modelMatrix.transformPoint([bbox[0], bbox[1]]),\n // top-right\n modelMatrix.transformPoint([bbox[2], bbox[1]]),\n // bottom-left\n modelMatrix.transformPoint([bbox[0], bbox[3]]),\n // bottom-right\n modelMatrix.transformPoint([bbox[2], bbox[3]])\n ];\n const transformedBox = [\n // Minimum x coord\n Math.min(...transformedCoords.map(i => i[0])),\n // Minimum y coord\n Math.min(...transformedCoords.map(i => i[1])),\n // Max x coord\n Math.max(...transformedCoords.map(i => i[0])),\n // Max y coord\n Math.max(...transformedCoords.map(i => i[1]))\n ];\n return transformedBox;\n}\n\nexport function getURLFromTemplate(template, properties) {\n if (!template || !template.length) {\n return null;\n }\n if (Array.isArray(template)) {\n const index = Math.abs(properties.x + properties.y) % template.length;\n template = template[index];\n }\n\n const {x, y, z} = properties;\n return template\n .replace('{x}', x)\n .replace('{y}', y)\n .replace('{z}', z)\n .replace('{-y}', Math.pow(2, z) - y - 1);\n}\n\n/**\n * gets the bounding box of a viewport\n */\nfunction getBoundingBox(viewport, zRange, extent) {\n let bounds;\n if (zRange && zRange.length === 2) {\n const [minZ, maxZ] = zRange;\n const bounds0 = viewport.getBounds({z: minZ});\n const bounds1 = viewport.getBounds({z: maxZ});\n bounds = [\n Math.min(bounds0[0], bounds1[0]),\n Math.min(bounds0[1], bounds1[1]),\n Math.max(bounds0[2], bounds1[2]),\n Math.max(bounds0[3], bounds1[3])\n ];\n } else {\n bounds = viewport.getBounds();\n }\n if (!viewport.isGeospatial) {\n return [\n // Top corner should not be more then bottom corner in either direction\n Math.max(Math.min(bounds[0], extent[2]), extent[0]),\n Math.max(Math.min(bounds[1], extent[3]), extent[1]),\n // Bottom corner should not be less then top corner in either direction\n Math.min(Math.max(bounds[2], extent[0]), extent[2]),\n Math.min(Math.max(bounds[3], extent[1]), extent[3])\n ];\n }\n return [\n Math.max(bounds[0], extent[0]),\n Math.max(bounds[1], extent[1]),\n Math.min(bounds[2], extent[2]),\n Math.min(bounds[3], extent[3])\n ];\n}\n\nfunction getIndexingCoords(bbox, scale, modelMatrixInverse) {\n if (modelMatrixInverse) {\n const transformedTileIndex = transformBox(bbox, modelMatrixInverse).map(\n i => (i * scale) / TILE_SIZE\n );\n return transformedTileIndex;\n }\n return bbox.map(i => (i * scale) / TILE_SIZE);\n}\n\nfunction getScale(z, tileSize) {\n return (Math.pow(2, z) * TILE_SIZE) / tileSize;\n}\n\n// https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Lon..2Flat._to_tile_numbers_2\nexport function osmTile2lngLat(x, y, z) {\n const scale = getScale(z, TILE_SIZE);\n const lng = (x / scale) * 360 - 180;\n const n = Math.PI - (2 * Math.PI * y) / scale;\n const lat = (180 / Math.PI) * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n)));\n return [lng, lat];\n}\n\nfunction tile2XY(x, y, z, tileSize) {\n const scale = getScale(z, tileSize);\n return [(x / scale) * TILE_SIZE, (y / scale) * TILE_SIZE];\n}\nexport function tileToBoundingBox(viewport, x, y, z, tileSize = TILE_SIZE) {\n if (viewport.isGeospatial) {\n const [west, north] = osmTile2lngLat(x, y, z);\n const [east, south] = osmTile2lngLat(x + 1, y + 1, z);\n return {west, north, east, south};\n }\n const [left, top] = tile2XY(x, y, z, tileSize);\n const [right, bottom] = tile2XY(x + 1, y + 1, z, tileSize);\n return {left, top, right, bottom};\n}\n\nfunction getIdentityTileIndices(viewport, z, tileSize, extent, modelMatrixInverse) {\n const bbox = getBoundingBox(viewport, null, extent);\n const scale = getScale(z, tileSize);\n const [minX, minY, maxX, maxY] = getIndexingCoords(bbox, scale, modelMatrixInverse);\n const indices = [];\n\n /*\n | TILE | TILE | TILE |\n |(minX) |(maxX)\n */\n for (let x = Math.floor(minX); x < maxX; x++) {\n for (let y = Math.floor(minY); y < maxY; y++) {\n indices.push({x, y, z});\n }\n }\n return indices;\n}\n\n/**\n * Returns all tile indices in the current viewport. If the current zoom level is smaller\n * than minZoom, return an empty array. If the current zoom level is greater than maxZoom,\n * return tiles that are on maxZoom.\n */\n// eslint-disable-next-line complexity\nexport function getTileIndices({\n viewport,\n maxZoom,\n minZoom,\n zRange,\n extent,\n tileSize = TILE_SIZE,\n modelMatrix,\n modelMatrixInverse,\n zoomOffset = 0\n}) {\n let z = viewport.isGeospatial\n ? Math.round(viewport.zoom + Math.log2(TILE_SIZE / tileSize)) + zoomOffset\n : Math.ceil(viewport.zoom) + zoomOffset;\n if (Number.isFinite(minZoom) && z < minZoom) {\n if (!extent) {\n return [];\n }\n z = minZoom;\n }\n if (Number.isFinite(maxZoom) && z > maxZoom) {\n z = maxZoom;\n }\n let transformedExtent = extent;\n if (modelMatrix && modelMatrixInverse && extent && !viewport.isGeospatial) {\n transformedExtent = transformBox(extent, modelMatrix);\n }\n return viewport.isGeospatial\n ? getOSMTileIndices(viewport, z, zRange, extent)\n : getIdentityTileIndices(\n viewport,\n z,\n tileSize,\n transformedExtent || DEFAULT_EXTENT,\n modelMatrixInverse\n );\n}\n\n/**\n * Returns true if s is a valid URL template\n */\nexport function isURLTemplate(s) {\n return /(?=.*{z})(?=.*{x})(?=.*({y}|{-y}))/.test(s);\n}\n"],"file":"utils.js"}
|
|
@@ -78,7 +78,7 @@ function mergeTriggers(getHexagon, coverage) {
|
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
const defaultProps = { ...PolygonLayer.defaultProps,
|
|
81
|
-
highPrecision:
|
|
81
|
+
highPrecision: 'auto',
|
|
82
82
|
coverage: {
|
|
83
83
|
type: 'number',
|
|
84
84
|
min: 0,
|
|
@@ -105,51 +105,65 @@ export default class H3HexagonLayer extends CompositeLayer {
|
|
|
105
105
|
oldProps,
|
|
106
106
|
changeFlags
|
|
107
107
|
}) {
|
|
108
|
-
if (changeFlags.dataChanged || changeFlags.updateTriggers && changeFlags.updateTriggers.getHexagon) {
|
|
109
|
-
|
|
110
|
-
let hasPentagon = false;
|
|
111
|
-
let hasMultipleRes = false;
|
|
112
|
-
const {
|
|
113
|
-
iterable,
|
|
114
|
-
objectInfo
|
|
115
|
-
} = createIterable(props.data);
|
|
116
|
-
|
|
117
|
-
for (const object of iterable) {
|
|
118
|
-
objectInfo.index++;
|
|
119
|
-
const hexId = props.getHexagon(object, objectInfo);
|
|
120
|
-
const hexResolution = h3GetResolution(hexId);
|
|
121
|
-
if (resolution < 0) resolution = hexResolution;else if (resolution !== hexResolution) {
|
|
122
|
-
hasMultipleRes = true;
|
|
123
|
-
break;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
if (h3IsPentagon(hexId)) {
|
|
127
|
-
hasPentagon = true;
|
|
128
|
-
break;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
108
|
+
if (props.highPrecision !== true && (changeFlags.dataChanged || changeFlags.updateTriggers && changeFlags.updateTriggers.getHexagon)) {
|
|
109
|
+
const dataProps = this._calculateH3DataProps(props);
|
|
131
110
|
|
|
132
|
-
this.setState(
|
|
133
|
-
resolution,
|
|
134
|
-
edgeLengthKM: resolution >= 0 ? edgeLength(resolution, UNITS.km) : 0,
|
|
135
|
-
hasMultipleRes,
|
|
136
|
-
hasPentagon
|
|
137
|
-
});
|
|
111
|
+
this.setState(dataProps);
|
|
138
112
|
}
|
|
139
113
|
|
|
140
114
|
this._updateVertices(this.context.viewport);
|
|
141
115
|
}
|
|
142
116
|
|
|
143
|
-
|
|
117
|
+
_calculateH3DataProps(props) {
|
|
118
|
+
let resolution = -1;
|
|
119
|
+
let hasPentagon = false;
|
|
120
|
+
let hasMultipleRes = false;
|
|
144
121
|
const {
|
|
122
|
+
iterable,
|
|
123
|
+
objectInfo
|
|
124
|
+
} = createIterable(props.data);
|
|
125
|
+
|
|
126
|
+
for (const object of iterable) {
|
|
127
|
+
objectInfo.index++;
|
|
128
|
+
const hexId = props.getHexagon(object, objectInfo);
|
|
129
|
+
const hexResolution = h3GetResolution(hexId);
|
|
130
|
+
|
|
131
|
+
if (resolution < 0) {
|
|
132
|
+
resolution = hexResolution;
|
|
133
|
+
if (!props.highPrecision) break;
|
|
134
|
+
} else if (resolution !== hexResolution) {
|
|
135
|
+
hasMultipleRes = true;
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
if (h3IsPentagon(hexId)) {
|
|
140
|
+
hasPentagon = true;
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return {
|
|
145
146
|
resolution,
|
|
146
|
-
|
|
147
|
-
hasMultipleRes
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
147
|
+
edgeLengthKM: resolution >= 0 ? edgeLength(resolution, UNITS.km) : 0,
|
|
148
|
+
hasMultipleRes,
|
|
149
|
+
hasPentagon
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
_shouldUseHighPrecision() {
|
|
154
|
+
if (this.props.highPrecision === 'auto') {
|
|
155
|
+
const {
|
|
156
|
+
resolution,
|
|
157
|
+
hasPentagon,
|
|
158
|
+
hasMultipleRes
|
|
159
|
+
} = this.state;
|
|
160
|
+
const {
|
|
161
|
+
viewport
|
|
162
|
+
} = this.context;
|
|
163
|
+
return viewport.resolution || hasMultipleRes || hasPentagon || resolution >= 0 && resolution <= 5;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return this.props.highPrecision;
|
|
153
167
|
}
|
|
154
168
|
|
|
155
169
|
_updateVertices(viewport) {
|