@developmentseed/deck.gl-raster 0.7.0 → 0.8.0-beta.2
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/fp64.d.ts +18 -0
- package/dist/fp64.d.ts.map +1 -0
- package/dist/fp64.js +28 -0
- package/dist/fp64.js.map +1 -0
- package/dist/globe-grid-mesh.d.ts +30 -0
- package/dist/globe-grid-mesh.d.ts.map +1 -0
- package/dist/globe-grid-mesh.js +67 -0
- package/dist/globe-grid-mesh.js.map +1 -0
- package/dist/gpu-modules/cutline-bbox.d.ts +26 -40
- package/dist/gpu-modules/cutline-bbox.d.ts.map +1 -1
- package/dist/gpu-modules/cutline-bbox.js +24 -53
- package/dist/gpu-modules/cutline-bbox.js.map +1 -1
- package/dist/gpu-modules/index.d.ts +1 -1
- package/dist/gpu-modules/index.d.ts.map +1 -1
- package/dist/gpu-modules/index.js +1 -1
- package/dist/gpu-modules/index.js.map +1 -1
- package/dist/mesh-layer/mesh-layer-fragment.glsl.d.ts +1 -1
- package/dist/mesh-layer/mesh-layer-fragment.glsl.js +1 -1
- package/dist/mesh-layer/mesh-layer-vertex.glsl.d.ts +3 -0
- package/dist/mesh-layer/mesh-layer-vertex.glsl.d.ts.map +1 -0
- package/dist/mesh-layer/mesh-layer-vertex.glsl.js +90 -0
- package/dist/mesh-layer/mesh-layer-vertex.glsl.js.map +1 -0
- package/dist/mesh-layer/mesh-layer.d.ts +27 -4
- package/dist/mesh-layer/mesh-layer.d.ts.map +1 -1
- package/dist/mesh-layer/mesh-layer.js +39 -3
- package/dist/mesh-layer/mesh-layer.js.map +1 -1
- package/dist/raster-layer.d.ts +18 -1
- package/dist/raster-layer.d.ts.map +1 -1
- package/dist/raster-layer.js +46 -19
- package/dist/raster-layer.js.map +1 -1
- package/dist/raster-tile-layer/raster-tile-layer.d.ts.map +1 -1
- package/dist/raster-tile-layer/raster-tile-layer.js +29 -21
- package/dist/raster-tile-layer/raster-tile-layer.js.map +1 -1
- package/dist/raster-tileset/bounding-volume-cache.d.ts +11 -4
- package/dist/raster-tileset/bounding-volume-cache.d.ts.map +1 -1
- package/dist/raster-tileset/bounding-volume-cache.js +13 -4
- package/dist/raster-tileset/bounding-volume-cache.js.map +1 -1
- package/dist/raster-tileset/raster-tile-traversal.d.ts +58 -3
- package/dist/raster-tileset/raster-tile-traversal.d.ts.map +1 -1
- package/dist/raster-tileset/raster-tile-traversal.js +235 -30
- package/dist/raster-tileset/raster-tile-traversal.js.map +1 -1
- package/dist/raster-tileset/raster-tileset-2d.d.ts +33 -0
- package/dist/raster-tileset/raster-tileset-2d.d.ts.map +1 -1
- package/dist/raster-tileset/raster-tileset-2d.js +46 -1
- package/dist/raster-tileset/raster-tileset-2d.js.map +1 -1
- package/dist/raster-tileset/web-mercator-clamp.d.ts +31 -0
- package/dist/raster-tileset/web-mercator-clamp.d.ts.map +1 -0
- package/dist/raster-tileset/web-mercator-clamp.js +69 -0
- package/dist/raster-tileset/web-mercator-clamp.js.map +1 -0
- package/package.json +7 -7
- package/dist/raster-tile-layer/constants.d.ts +0 -11
- package/dist/raster-tile-layer/constants.d.ts.map +0 -1
- package/dist/raster-tile-layer/constants.js +0 -11
- package/dist/raster-tile-layer/constants.js.map +0 -1
|
@@ -16,9 +16,10 @@
|
|
|
16
16
|
* The traversal is driven by a {@link RasterTilesetDescriptor}, which abstracts over
|
|
17
17
|
* both OGC TileMatrixSet grids and Zarr multiscale pyramids.
|
|
18
18
|
*/
|
|
19
|
-
import { _GlobeViewport
|
|
19
|
+
import { _GlobeViewport as GlobeViewport } from "@deck.gl/core";
|
|
20
20
|
import { transformBounds } from "@developmentseed/proj";
|
|
21
|
-
import {
|
|
21
|
+
import { Vector3 } from "@math.gl/core";
|
|
22
|
+
import { CullingVolume, makeOrientedBoundingBoxFromPoints, OrientedBoundingBox, Plane, } from "@math.gl/culling";
|
|
22
23
|
import { lngLatToWorld, worldToLngLat } from "@math.gl/web-mercator";
|
|
23
24
|
import { BoundingVolumeCache } from "./bounding-volume-cache.js";
|
|
24
25
|
/**
|
|
@@ -33,6 +34,12 @@ import { BoundingVolumeCache } from "./bounding-volume-cache.js";
|
|
|
33
34
|
* bottom-right.
|
|
34
35
|
*/
|
|
35
36
|
const TILE_SIZE = 512;
|
|
37
|
+
/**
|
|
38
|
+
* Maximum number of world copies to test on each side of the primary world
|
|
39
|
+
* during multi-world tile traversal. Matches upstream
|
|
40
|
+
* `@deck.gl/geo-layers/tile-2d-traversal.ts`.
|
|
41
|
+
*/
|
|
42
|
+
const MAX_MAPS = 3;
|
|
36
43
|
// Reference points used to sample tile boundaries for bounding volume
|
|
37
44
|
// calculation.
|
|
38
45
|
//
|
|
@@ -64,6 +71,18 @@ const REF_POINTS_9 = REF_POINTS_5.concat([
|
|
|
64
71
|
[1, 0.5], // right edge
|
|
65
72
|
[0.5, 1], // bottom edge
|
|
66
73
|
]);
|
|
74
|
+
// For the globe bounding volume: REF_POINTS_9 plus two more points on the
|
|
75
|
+
// horizontal centerline (11 points total). The sphere surface bulges most
|
|
76
|
+
// between samples along the widest span of a tile, so denser sampling there
|
|
77
|
+
// keeps the oriented bounding box from under-enclosing the tile (which would
|
|
78
|
+
// false-cull it). This matches upstream deck.gl's densest reference set, used
|
|
79
|
+
// there only for the coarsest (whole-world) zoom. We use it for every globe
|
|
80
|
+
// tile: a tile never spans more than the whole world, so 11 points always
|
|
81
|
+
// suffice, and per-tile cost is paid once thanks to the bounding-volume cache.
|
|
82
|
+
const REF_POINTS_11 = REF_POINTS_9.concat([
|
|
83
|
+
[0.25, 0.5],
|
|
84
|
+
[0.75, 0.5],
|
|
85
|
+
]);
|
|
67
86
|
/** semi-major axis of the WGS84 ellipsoid
|
|
68
87
|
*
|
|
69
88
|
* EPSG:3857 also uses the WGS84 datum, so this is used for conversions from
|
|
@@ -174,16 +193,29 @@ export class RasterTileNode {
|
|
|
174
193
|
* @returns true if this tile or any descendant is visible, false otherwise
|
|
175
194
|
*/
|
|
176
195
|
update(params) {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
196
|
+
const { viewport, cullingVolume, elevationBounds, minZ, maxZ = this.descriptor.levels.length - 1, project, bounds, pixelRatio, worldOffset = 0, boundingVolumeCache, } = params;
|
|
197
|
+
// Reset per-frame state on the primary pass only. Non-zero worldOffset
|
|
198
|
+
// passes are additive — they can flip selected/childVisible from
|
|
199
|
+
// false → true but never the reverse. See dev-docs/world-copies.md.
|
|
200
|
+
if (worldOffset === 0) {
|
|
201
|
+
this.childVisible = false;
|
|
202
|
+
this.selected = false;
|
|
203
|
+
}
|
|
204
|
+
// Get bounding volume for this tile (translated for frustum culling at
|
|
205
|
+
// non-zero worldOffset). `commonSpaceBounds` is the Web-Mercator-world AABB
|
|
206
|
+
// used for the LOD latitude (a worldOffset only shifts X, so latitude is
|
|
207
|
+
// unaffected).
|
|
208
|
+
const { boundingVolume, commonSpaceBounds } = this.getBoundingVolume(elevationBounds, project, boundingVolumeCache, worldOffset);
|
|
183
209
|
// Step 1: Bounds checking
|
|
184
|
-
// If geographic bounds are specified, reject tiles outside those bounds
|
|
185
|
-
|
|
186
|
-
|
|
210
|
+
// If geographic bounds are specified, reject tiles outside those bounds.
|
|
211
|
+
// The dataset's `bounds` live in primary-world common space, and a tile
|
|
212
|
+
// at `(x, y, z)` represents the same data regardless of which world copy
|
|
213
|
+
// it's drawn in — so always compare against the offset-0 AABB.
|
|
214
|
+
if (bounds) {
|
|
215
|
+
const primaryWorldVolume = this.getBoundingVolume(elevationBounds, project, boundingVolumeCache, 0);
|
|
216
|
+
if (!this.insideBounds(bounds, primaryWorldVolume.commonSpaceBounds)) {
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
187
219
|
}
|
|
188
220
|
// Frustum culling
|
|
189
221
|
// Test if tile's bounding volume intersects the camera frustum
|
|
@@ -197,7 +229,7 @@ export class RasterTileNode {
|
|
|
197
229
|
// Only select this tile if no child is visible (prevents overlapping tiles)
|
|
198
230
|
// "When pitch is low, force selection at maxZ."
|
|
199
231
|
if (!this.childVisible && this.z >= minZ) {
|
|
200
|
-
const metersPerCSSPixel =
|
|
232
|
+
const metersPerCSSPixel = getMetersPerPixelAtCommonSpaceBounds(commonSpaceBounds, viewport.zoom);
|
|
201
233
|
const tileMetersPerPixel = this.level.metersPerPixel;
|
|
202
234
|
// On-screen size of one source pixel, measured in device pixels.
|
|
203
235
|
// ≤ 1 means the source can fully resolve the rendered framebuffer.
|
|
@@ -215,14 +247,22 @@ export class RasterTileNode {
|
|
|
215
247
|
// Note that if `this.children` is `null`, then there are no children
|
|
216
248
|
// available because we're already at the finest tile resolution available
|
|
217
249
|
if (children && children.length > 0) {
|
|
218
|
-
|
|
250
|
+
if (worldOffset === 0) {
|
|
251
|
+
this.selected = false;
|
|
252
|
+
}
|
|
219
253
|
let anyChildVisible = false;
|
|
220
254
|
for (const child of children) {
|
|
221
255
|
if (child.update(params)) {
|
|
222
256
|
anyChildVisible = true;
|
|
223
257
|
}
|
|
224
258
|
}
|
|
225
|
-
|
|
259
|
+
// Only set childVisible to true; never override a previous true to
|
|
260
|
+
// false on a subsequent pass. Offset-0 already starts with
|
|
261
|
+
// childVisible=false (reset above), so this preserves the
|
|
262
|
+
// "any pass that finds a visible child wins" semantics.
|
|
263
|
+
if (anyChildVisible) {
|
|
264
|
+
this.childVisible = true;
|
|
265
|
+
}
|
|
226
266
|
return anyChildVisible;
|
|
227
267
|
}
|
|
228
268
|
return true;
|
|
@@ -266,15 +306,41 @@ export class RasterTileNode {
|
|
|
266
306
|
* volume depends only on `(z, x, y, zRange)` for a given descriptor, so on a
|
|
267
307
|
* cache hit it is returned without rerunning {@link computeBoundingVolume}'s
|
|
268
308
|
* proj4 reprojections + oriented-bounding-box fit.
|
|
309
|
+
*
|
|
310
|
+
* For non-zero `worldOffset`, returns a translated copy (center shifted by
|
|
311
|
+
* `worldOffset * TILE_SIZE` along common-space X) without polluting the
|
|
312
|
+
* cache — the cache always stores the offset-0 volume. See
|
|
313
|
+
* `dev-docs/world-copies.md`.
|
|
314
|
+
*
|
|
315
|
+
* @param zRange Elevation `[min, max]` in common-space units.
|
|
316
|
+
* @param project Projection function for Globe view, or `null`
|
|
317
|
+
* for Web Mercator common space.
|
|
318
|
+
* @param boundingVolumeCache Cache keyed by `z/x/y`. Stores the offset-0
|
|
319
|
+
* volume only.
|
|
320
|
+
* @param worldOffset Number of world copies to translate the result
|
|
321
|
+
* by along common-space X. `0` returns the
|
|
322
|
+
* cached offset-0 volume directly. Non-zero
|
|
323
|
+
* values return a fresh translated copy.
|
|
269
324
|
*/
|
|
270
|
-
getBoundingVolume(zRange, project, boundingVolumeCache) {
|
|
271
|
-
const
|
|
272
|
-
|
|
273
|
-
|
|
325
|
+
getBoundingVolume(zRange, project, boundingVolumeCache, worldOffset = 0) {
|
|
326
|
+
const cacheHit = boundingVolumeCache.get(this.z, this.x, this.y);
|
|
327
|
+
// `base` is the tile's volume in the primary world (offset 0). The cache
|
|
328
|
+
// only ever stores the primary-world volume; it is returned as-is for
|
|
329
|
+
// worldOffset 0, or translated below for a non-zero offset.
|
|
330
|
+
let base;
|
|
331
|
+
if (cacheHit &&
|
|
332
|
+
cacheHit.zRange[0] === zRange[0] &&
|
|
333
|
+
cacheHit.zRange[1] === zRange[1]) {
|
|
334
|
+
base = cacheHit;
|
|
274
335
|
}
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
336
|
+
else {
|
|
337
|
+
base = this.computeBoundingVolume(zRange, project);
|
|
338
|
+
boundingVolumeCache.set(this.z, this.x, this.y, { zRange, ...base });
|
|
339
|
+
}
|
|
340
|
+
if (worldOffset === 0) {
|
|
341
|
+
return base;
|
|
342
|
+
}
|
|
343
|
+
return translateBoundingVolume(base, worldOffset * TILE_SIZE);
|
|
278
344
|
}
|
|
279
345
|
/**
|
|
280
346
|
* Compute (without caching) the 3D bounding volume for this tile in deck.gl's
|
|
@@ -284,12 +350,10 @@ export class RasterTileNode {
|
|
|
284
350
|
* tiling is already in EPSG:3857.
|
|
285
351
|
*/
|
|
286
352
|
computeBoundingVolume(zRange, project) {
|
|
287
|
-
// Case 1: Globe view
|
|
288
|
-
//
|
|
353
|
+
// Case 1: Globe view — reproject sample points to WGS84 and project them
|
|
354
|
+
// onto the globe sphere with the viewport's `project` function.
|
|
289
355
|
if (project) {
|
|
290
|
-
|
|
291
|
-
// Reproject positions to wgs84 instead, then pass them into `project`
|
|
292
|
-
// return makeOrientedBoundingBoxFromPoints(refPointPositions);
|
|
356
|
+
return this._getGlobeBoundingVolume(project);
|
|
293
357
|
}
|
|
294
358
|
// (Future) Case 2: Web Mercator input image, can directly compute AABB in
|
|
295
359
|
// common space
|
|
@@ -344,6 +408,47 @@ export class RasterTileNode {
|
|
|
344
408
|
commonSpaceBounds,
|
|
345
409
|
};
|
|
346
410
|
}
|
|
411
|
+
/**
|
|
412
|
+
* Globe-view bounding volume: reproject the tile's reference points to WGS84,
|
|
413
|
+
* project them onto the globe sphere (`project` = `viewport.projectPosition`)
|
|
414
|
+
* to build the oriented bounding box used for frustum culling, and separately
|
|
415
|
+
* compute a Web-Mercator-world AABB for the `bounds` pre-filter in
|
|
416
|
+
* {@link update} (which compares against `wgs84Bounds` in mercator world).
|
|
417
|
+
*
|
|
418
|
+
* NOTE: elevation is not modeled on globe yet — reference points are sampled
|
|
419
|
+
* at the surface (z = 0). Flat rasters only. See
|
|
420
|
+
* `dev-docs/specs/2026-05-21-globe-view-design.md`.
|
|
421
|
+
*/
|
|
422
|
+
_getGlobeBoundingVolume(project) {
|
|
423
|
+
const tileCorners = this.level.projectedTileCorners(this.x, this.y);
|
|
424
|
+
const refPointsWgs84 = sampleReferencePointsInWGS84(REF_POINTS_11, tileCorners, this.descriptor.projectTo4326);
|
|
425
|
+
const refPointPositions = [];
|
|
426
|
+
let minX = Number.POSITIVE_INFINITY;
|
|
427
|
+
let minY = Number.POSITIVE_INFINITY;
|
|
428
|
+
let maxX = Number.NEGATIVE_INFINITY;
|
|
429
|
+
let maxY = Number.NEGATIVE_INFINITY;
|
|
430
|
+
for (const [lng, lat] of refPointsWgs84) {
|
|
431
|
+
const projected = project([lng, lat, 0]);
|
|
432
|
+
refPointPositions.push([projected[0], projected[1], projected[2]]);
|
|
433
|
+
const [worldX, worldY] = lngLatToWorld([lng, lat]);
|
|
434
|
+
if (worldX < minX) {
|
|
435
|
+
minX = worldX;
|
|
436
|
+
}
|
|
437
|
+
if (worldY < minY) {
|
|
438
|
+
minY = worldY;
|
|
439
|
+
}
|
|
440
|
+
if (worldX > maxX) {
|
|
441
|
+
maxX = worldX;
|
|
442
|
+
}
|
|
443
|
+
if (worldY > maxY) {
|
|
444
|
+
maxY = worldY;
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
return {
|
|
448
|
+
boundingVolume: makeOrientedBoundingBoxFromPoints(refPointPositions),
|
|
449
|
+
commonSpaceBounds: [minX, minY, maxX, maxY],
|
|
450
|
+
};
|
|
451
|
+
}
|
|
347
452
|
}
|
|
348
453
|
/**
|
|
349
454
|
* Wrap a forward projection to EPSG:3857 so that it never returns NaN.
|
|
@@ -403,13 +508,31 @@ function sampleReferencePointsInEPSG3857(refPoints, tileCorners, projectTo3857,
|
|
|
403
508
|
}
|
|
404
509
|
return refPointPositions;
|
|
405
510
|
}
|
|
511
|
+
/**
|
|
512
|
+
* Sample the selected reference points in WGS84 lng/lat.
|
|
513
|
+
*
|
|
514
|
+
* Like {@link sampleReferencePointsInEPSG3857}, reference points are `[relX,
|
|
515
|
+
* relY]` fractions in `[0, 1]` bilinearly interpolated across the tile's four
|
|
516
|
+
* CRS corners, then reprojected to WGS84. Used by the GlobeView bounding-volume
|
|
517
|
+
* path, which projects lng/lat onto the sphere rather than rescaling 3857
|
|
518
|
+
* meters into common space.
|
|
519
|
+
*/
|
|
520
|
+
function sampleReferencePointsInWGS84(refPoints, tileCorners, projectTo4326) {
|
|
521
|
+
const { topLeft, topRight, bottomLeft, bottomRight } = tileCorners;
|
|
522
|
+
const refPointPositions = [];
|
|
523
|
+
for (const [relX, relY] of refPoints) {
|
|
524
|
+
const [geoX, geoY] = bilerpPoint(topLeft, topRight, bottomLeft, bottomRight, relX, relY);
|
|
525
|
+
refPointPositions.push(projectTo4326(geoX, geoY));
|
|
526
|
+
}
|
|
527
|
+
return refPointPositions;
|
|
528
|
+
}
|
|
406
529
|
/**
|
|
407
530
|
* Rescale positions from EPSG:3857 into deck.gl's common space
|
|
408
531
|
*
|
|
409
532
|
* Similar to the upstream code here:
|
|
410
533
|
* https://github.com/visgl/deck.gl/blob/b0134f025148b52b91320d16768ab5d14a745328/modules/geo-layers/src/tileset-2d/tile-2d-traversal.ts#L172-L177
|
|
411
534
|
*/
|
|
412
|
-
function rescaleEPSG3857ToCommonSpace([x, y]) {
|
|
535
|
+
export function rescaleEPSG3857ToCommonSpace([x, y]) {
|
|
413
536
|
// Clamp Y to Web Mercator bounds
|
|
414
537
|
const clampedY = Math.max(-EPSG_3857_HALF_CIRCUMFERENCE, Math.min(EPSG_3857_HALF_CIRCUMFERENCE, y));
|
|
415
538
|
return [
|
|
@@ -417,6 +540,19 @@ function rescaleEPSG3857ToCommonSpace([x, y]) {
|
|
|
417
540
|
(clampedY / EPSG_3857_CIRCUMFERENCE + 0.5) * TILE_SIZE,
|
|
418
541
|
];
|
|
419
542
|
}
|
|
543
|
+
/**
|
|
544
|
+
* Inverse of {@link rescaleEPSG3857ToCommonSpace}: rescale a deck.gl
|
|
545
|
+
* common-space position back into EPSG:3857 meters.
|
|
546
|
+
*
|
|
547
|
+
* Common-space inputs are in-range by construction, so (unlike the forward
|
|
548
|
+
* direction) no latitude clamp is applied.
|
|
549
|
+
*/
|
|
550
|
+
export function rescaleCommonSpaceToEPSG3857([x, y]) {
|
|
551
|
+
return [
|
|
552
|
+
(x / TILE_SIZE - 0.5) * EPSG_3857_CIRCUMFERENCE,
|
|
553
|
+
(y / TILE_SIZE - 0.5) * EPSG_3857_CIRCUMFERENCE,
|
|
554
|
+
];
|
|
555
|
+
}
|
|
420
556
|
/**
|
|
421
557
|
* Above this root-tile count, `createRootTiles` culls to the viewport
|
|
422
558
|
* before instantiation. Below it, every root tile is created and downstream
|
|
@@ -497,7 +633,7 @@ export function getTileIndices(descriptor, opts) {
|
|
|
497
633
|
// so this frame can never evict an entry it will need again this frame.
|
|
498
634
|
boundingVolumeCache.sweep();
|
|
499
635
|
// Only define `project` function for Globe viewports, same as upstream
|
|
500
|
-
const project = viewport instanceof
|
|
636
|
+
const project = viewport instanceof GlobeViewport && viewport.resolution
|
|
501
637
|
? viewport.projectPosition
|
|
502
638
|
: null;
|
|
503
639
|
// Get the culling volume of the current camera
|
|
@@ -562,6 +698,24 @@ export function getTileIndices(descriptor, opts) {
|
|
|
562
698
|
for (const root of roots) {
|
|
563
699
|
root.update(traversalParams);
|
|
564
700
|
}
|
|
701
|
+
// World-copy passes: when the viewport spans multiple world copies (e.g.
|
|
702
|
+
// WebMercatorViewport with repeat: true panned across the antimeridian),
|
|
703
|
+
// re-run the traversal with the tile bounding volumes shifted by ±1, ±2…
|
|
704
|
+
// world copies along common-space X. A tile is selected if any pass selects
|
|
705
|
+
// it. See dev-docs/world-copies.md.
|
|
706
|
+
const subViewportCount = viewport.subViewports?.length ?? 0;
|
|
707
|
+
if (subViewportCount > 1) {
|
|
708
|
+
for (let offset = -1; offset >= -MAX_MAPS; offset--) {
|
|
709
|
+
if (!runOffsetPass(roots, traversalParams, offset)) {
|
|
710
|
+
break;
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
for (let offset = 1; offset <= MAX_MAPS; offset++) {
|
|
714
|
+
if (!runOffsetPass(roots, traversalParams, offset)) {
|
|
715
|
+
break;
|
|
716
|
+
}
|
|
717
|
+
}
|
|
718
|
+
}
|
|
565
719
|
// Collect selected tiles
|
|
566
720
|
const selectedNodes = [];
|
|
567
721
|
for (const root of roots) {
|
|
@@ -569,6 +723,23 @@ export function getTileIndices(descriptor, opts) {
|
|
|
569
723
|
}
|
|
570
724
|
return selectedNodes;
|
|
571
725
|
}
|
|
726
|
+
/**
|
|
727
|
+
* Run a non-zero world-offset traversal pass over each root.
|
|
728
|
+
*
|
|
729
|
+
* Returns `true` if any root tile was visible at this offset, signaling the
|
|
730
|
+
* caller to walk further from the primary world. Returns `false` when no
|
|
731
|
+
* tiles were visible — the offset has gone past the visible range and the
|
|
732
|
+
* caller stops walking that side.
|
|
733
|
+
*/
|
|
734
|
+
function runOffsetPass(roots, baseParams, worldOffset) {
|
|
735
|
+
let anyVisible = false;
|
|
736
|
+
for (const root of roots) {
|
|
737
|
+
if (root.update({ ...baseParams, worldOffset })) {
|
|
738
|
+
anyVisible = true;
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
return anyVisible;
|
|
742
|
+
}
|
|
572
743
|
/**
|
|
573
744
|
* Compute the meters per pixel at a given latitude and zoom level.
|
|
574
745
|
*
|
|
@@ -583,10 +754,44 @@ function getMetersPerPixel(latitude, zoom) {
|
|
|
583
754
|
return ((earthCircumference * Math.cos((latitude * Math.PI) / 180)) /
|
|
584
755
|
2 ** (zoom + 8));
|
|
585
756
|
}
|
|
586
|
-
function
|
|
587
|
-
const [
|
|
757
|
+
function getMetersPerPixelAtCommonSpaceBounds(commonSpaceBounds, zoom) {
|
|
758
|
+
const [minX, minY, maxX, maxY] = commonSpaceBounds;
|
|
759
|
+
// `commonSpaceBounds` is in Web Mercator world space ([0, 512]) in BOTH the
|
|
760
|
+
// mercator and globe paths (the globe path builds it via `lngLatToWorld`), so
|
|
761
|
+
// its center maps back to a real latitude. The 3D oriented-bounding-box
|
|
762
|
+
// center, by contrast, is in globe common space on a globe and would
|
|
763
|
+
// `worldToLngLat` to a garbage latitude (~-89°, near the Mercator
|
|
764
|
+
// singularity), making meters-per-pixel far too small so the LOD always
|
|
765
|
+
// recursed to the finest level.
|
|
766
|
+
const [, lat] = worldToLngLat([(minX + maxX) / 2, (minY + maxY) / 2]);
|
|
588
767
|
return getMetersPerPixel(lat, zoom);
|
|
589
768
|
}
|
|
769
|
+
/**
|
|
770
|
+
* Translate a tile's bounding volume by `dx` units along common-space X.
|
|
771
|
+
*
|
|
772
|
+
* Returns a fresh OBB and AABB; does not mutate the input. Used by the
|
|
773
|
+
* world-copy traversal to test the same tile at multiple shifted positions
|
|
774
|
+
* without recomputing the underlying geometry.
|
|
775
|
+
*/
|
|
776
|
+
function translateBoundingVolume(base, dx) {
|
|
777
|
+
const { boundingVolume, commonSpaceBounds } = base;
|
|
778
|
+
const center = boundingVolume.center;
|
|
779
|
+
const translatedCenter = new Vector3((center[0] ?? 0) + dx, center[1] ?? 0, center[2] ?? 0);
|
|
780
|
+
const translated = new OrientedBoundingBox(translatedCenter, boundingVolume.halfAxes);
|
|
781
|
+
// `update()`'s bounds check always re-reads the offset-0 `commonSpaceBounds`,
|
|
782
|
+
// so this translated AABB isn't consumed in production — it's kept for API
|
|
783
|
+
// symmetry with `boundingVolume` and is asserted directly by unit tests.
|
|
784
|
+
const translatedBounds = [
|
|
785
|
+
commonSpaceBounds[0] + dx,
|
|
786
|
+
commonSpaceBounds[1],
|
|
787
|
+
commonSpaceBounds[2] + dx,
|
|
788
|
+
commonSpaceBounds[3],
|
|
789
|
+
];
|
|
790
|
+
return {
|
|
791
|
+
boundingVolume: translated,
|
|
792
|
+
commonSpaceBounds: translatedBounds,
|
|
793
|
+
};
|
|
794
|
+
}
|
|
590
795
|
/**
|
|
591
796
|
* Compute the axis-aligned bounding box of a rotated tile rectangle.
|
|
592
797
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raster-tile-traversal.js","sourceRoot":"","sources":["../../src/raster-tileset/raster-tile-traversal.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"raster-tile-traversal.js","sourceRoot":"","sources":["../../src/raster-tileset/raster-tile-traversal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,cAAc,IAAI,aAAa,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EACL,aAAa,EACb,iCAAiC,EACjC,mBAAmB,EACnB,KAAK,GACN,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAErE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAcjE;;;;;;;;;;GAUG;AACH,MAAM,SAAS,GAAG,GAAG,CAAC;AAEtB;;;;GAIG;AACH,MAAM,QAAQ,GAAG,CAAC,CAAC;AAEnB,sEAAsE;AACtE,eAAe;AACf,EAAE;AACF,2EAA2E;AAC3E,yEAAyE;AACzE,+EAA+E;AAC/E,4EAA4E;AAC5E,6CAA6C;AAC7C,EAAE;AACF,gFAAgF;AAChF,8EAA8E;AAC9E,gFAAgF;AAChF,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAC/E,gEAAgE;AAEhE,+DAA+D;AAC/D,MAAM,YAAY,GAAuB;IACvC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,SAAS;IACrB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW;IACnB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc;IACtB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY;IACpB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,eAAe;CACxB,CAAC;AAEF,2DAA2D;AAC3D,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC;IACvC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,YAAY;IACtB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,WAAW;IACrB,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,aAAa;IACvB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,cAAc;CACzB,CAAC,CAAC;AAEH,0EAA0E;AAC1E,0EAA0E;AAC1E,4EAA4E;AAC5E,6EAA6E;AAC7E,8EAA8E;AAC9E,4EAA4E;AAC5E,0EAA0E;AAC1E,+EAA+E;AAC/E,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,CAAC;IACxC,CAAC,IAAI,EAAE,GAAG,CAAC;IACX,CAAC,IAAI,EAAE,GAAG,CAAC;CACZ,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAElC;;GAEG;AACH,MAAM,uBAAuB,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,iBAAiB,CAAC;AAChE,MAAM,4BAA4B,GAAG,uBAAuB,GAAG,CAAC,CAAC;AAEjE,0EAA0E;AAC1E,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AAE/C;;;;;;;;;;GAUG;AACH,MAAM,OAAO,cAAc;IACzB,yBAAyB;IACzB,CAAC,CAAS;IAEV,0BAA0B;IAC1B,CAAC,CAAS;IAEV,uDAAuD;IACvD,CAAC,CAAS;IAEF,UAAU,CAA0B;IAE5C;;;;;OAKG;IACK,YAAY,CAAW;IAE/B;;;;OAIG;IACK,QAAQ,CAAW;IAE3B,4CAA4C;IACpC,SAAS,CAA2B;IAE5C,YACE,CAAS,EACT,CAAS,EACT,CAAS,EACT,EAAE,UAAU,EAA2C;QAEvD,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,kDAAkD;IAClD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC;IACzC,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,QAAQ;QACV,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAC/C,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;gBACnB,4CAA4C;gBAC5C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAE,CAAC;YAEnD,+CAA+C;YAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YACtE,MAAM,YAAY,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;YAEpD,qCAAqC;YACrC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GACtC,UAAU,CAAC,oBAAoB,CAAC,GAAG,YAAY,CAAC,CAAC;YAEnD,MAAM,QAAQ,GAAqB,EAAE,CAAC;YACtC,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;YAC5B,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtC,QAAQ,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC;YAED,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QACzD,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,MAAM,CAAC,MAoCN;QACC,MAAM,EACJ,QAAQ,EACR,aAAa,EACb,eAAe,EACf,IAAI,EACJ,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EACxC,OAAO,EACP,MAAM,EACN,UAAU,EACV,WAAW,GAAG,CAAC,EACf,mBAAmB,GACpB,GAAG,MAAM,CAAC;QAEX,uEAAuE;QACvE,iEAAiE;QACjE,oEAAoE;QACpE,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACxB,CAAC;QAED,uEAAuE;QACvE,4EAA4E;QAC5E,yEAAyE;QACzE,eAAe;QACf,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAClE,eAAe,EACf,OAAO,EACP,mBAAmB,EACnB,WAAW,CACZ,CAAC;QAEF,0BAA0B;QAC1B,yEAAyE;QACzE,wEAAwE;QACxE,yEAAyE;QACzE,+DAA+D;QAC/D,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAC/C,eAAe,EACf,OAAO,EACP,mBAAmB,EACnB,CAAC,CACF,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACrE,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,+DAA+D;QAC/D,gEAAgE;QAChE,MAAM,QAAQ,GAAG,aAAa,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;QACjE,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE/B,kEAAkE;QAClE,4EAA4E;QAC5E,gDAAgD;QAChD,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;YACzC,MAAM,iBAAiB,GAAG,oCAAoC,CAC5D,iBAAiB,EACjB,QAAQ,CAAC,IAAI,CACd,CAAC;YAEF,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;YAErD,iEAAiE;YACjE,mEAAmE;YACnE,0CAA0C;YAC1C,MAAM,0BAA0B,GAC9B,CAAC,kBAAkB,GAAG,UAAU,CAAC,GAAG,iBAAiB,CAAC;YAExD,IACE,0BAA0B,IAAI,CAAC;gBAC/B,IAAI,CAAC,CAAC,IAAI,IAAI;gBACd,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,EACrC,CAAC;gBACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACrB,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,kDAAkD;QAClD,EAAE;QACF,qEAAqE;QACrE,0EAA0E;QAC1E,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACxB,CAAC;YAED,IAAI,eAAe,GAAG,KAAK,CAAC;YAE5B,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;gBAC7B,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;oBACzB,eAAe,GAAG,IAAI,CAAC;gBACzB,CAAC;YACH,CAAC;YAED,mEAAmE;YACnE,2DAA2D;YAC3D,0DAA0D;YAC1D,wDAAwD;YACxD,IAAI,eAAe,EAAE,CAAC;gBACpB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YAC3B,CAAC;YACD,OAAO,eAAe,CAAC;QACzB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;OAMG;IACH,WAAW,CAAC,SAA2B,EAAE;QACvC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAClC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;OAMG;IACH,YAAY,CAAC,MAAc,EAAE,iBAAyB;QACpD,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC;QACxC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,iBAAiB,CAAC;QAEnE,MAAM,MAAM,GACV,QAAQ,GAAG,IAAI,IAAI,QAAQ,GAAG,IAAI,IAAI,QAAQ,GAAG,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC;QAE3E,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,iBAAiB,CACf,MAAc,EACd,OAA6C,EAC7C,mBAAwC,EACxC,WAAW,GAAG,CAAC;QAEf,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACjE,yEAAyE;QACzE,sEAAsE;QACtE,4DAA4D;QAC5D,IAAI,IAGH,CAAC;QACF,IACE,QAAQ;YACR,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC;YAChC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAChC,CAAC;YACD,IAAI,GAAG,QAAQ,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACnD,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,uBAAuB,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,CAAC,CAAC;IAChE,CAAC;IAED;;;;;;OAMG;IACK,qBAAqB,CAC3B,MAAc,EACd,OAA6C;QAE7C,yEAAyE;QACzE,gEAAgE;QAChE,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAC/C,CAAC;QAED,0EAA0E;QAC1E,eAAe;QAEf,uEAAuE;QACvE,oEAAoE;QACpE,WAAW;QAEX,kEAAkE;QAClE,qDAAqD;QACrD,OAAO,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IAED;;;;OAIG;IACK,yBAAyB,CAAC,MAAc;QAI9C,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC;QAE5B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpE,MAAM,iBAAiB,GAAG,+BAA+B,CACvD,YAAY,EACZ,WAAW,EACX,IAAI,CAAC,UAAU,CAAC,aAAa,EAC7B,IAAI,CAAC,UAAU,CAAC,aAAa,CAC9B,CAAC;QAEF,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CACxD,4BAA4B,CAAC,EAAE,CAAC,CACjC,CAAC;QAEF,MAAM,iBAAiB,GAA+B,EAAE,CAAC;QACzD,KAAK,MAAM,CAAC,IAAI,oBAAoB,EAAE,CAAC;YACrC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAE3C,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAClB,iEAAiE;gBACjE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,0EAA0E;QAC1E,mCAAmC;QACnC,IAAI,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;QACpC,IAAI,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;QACpC,IAAI,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;QACpC,IAAI,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAEpC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,oBAAoB,EAAE,CAAC;YAC1C,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;gBACb,IAAI,GAAG,CAAC,CAAC;YACX,CAAC;YACD,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;gBACb,IAAI,GAAG,CAAC,CAAC;YACX,CAAC;YACD,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;gBACb,IAAI,GAAG,CAAC,CAAC;YACX,CAAC;YACD,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;gBACb,IAAI,GAAG,CAAC,CAAC;YACX,CAAC;QACH,CAAC;QAED,MAAM,iBAAiB,GAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3D,OAAO;YACL,cAAc,EAAE,iCAAiC,CAAC,iBAAiB,CAAC;YACpE,iBAAiB;SAClB,CAAC;IACJ,CAAC;IAED;;;;;;;;;;OAUG;IACK,uBAAuB,CAAC,OAAoC;QAIlE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,cAAc,GAAG,4BAA4B,CACjD,aAAa,EACb,WAAW,EACX,IAAI,CAAC,UAAU,CAAC,aAAa,CAC9B,CAAC;QAEF,MAAM,iBAAiB,GAA+B,EAAE,CAAC;QACzD,IAAI,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;QACpC,IAAI,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;QACpC,IAAI,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;QACpC,IAAI,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAEpC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,cAAc,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACzC,iBAAiB,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,EAAE,SAAS,CAAC,CAAC,CAAE,EAAE,SAAS,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;YAEtE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YACnD,IAAI,MAAM,GAAG,IAAI,EAAE,CAAC;gBAClB,IAAI,GAAG,MAAM,CAAC;YAChB,CAAC;YACD,IAAI,MAAM,GAAG,IAAI,EAAE,CAAC;gBAClB,IAAI,GAAG,MAAM,CAAC;YAChB,CAAC;YACD,IAAI,MAAM,GAAG,IAAI,EAAE,CAAC;gBAClB,IAAI,GAAG,MAAM,CAAC;YAChB,CAAC;YACD,IAAI,MAAM,GAAG,IAAI,EAAE,CAAC;gBAClB,IAAI,GAAG,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAED,OAAO;YACL,cAAc,EAAE,iCAAiC,CAAC,iBAAiB,CAAC;YACpE,iBAAiB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;SAC5C,CAAC;IACJ,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAS,wBAAwB,CAC/B,aAAiC,EACjC,aAAiC;IAEjC,OAAO,CAAC,CAAS,EAAE,CAAS,EAAoB,EAAE;QAChD,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YAC/C,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CACzB,CAAC,oBAAoB,EACrB,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,GAAG,CAAC,CACpC,CAAC;QACF,MAAM,MAAM,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;QAC5C,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,iBAAiB,CAAC,GAAG,GAAG,CAAC;QACxD,MAAM,KAAK,GACT,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC;QACnE,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACxB,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,+BAA+B,CACtC,SAA6B,EAC7B,WAAoB,EACpB,aAAiC,EACjC,aAAiC;IAEjC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,WAAW,CAAC;IACnE,MAAM,oBAAoB,GAAG,wBAAwB,CACnD,aAAa,EACb,aAAa,CACd,CAAC;IACF,MAAM,iBAAiB,GAAuB,EAAE,CAAC;IAEjD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,WAAW,CAC9B,OAAO,EACP,QAAQ,EACR,UAAU,EACV,WAAW,EACX,IAAI,EACJ,IAAI,CACL,CAAC;QACF,iBAAiB,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,4BAA4B,CACnC,SAA6B,EAC7B,WAAoB,EACpB,aAAiC;IAEjC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,WAAW,CAAC;IACnE,MAAM,iBAAiB,GAAuB,EAAE,CAAC;IACjD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,WAAW,CAC9B,OAAO,EACP,QAAQ,EACR,UAAU,EACV,WAAW,EACX,IAAI,EACJ,IAAI,CACL,CAAC;QACF,iBAAiB,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAmB;IAInE,iCAAiC;IACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACvB,CAAC,4BAA4B,EAC7B,IAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAC1C,CAAC;IAEF,OAAO;QACL,CAAC,CAAC,GAAG,uBAAuB,GAAG,GAAG,CAAC,GAAG,SAAS;QAC/C,CAAC,QAAQ,GAAG,uBAAuB,GAAG,GAAG,CAAC,GAAG,SAAS;KACvD,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,4BAA4B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAmB;IAInE,OAAO;QACL,CAAC,CAAC,GAAG,SAAS,GAAG,GAAG,CAAC,GAAG,uBAAuB;QAC/C,CAAC,CAAC,GAAG,SAAS,GAAG,GAAG,CAAC,GAAG,uBAAuB;KAChD,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAEnC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,eAAe,CAAC,IAI/B;IACC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC;IAC1D,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC;IAExC,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,MAAM,aAAa,GAAG,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,YAAY,CAAC;IAErE,IAAI,aAAa,IAAI,sBAAsB,EAAE,CAAC;QAC5C,uEAAuE;QACvE,qCAAqC;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/C,KAAK,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,sEAAsE;IACtE,yDAAyD;IACzD,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;IACtC,MAAM,UAAU,GAAW;QACzB,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;KAC7C,CAAC;IACF,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,eAAe,CAC9C,UAAU,CAAC,eAAe,EAC1B,UAAU,CAAC,CAAC,CAAC,EACb,UAAU,CAAC,CAAC,CAAC,EACb,UAAU,CAAC,CAAC,CAAC,EACb,UAAU,CAAC,CAAC,CAAC,CACd,CAAC;IACF,MAAM,SAAS,GAAG,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACzE,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1D,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1D,KAAK,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,UAAmC,EACnC,IAoBC;IAED,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC;IAErE,2EAA2E;IAC3E,2EAA2E;IAC3E,qEAAqE;IACrE,MAAM,mBAAmB,GACvB,IAAI,CAAC,mBAAmB,IAAI,IAAI,mBAAmB,EAAE,CAAC;IAExD,6EAA6E;IAC7E,wEAAwE;IACxE,mBAAmB,CAAC,KAAK,EAAE,CAAC;IAE5B,uEAAuE;IACvE,MAAM,OAAO,GACX,QAAQ,YAAY,aAAa,IAAI,QAAQ,CAAC,UAAU;QACtD,CAAC,CAAC,QAAQ,CAAC,eAAe;QAC1B,CAAC,CAAC,IAAI,CAAC;IAEX,+CAA+C;IAC/C,wBAAwB;IACxB,MAAM,MAAM,GAAY,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC,GAAG,CACpE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,CACvE,CAAC;IACF,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;IAEhD,6CAA6C;IAC7C,MAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAE,CAAC;IAChE,MAAM,YAAY,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,YAAY,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAEhE,8EAA8E;IAC9E,iEAAiE;IACjE,EAAE;IACF,kBAAkB;IAClB,EAAE;IACF,QAAQ;IACR,eAAe;IACf,gFAAgF;IAChF,MAAM;IACN,EAAE;IACF,8BAA8B;IAC9B,EAAE;IACF,yEAAyE;IACzE,2EAA2E;IAC3E,iEAAiE;IACjE,EAAE;IACF,oEAAoE;IACpE,kEAAkE;IAClE,EAAE;IACF,2EAA2E;IAC3E,yDAAyD;IACzD,EAAE;IACF,2EAA2E;IAC3E,YAAY;IACZ,MAAM,IAAI,GAAG,CAAC,CAAC;IAEf,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC;IACrD,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,MAAM,MAAM,GAAW;QACrB,UAAU,CAAC,CAAC,CAAC;QACb,UAAU,CAAC,CAAC,CAAC;QACb,QAAQ,CAAC,CAAC,CAAC;QACX,QAAQ,CAAC,CAAC,CAAC;KACZ,CAAC;IAEF,MAAM,KAAK,GAAG,eAAe,CAAC;QAC5B,UAAU;QACV,QAAQ;QACR,kBAAkB,EAAE,WAAW;KAChC,CAAC,CAAC;IAEH,iCAAiC;IACjC,MAAM,eAAe,GAAG;QACtB,QAAQ;QACR,OAAO;QACP,aAAa;QACb,eAAe,EAAE,CAAC,YAAY,EAAE,YAAY,CAAW;QACvD,IAAI;QACJ,IAAI;QACJ,MAAM;QACN,UAAU;QACV,mBAAmB;KACpB,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IAC/B,CAAC;IAED,yEAAyE;IACzE,yEAAyE;IACzE,yEAAyE;IACzE,4EAA4E;IAC5E,oCAAoC;IACpC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC;IAC5D,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;QACzB,KAAK,IAAI,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC;YACpD,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC;gBACnD,MAAM;YACR,CAAC;QACH,CAAC;QACD,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC;YAClD,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC;gBACnD,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,MAAM,aAAa,GAAqB,EAAE,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,aAAa,CACpB,KAAuB,EACvB,UAAmD,EACnD,WAAmB;IAEnB,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;YAChD,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,iBAAiB,CAAC,QAAgB,EAAE,IAAY;IACvD,MAAM,kBAAkB,GAAG,YAAY,CAAC;IACxC,OAAO,CACL,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;QAC3D,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAChB,CAAC;AACJ,CAAC;AAED,SAAS,oCAAoC,CAC3C,iBAAyB,EACzB,IAAY;IAEZ,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,iBAAiB,CAAC;IACnD,4EAA4E;IAC5E,8EAA8E;IAC9E,wEAAwE;IACxE,qEAAqE;IACrE,kEAAkE;IAClE,wEAAwE;IACxE,gCAAgC;IAChC,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACtE,OAAO,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;GAMG;AACH,SAAS,uBAAuB,CAC9B,IAAwE,EACxE,EAAU;IAEV,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC;IACnD,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;IACrC,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAClC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EACrB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EACd,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CACf,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,mBAAmB,CACxC,gBAAgB,EAChB,cAAc,CAAC,QAAQ,CACxB,CAAC;IACF,8EAA8E;IAC9E,2EAA2E;IAC3E,yEAAyE;IACzE,MAAM,gBAAgB,GAAW;QAC/B,iBAAiB,CAAC,CAAC,CAAC,GAAG,EAAE;QACzB,iBAAiB,CAAC,CAAC,CAAC;QACpB,iBAAiB,CAAC,CAAC,CAAC,GAAG,EAAE;QACzB,iBAAiB,CAAC,CAAC,CAAC;KACrB,CAAC;IACF,OAAO;QACL,cAAc,EAAE,UAAU;QAC1B,iBAAiB,EAAE,gBAAgB;KACpC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,EACvB,OAAO,EACP,QAAQ,EACR,UAAU,EACV,WAAW,GACH;IACR,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,SAAS,WAAW,CAClB,GAAU,EACV,GAAU,EACV,GAAU,EACV,GAAU,EACV,CAAS,EACT,CAAS;IAET,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACxB,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAElB,OAAO;QACL,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;QACzD,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;KAC1D,CAAC;AACJ,CAAC"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import type { Viewport } from "@deck.gl/core";
|
|
9
9
|
import type { GeoBoundingBox, _Tileset2DProps as Tileset2DProps } from "@deck.gl/geo-layers";
|
|
10
10
|
import { _Tileset2D as Tileset2D } from "@deck.gl/geo-layers";
|
|
11
|
+
import type { InitialTriangulation } from "@developmentseed/raster-reproject";
|
|
11
12
|
import type { Matrix4 } from "@math.gl/core";
|
|
12
13
|
import type { RasterTilesetDescriptor } from "./tileset-interface.js";
|
|
13
14
|
import type { Corners, ProjectedBoundingBox, ProjectionFunction, TileIndex, ZRange } from "./types.js";
|
|
@@ -53,6 +54,30 @@ export type RasterTileMetadata = {
|
|
|
53
54
|
* Same stability guarantees as {@link TileMetadata.forwardTransform}.
|
|
54
55
|
*/
|
|
55
56
|
inverseTransform: ProjectionFunction;
|
|
57
|
+
/**
|
|
58
|
+
* Forward (source CRS → deck.gl common space) projection.
|
|
59
|
+
*
|
|
60
|
+
* Mirrors deck.gl's `Viewport.projectPosition` but for this descriptor's
|
|
61
|
+
* source CRS rather than lng/lat. Descriptor-global (identical for every
|
|
62
|
+
* tile) and built once on the tileset, so the reference is stable for the
|
|
63
|
+
* tileset's lifetime — which is what `RasterLayer`'s `reprojectionFnsChanged`
|
|
64
|
+
* check relies on to avoid regenerating the mesh every render.
|
|
65
|
+
*/
|
|
66
|
+
_projectPosition: ProjectionFunction;
|
|
67
|
+
/**
|
|
68
|
+
* Inverse (deck.gl common space → source CRS) projection.
|
|
69
|
+
*
|
|
70
|
+
* Mirrors deck.gl's `Viewport.unprojectPosition`. Same stability guarantees
|
|
71
|
+
* as {@link RasterTileMetadata._projectPosition}.
|
|
72
|
+
*/
|
|
73
|
+
_unprojectPosition: ProjectionFunction;
|
|
74
|
+
/**
|
|
75
|
+
* Seed triangulation that clamps this tile's reprojection mesh to the valid
|
|
76
|
+
* Web Mercator latitude band (±85.051°), or `undefined` if no clamp is needed.
|
|
77
|
+
* Consumed only by the Web Mercator render path; the globe path renders the
|
|
78
|
+
* full mesh. See {@link createInitialWebMercatorTriangulation}.
|
|
79
|
+
*/
|
|
80
|
+
_webMercatorInitialTriangulation?: InitialTriangulation;
|
|
56
81
|
};
|
|
57
82
|
/**
|
|
58
83
|
* Configuration for a {@link RasterTileset2D}.
|
|
@@ -94,6 +119,14 @@ export declare class RasterTileset2D extends Tileset2D {
|
|
|
94
119
|
private wgs84Bounds;
|
|
95
120
|
private getPixelRatio;
|
|
96
121
|
private boundingVolumeCache;
|
|
122
|
+
private projectPosition;
|
|
123
|
+
private unprojectPosition;
|
|
124
|
+
/**
|
|
125
|
+
* Projection mode of the viewport on the previous `getTileIndices` call.
|
|
126
|
+
* `undefined` until the first call. Used to clear {@link boundingVolumeCache}
|
|
127
|
+
* on a globe↔mercator switch (volumes are not valid across projection modes).
|
|
128
|
+
*/
|
|
129
|
+
private lastViewportIsGlobe?;
|
|
97
130
|
constructor(opts: Tileset2DProps, descriptor: RasterTilesetDescriptor, { getPixelRatio, maxBoundingVolumeCacheSize }?: RasterTileset2DOptions);
|
|
98
131
|
/**
|
|
99
132
|
* Get tile indices visible in viewport
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raster-tileset-2d.d.ts","sourceRoot":"","sources":["../../src/raster-tileset/raster-tileset-2d.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"raster-tileset-2d.d.ts","sourceRoot":"","sources":["../../src/raster-tileset/raster-tileset-2d.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,KAAK,EACV,cAAc,EACd,eAAe,IAAI,cAAc,EAClC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,IAAI,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAQ7C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,KAAK,EAEV,OAAO,EACP,oBAAoB,EACpB,kBAAkB,EAClB,SAAS,EACT,MAAM,EACP,MAAM,YAAY,CAAC;AAGpB,+DAA+D;AAC/D,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;OAEG;IACH,IAAI,EAAE,cAAc,CAAC;IAErB;;OAEG;IACH,aAAa,EAAE,oBAAoB,CAAC;IAEpC;;;;;;OAMG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;;;;;;OAQG;IACH,gBAAgB,EAAE,kBAAkB,CAAC;IAErC;;;;OAIG;IACH,gBAAgB,EAAE,kBAAkB,CAAC;IAErC;;;;;;;;OAQG;IACH,gBAAgB,EAAE,kBAAkB,CAAC;IAErC;;;;;OAKG;IACH,kBAAkB,EAAE,kBAAkB,CAAC;IAEvC;;;;;OAKG;IACH,gCAAgC,CAAC,EAAE,oBAAoB,CAAC;CACzD,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,EAAE,MAAM,MAAM,CAAC;IAE7B;;;;;;;;OAQG;IACH,0BAA0B,CAAC,EAAE,MAAM,CAAC;CACrC;AAED;;;;;;GAMG;AACH,qBAAa,eAAgB,SAAQ,SAAS;IAC5C,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,iBAAiB,CAAqB;IAC9C;;;;OAIG;IACH,OAAO,CAAC,mBAAmB,CAAC,CAAU;gBAGpC,IAAI,EAAE,cAAc,EACpB,UAAU,EAAE,uBAAuB,EACnC,EAAE,aAAa,EAAE,0BAA0B,EAAE,GAAE,sBAA2B;IAwC5E;;;;;;;;;;;;;;;;OAgBG;IACM,cAAc,CAAC,IAAI,EAAE;QAC5B,QAAQ,EAAE,QAAQ,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;KAC9B,GAAG,SAAS,EAAE;IAyCf;;;;;;;OAOG;IACH,OAAO,CAAC,yBAAyB;IA4BxB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM;IAInC,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS;IAiC3C,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM;IAIrC,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,kBAAkB;CAwE/D"}
|
|
@@ -5,11 +5,13 @@
|
|
|
5
5
|
* This version properly implements frustum culling and bounding volume calculations
|
|
6
6
|
* following the pattern from deck.gl's OSM tile indexing.
|
|
7
7
|
*/
|
|
8
|
+
import { _GlobeViewport as GlobeViewport } from "@deck.gl/core";
|
|
8
9
|
import { _Tileset2D as Tileset2D } from "@deck.gl/geo-layers";
|
|
9
10
|
import { transformBounds } from "@developmentseed/proj";
|
|
10
11
|
import { BoundingVolumeCache } from "./bounding-volume-cache.js";
|
|
11
|
-
import { getTileIndices } from "./raster-tile-traversal.js";
|
|
12
|
+
import { getTileIndices, rescaleCommonSpaceToEPSG3857, rescaleEPSG3857ToCommonSpace, } from "./raster-tile-traversal.js";
|
|
12
13
|
import { sortItemsByDistanceFromViewportCenter } from "./sort-by-distance.js";
|
|
14
|
+
import { createInitialWebMercatorTriangulation } from "./web-mercator-clamp.js";
|
|
13
15
|
/**
|
|
14
16
|
* A generic tileset implementation organized according to the OGC
|
|
15
17
|
* [TileMatrixSet](https://docs.ogc.org/is/17-083r4/17-083r4.html)
|
|
@@ -22,6 +24,14 @@ export class RasterTileset2D extends Tileset2D {
|
|
|
22
24
|
wgs84Bounds;
|
|
23
25
|
getPixelRatio;
|
|
24
26
|
boundingVolumeCache;
|
|
27
|
+
projectPosition;
|
|
28
|
+
unprojectPosition;
|
|
29
|
+
/**
|
|
30
|
+
* Projection mode of the viewport on the previous `getTileIndices` call.
|
|
31
|
+
* `undefined` until the first call. Used to clear {@link boundingVolumeCache}
|
|
32
|
+
* on a globe↔mercator switch (volumes are not valid across projection modes).
|
|
33
|
+
*/
|
|
34
|
+
lastViewportIsGlobe;
|
|
25
35
|
constructor(opts, descriptor, { getPixelRatio, maxBoundingVolumeCacheSize } = {}) {
|
|
26
36
|
super(opts);
|
|
27
37
|
this.descriptor = descriptor;
|
|
@@ -29,6 +39,17 @@ export class RasterTileset2D extends Tileset2D {
|
|
|
29
39
|
this.boundingVolumeCache = new BoundingVolumeCache({
|
|
30
40
|
maxEntries: maxBoundingVolumeCacheSize,
|
|
31
41
|
});
|
|
42
|
+
// Source-CRS ↔ deck.gl common-space projection, built once here so the
|
|
43
|
+
// closures are reference-stable for the tileset's lifetime. Exposed on
|
|
44
|
+
// each tile's metadata; `RasterTileLayer._renderSubLayers` reads them off
|
|
45
|
+
// the tile to keep `RasterLayer`'s reprojection-equality check stable
|
|
46
|
+
// across renders (deck.gl recreates the layer instance every render, so
|
|
47
|
+
// per-render-derived closures would regenerate the mesh every frame).
|
|
48
|
+
this.projectPosition = (x, y) => rescaleEPSG3857ToCommonSpace(descriptor.projectTo3857(x, y));
|
|
49
|
+
this.unprojectPosition = (cx, cy) => {
|
|
50
|
+
const [mx, my] = rescaleCommonSpaceToEPSG3857([cx, cy]);
|
|
51
|
+
return descriptor.projectFrom3857(mx, my);
|
|
52
|
+
};
|
|
32
53
|
const rawBounds = transformBounds(this.descriptor.projectTo4326, ...this.descriptor.projectedBounds);
|
|
33
54
|
// Web Mercator cannot represent latitudes outside ~±85.051°, and the
|
|
34
55
|
// downstream tile traversal calls `lngLatToWorld` on these bounds which
|
|
@@ -62,6 +83,17 @@ export class RasterTileset2D extends Tileset2D {
|
|
|
62
83
|
*/
|
|
63
84
|
getTileIndices(opts) {
|
|
64
85
|
const { viewport, minZoom } = opts;
|
|
86
|
+
// A tile's bounding volume is computed in a different common space under a
|
|
87
|
+
// GlobeView than under Web Mercator, but the cache key is only (z, x, y).
|
|
88
|
+
// When the viewport's projection mode flips, drop the stale volumes. This
|
|
89
|
+
// mirrors the `project` gate in the tile traversal. (See
|
|
90
|
+
// BoundingVolumeCache.)
|
|
91
|
+
const isGlobe = Boolean(viewport instanceof GlobeViewport && viewport.resolution);
|
|
92
|
+
if (this.lastViewportIsGlobe !== undefined &&
|
|
93
|
+
this.lastViewportIsGlobe !== isGlobe) {
|
|
94
|
+
this.boundingVolumeCache.clear();
|
|
95
|
+
}
|
|
96
|
+
this.lastViewportIsGlobe = isGlobe;
|
|
65
97
|
if (typeof minZoom === "number" && viewport.zoom < minZoom) {
|
|
66
98
|
return [];
|
|
67
99
|
}
|
|
@@ -159,6 +191,16 @@ export class RasterTileset2D extends Tileset2D {
|
|
|
159
191
|
// (best-available) would not show parent tiles correctly.
|
|
160
192
|
const [west, south, east, north] = transformBounds(this.descriptor.projectTo4326, ...projectedBounds);
|
|
161
193
|
const { forwardTransform, inverseTransform } = levelDescriptor.tileTransform(x, y);
|
|
194
|
+
// Clamp the reprojection mesh to the valid Web Mercator latitude band for
|
|
195
|
+
// tiles that extend past ±85.051° (e.g. a global EPSG:4326 image reaching
|
|
196
|
+
// ±90°). Computed once here so the reference is stable across renders.
|
|
197
|
+
const cornerLat = (corner) => this.descriptor.projectTo4326(corner[0], corner[1])[1];
|
|
198
|
+
const _webMercatorInitialTriangulation = createInitialWebMercatorTriangulation({
|
|
199
|
+
topLeft: cornerLat(topLeft),
|
|
200
|
+
topRight: cornerLat(topRight),
|
|
201
|
+
bottomLeft: cornerLat(bottomLeft),
|
|
202
|
+
bottomRight: cornerLat(bottomRight),
|
|
203
|
+
});
|
|
162
204
|
return {
|
|
163
205
|
bbox: {
|
|
164
206
|
west,
|
|
@@ -177,6 +219,9 @@ export class RasterTileset2D extends Tileset2D {
|
|
|
177
219
|
tileHeight,
|
|
178
220
|
forwardTransform,
|
|
179
221
|
inverseTransform,
|
|
222
|
+
_projectPosition: this.projectPosition,
|
|
223
|
+
_unprojectPosition: this.unprojectPosition,
|
|
224
|
+
_webMercatorInitialTriangulation,
|
|
180
225
|
};
|
|
181
226
|
}
|
|
182
227
|
}
|