@developmentseed/deck.gl-geotiff 0.7.0-beta.1 → 0.8.0-beta.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/cog-layer.d.ts +22 -5
- package/dist/cog-layer.d.ts.map +1 -1
- package/dist/cog-layer.js +25 -2
- package/dist/cog-layer.js.map +1 -1
- package/dist/default-concurrency-limiter.d.ts +10 -0
- package/dist/default-concurrency-limiter.d.ts.map +1 -0
- package/dist/default-concurrency-limiter.js +12 -0
- package/dist/default-concurrency-limiter.js.map +1 -0
- package/dist/geotiff/geotiff.d.ts +6 -2
- package/dist/geotiff/geotiff.d.ts.map +1 -1
- package/dist/geotiff/geotiff.js +2 -2
- package/dist/geotiff/geotiff.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mosaic-layer/mosaic-layer.d.ts +63 -4
- package/dist/mosaic-layer/mosaic-layer.d.ts.map +1 -1
- package/dist/mosaic-layer/mosaic-layer.js +127 -14
- package/dist/mosaic-layer/mosaic-layer.js.map +1 -1
- package/dist/mosaic-layer/mosaic-tileset-2d.d.ts +7 -16
- package/dist/mosaic-layer/mosaic-tileset-2d.d.ts.map +1 -1
- package/dist/mosaic-layer/mosaic-tileset-2d.js +34 -54
- package/dist/mosaic-layer/mosaic-tileset-2d.js.map +1 -1
- package/dist/multi-cog-layer.d.ts +23 -10
- package/dist/multi-cog-layer.d.ts.map +1 -1
- package/dist/multi-cog-layer.js +58 -15
- package/dist/multi-cog-layer.js.map +1 -1
- package/package.json +10 -10
- package/dist/geotiff-layer.d.ts +0 -90
- package/dist/geotiff-layer.d.ts.map +0 -1
- package/dist/geotiff-layer.js +0 -81
- package/dist/geotiff-layer.js.map +0 -1
- package/dist/geotiff-reprojection.d.ts +0 -13
- package/dist/geotiff-reprojection.d.ts.map +0 -1
- package/dist/geotiff-reprojection.js +0 -26
- package/dist/geotiff-reprojection.js.map +0 -1
package/dist/cog-layer.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { UpdateParameters } from "@deck.gl/core";
|
|
2
|
-
import type { MinimalTileData, GetTileDataOptions as RasterTileGetTileDataOptions, RasterTileLayerProps,
|
|
1
|
+
import type { LayerContext, UpdateParameters } from "@deck.gl/core";
|
|
2
|
+
import type { MinimalTileData, GetTileDataOptions as RasterTileGetTileDataOptions, RasterTileLayerProps, RasterTilesetDescriptor, RenderTileResult } from "@developmentseed/deck.gl-raster";
|
|
3
3
|
import { RasterTileLayer } from "@developmentseed/deck.gl-raster";
|
|
4
|
-
import type { DecoderPool, GeoTIFF, Overview } from "@developmentseed/geotiff";
|
|
4
|
+
import type { ConcurrencyLimiter, DecoderPool, GeoTIFF, Overview } from "@developmentseed/geotiff";
|
|
5
5
|
import type { EpsgResolver, ProjectionDefinition } from "@developmentseed/proj";
|
|
6
6
|
import type { Texture } from "@luma.gl/core";
|
|
7
7
|
import type { TextureDataT } from "./geotiff/render-pipeline.js";
|
|
@@ -92,6 +92,18 @@ export type COGLayerProps<DataT extends MinimalTileData = DefaultDataT> = Omit<R
|
|
|
92
92
|
* automatically aborted.
|
|
93
93
|
*/
|
|
94
94
|
signal?: AbortSignal;
|
|
95
|
+
/**
|
|
96
|
+
* Caps concurrent HTTP requests for this layer's source fetches.
|
|
97
|
+
*
|
|
98
|
+
* Defaults to a maximum of 6 concurrent requests per origin, which aligns
|
|
99
|
+
* with browser limits of 6 HTTP/1.1 requests per origin. If your sources
|
|
100
|
+
* support HTTP/2 or HTTP/3, you may want to increase this limit or disable
|
|
101
|
+
* it entirely by passing `null`.
|
|
102
|
+
*
|
|
103
|
+
* Ignored when `geotiff` is a pre-opened `GeoTIFF` instance — wire the
|
|
104
|
+
* limiter via {@link GeoTIFF.fromUrl} at construction time instead.
|
|
105
|
+
*/
|
|
106
|
+
concurrencyLimiter?: ConcurrencyLimiter | null;
|
|
95
107
|
};
|
|
96
108
|
/**
|
|
97
109
|
* COGLayer renders a COG using a tiled approach with reprojection.
|
|
@@ -101,15 +113,20 @@ export declare class COGLayer<DataT extends MinimalTileData = DefaultDataT> exte
|
|
|
101
113
|
static defaultProps: typeof RasterTileLayer.defaultProps;
|
|
102
114
|
state: {
|
|
103
115
|
geotiff?: GeoTIFF;
|
|
104
|
-
tilesetDescriptor?:
|
|
116
|
+
tilesetDescriptor?: RasterTilesetDescriptor;
|
|
105
117
|
defaultGetTileData?: COGLayerProps<TextureDataT>["getTileData"];
|
|
106
118
|
defaultRenderTile?: COGLayerProps<TextureDataT>["renderTile"];
|
|
119
|
+
/** Aborts the in-flight header read when the `geotiff` prop changes or the
|
|
120
|
+
* layer is removed
|
|
121
|
+
*/
|
|
122
|
+
abortController?: AbortController;
|
|
107
123
|
};
|
|
108
124
|
initializeState(): void;
|
|
125
|
+
finalizeState(context: LayerContext): void;
|
|
109
126
|
updateState(params: UpdateParameters<this>): void;
|
|
110
127
|
clearState(): void;
|
|
111
128
|
_parseGeoTIFF(): Promise<void>;
|
|
112
|
-
protected _tilesetDescriptor():
|
|
129
|
+
protected _tilesetDescriptor(): RasterTilesetDescriptor | undefined;
|
|
113
130
|
/**
|
|
114
131
|
* Adapts the user-facing `(image, { x, y, ... }) => Promise<DataT>` signature
|
|
115
132
|
* into RasterTileLayer's `(tile, { signal, device }) => Promise<DataT>`.
|
package/dist/cog-layer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cog-layer.d.ts","sourceRoot":"","sources":["../src/cog-layer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"cog-layer.d.ts","sourceRoot":"","sources":["../src/cog-layer.ts"],"names":[],"mappings":"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"}
|
package/dist/cog-layer.js
CHANGED
|
@@ -2,6 +2,7 @@ import { RasterTileLayer } from "@developmentseed/deck.gl-raster";
|
|
|
2
2
|
import { defaultDecoderPool } from "@developmentseed/geotiff";
|
|
3
3
|
import { epsgResolver, makeClampedForwardTo3857, metersPerUnit, parseWkt, } from "@developmentseed/proj";
|
|
4
4
|
import proj4 from "proj4";
|
|
5
|
+
import { DEFAULT_CONCURRENCY_LIMITER } from "./default-concurrency-limiter.js";
|
|
5
6
|
import { fetchGeoTIFF, getGeographicBounds } from "./geotiff/geotiff.js";
|
|
6
7
|
import { inferRenderPipeline } from "./geotiff/render-pipeline.js";
|
|
7
8
|
import { geoTiffToDescriptor } from "./geotiff-tileset.js";
|
|
@@ -18,9 +19,14 @@ export class COGLayer extends RasterTileLayer {
|
|
|
18
19
|
static defaultProps = {
|
|
19
20
|
...RasterTileLayer.defaultProps,
|
|
20
21
|
epsgResolver,
|
|
22
|
+
concurrencyLimiter: DEFAULT_CONCURRENCY_LIMITER,
|
|
21
23
|
};
|
|
22
24
|
initializeState() {
|
|
23
|
-
this.setState({});
|
|
25
|
+
this.setState({ abortController: new AbortController() });
|
|
26
|
+
}
|
|
27
|
+
finalizeState(context) {
|
|
28
|
+
this.state.abortController?.abort();
|
|
29
|
+
super.finalizeState(context);
|
|
24
30
|
}
|
|
25
31
|
updateState(params) {
|
|
26
32
|
super.updateState(params);
|
|
@@ -42,11 +48,28 @@ export class COGLayer extends RasterTileLayer {
|
|
|
42
48
|
});
|
|
43
49
|
}
|
|
44
50
|
async _parseGeoTIFF() {
|
|
45
|
-
const
|
|
51
|
+
const signal = this.state.abortController?.signal;
|
|
52
|
+
let geotiff;
|
|
53
|
+
try {
|
|
54
|
+
geotiff = await fetchGeoTIFF(this.props.geotiff, {
|
|
55
|
+
concurrencyLimiter: this.props.concurrencyLimiter,
|
|
56
|
+
signal,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
// Layer removed mid-open (finalizeState aborted the signal); drop it.
|
|
61
|
+
if (signal?.aborted) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
throw err;
|
|
65
|
+
}
|
|
46
66
|
const crs = geotiff.crs;
|
|
47
67
|
const sourceProjection = typeof crs === "number"
|
|
48
68
|
? await this.props.epsgResolver(crs)
|
|
49
69
|
: parseWkt(crs);
|
|
70
|
+
if (signal?.aborted) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
50
73
|
// @ts-expect-error - proj4 typings are incomplete and don't support
|
|
51
74
|
// wkt-parser input
|
|
52
75
|
const converter4326 = proj4(sourceProjection, "EPSG:4326");
|
package/dist/cog-layer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cog-layer.js","sourceRoot":"","sources":["../src/cog-layer.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"cog-layer.js","sourceRoot":"","sources":["../src/cog-layer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { PerOriginSemaphore } from "@developmentseed/geotiff";
|
|
2
|
+
/**
|
|
3
|
+
* Shared default concurrency limiter for every COGLayer / MultiCOGLayer that
|
|
4
|
+
* doesn't override its `concurrencyLimiter` prop. A single module-level
|
|
5
|
+
* `PerOriginSemaphore({ maxRequests: 6 })` so two layers fetching from the
|
|
6
|
+
* same origin (e.g. the same S3 bucket) share *one* HTTP/1.1 connection
|
|
7
|
+
* pool. The cap matches Chrome's default per-origin HTTP/1.1 limit.
|
|
8
|
+
*/
|
|
9
|
+
export declare const DEFAULT_CONCURRENCY_LIMITER: PerOriginSemaphore;
|
|
10
|
+
//# sourceMappingURL=default-concurrency-limiter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-concurrency-limiter.d.ts","sourceRoot":"","sources":["../src/default-concurrency-limiter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,oBAEtC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { PerOriginSemaphore } from "@developmentseed/geotiff";
|
|
2
|
+
/**
|
|
3
|
+
* Shared default concurrency limiter for every COGLayer / MultiCOGLayer that
|
|
4
|
+
* doesn't override its `concurrencyLimiter` prop. A single module-level
|
|
5
|
+
* `PerOriginSemaphore({ maxRequests: 6 })` so two layers fetching from the
|
|
6
|
+
* same origin (e.g. the same S3 bucket) share *one* HTTP/1.1 connection
|
|
7
|
+
* pool. The cap matches Chrome's default per-origin HTTP/1.1 limit.
|
|
8
|
+
*/
|
|
9
|
+
export const DEFAULT_CONCURRENCY_LIMITER = new PerOriginSemaphore({
|
|
10
|
+
maxRequests: 6,
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=default-concurrency-limiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-concurrency-limiter.js","sourceRoot":"","sources":["../src/default-concurrency-limiter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,kBAAkB,CAAC;IAChE,WAAW,EAAE,CAAC;CACf,CAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { RasterArray } from "@developmentseed/geotiff";
|
|
1
|
+
import type { ConcurrencyLimiter, Priority, RasterArray } from "@developmentseed/geotiff";
|
|
2
2
|
import { GeoTIFF } from "@developmentseed/geotiff";
|
|
3
3
|
import type { Converter } from "proj4";
|
|
4
4
|
/**
|
|
@@ -8,7 +8,11 @@ import type { Converter } from "proj4";
|
|
|
8
8
|
* already RGBA, it is returned unchanged.
|
|
9
9
|
*/
|
|
10
10
|
export declare function addAlphaChannel(rgbImage: RasterArray): RasterArray;
|
|
11
|
-
export declare function fetchGeoTIFF(input: GeoTIFF | string | URL | ArrayBuffer
|
|
11
|
+
export declare function fetchGeoTIFF(input: GeoTIFF | string | URL | ArrayBuffer, options?: {
|
|
12
|
+
concurrencyLimiter?: ConcurrencyLimiter | null;
|
|
13
|
+
getPriority?: () => Priority;
|
|
14
|
+
signal?: AbortSignal;
|
|
15
|
+
}): Promise<GeoTIFF>;
|
|
12
16
|
/**
|
|
13
17
|
* Calculate the WGS84 bounding box of a GeoTIFF image
|
|
14
18
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geotiff.d.ts","sourceRoot":"","sources":["../../src/geotiff/geotiff.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"geotiff.d.ts","sourceRoot":"","sources":["../../src/geotiff/geotiff.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,kBAAkB,EAClB,QAAQ,EACR,WAAW,EACZ,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,WAAW,GAAG,WAAW,CAwClE;AAED,wBAAsB,YAAY,CAChC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,GAAG,GAAG,WAAW,EAC3C,OAAO,GAAE;IACP,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC/C,WAAW,CAAC,EAAE,MAAM,QAAQ,CAAC;IAC7B,MAAM,CAAC,EAAE,WAAW,CAAC;CACjB,GACL,OAAO,CAAC,OAAO,CAAC,CAUlB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAsB9D"}
|
package/dist/geotiff/geotiff.js
CHANGED
|
@@ -43,9 +43,9 @@ export function addAlphaChannel(rgbImage) {
|
|
|
43
43
|
throw new Error(`Unexpected number of channels in raster data: ${rgbImage.data.length / (height * width)}`);
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
|
-
export async function fetchGeoTIFF(input) {
|
|
46
|
+
export async function fetchGeoTIFF(input, options = {}) {
|
|
47
47
|
if (typeof input === "string" || input instanceof URL) {
|
|
48
|
-
return await GeoTIFF.fromUrl(input);
|
|
48
|
+
return await GeoTIFF.fromUrl(input, options);
|
|
49
49
|
}
|
|
50
50
|
if (input instanceof ArrayBuffer) {
|
|
51
51
|
return await GeoTIFF.fromArrayBuffer(input);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geotiff.js","sourceRoot":"","sources":["../../src/geotiff/geotiff.ts"],"names":[],"mappings":"AAAA,2CAA2C;
|
|
1
|
+
{"version":3,"file":"geotiff.js","sourceRoot":"","sources":["../../src/geotiff/geotiff.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
export type { COGLayerProps, GetTileDataOptions,
|
|
1
|
+
export type { COGLayerProps, GetTileDataOptions, } from "./cog-layer.js";
|
|
2
2
|
export { COGLayer } from "./cog-layer.js";
|
|
3
|
+
export { DEFAULT_CONCURRENCY_LIMITER } from "./default-concurrency-limiter.js";
|
|
3
4
|
export { addAlphaChannel } from "./geotiff/geotiff.js";
|
|
4
5
|
export * as texture from "./geotiff/texture.js";
|
|
5
6
|
export type { MosaicLayerProps } from "./mosaic-layer/mosaic-layer.js";
|
|
6
7
|
export { MosaicLayer } from "./mosaic-layer/mosaic-layer.js";
|
|
7
|
-
export {
|
|
8
|
+
export type { MosaicSource } from "./mosaic-layer/mosaic-tileset-2d.js";
|
|
8
9
|
export type { MultiCOGLayerProps, MultiCOGSourceConfig, } from "./multi-cog-layer.js";
|
|
9
10
|
export { MultiCOGLayer } from "./multi-cog-layer.js";
|
|
10
11
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,aAAa,EACb,kBAAkB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,aAAa,EACb,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,YAAY,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,YAAY,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACxE,YAAY,EACV,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { COGLayer } from "./cog-layer.js";
|
|
2
|
+
export { DEFAULT_CONCURRENCY_LIMITER } from "./default-concurrency-limiter.js";
|
|
2
3
|
export { addAlphaChannel } from "./geotiff/geotiff.js";
|
|
3
4
|
export * as texture from "./geotiff/texture.js";
|
|
4
5
|
export { MosaicLayer } from "./mosaic-layer/mosaic-layer.js";
|
|
5
|
-
export { MosaicTileset2D, } from "./mosaic-layer/mosaic-tileset-2d.js";
|
|
6
6
|
export { MultiCOGLayer } from "./multi-cog-layer.js";
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAM7D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import type { CompositeLayerProps, Layer, LayersList } from "@deck.gl/core";
|
|
1
|
+
import type { CompositeLayerProps, Layer, LayerContext, LayersList, UpdateParameters } from "@deck.gl/core";
|
|
2
2
|
import { CompositeLayer } from "@deck.gl/core";
|
|
3
3
|
import type { TileLayerProps } from "@deck.gl/geo-layers";
|
|
4
4
|
import { TileLayer } from "@deck.gl/geo-layers";
|
|
5
|
+
import type { ConcurrencyLimiter, Priority } from "@developmentseed/geotiff";
|
|
6
|
+
import Flatbush from "flatbush";
|
|
5
7
|
import type { MosaicSource } from "./mosaic-tileset-2d.js";
|
|
6
|
-
export type MosaicLayerProps<MosaicT extends MosaicSource = MosaicSource, DataT = any> = CompositeLayerProps & Pick<TileLayerProps, "extent" | "
|
|
8
|
+
export type MosaicLayerProps<MosaicT extends MosaicSource = MosaicSource, DataT = any> = CompositeLayerProps & Pick<TileLayerProps, "extent" | "maxCacheByteSize" | "maxCacheSize" | "maxRequests" | "maxZoom" | "minZoom"> & {
|
|
7
9
|
/**
|
|
8
10
|
* List of mosaic sources to render.
|
|
9
11
|
*
|
|
@@ -14,25 +16,76 @@ export type MosaicLayerProps<MosaicT extends MosaicSource = MosaicSource, DataT
|
|
|
14
16
|
*
|
|
15
17
|
* Tile cache reuse depends on stable tile IDs. By default, each source's
|
|
16
18
|
* tile ID is derived from its position in this array (see
|
|
17
|
-
* `MosaicSource.
|
|
19
|
+
* `MosaicSource.id`), so:
|
|
18
20
|
*
|
|
19
21
|
* - Appending items preserves all existing rendered tiles.
|
|
20
22
|
* - Reordering or removing items from the middle of the array invalidates
|
|
21
23
|
* the cache slots of shifted items, causing them to re-fetch.
|
|
22
24
|
*
|
|
23
|
-
* Supply an explicit `
|
|
25
|
+
* Supply an explicit `id` per source if you need cache stability across
|
|
24
26
|
* arbitrary mutations of `sources`.
|
|
25
27
|
*/
|
|
26
28
|
sources: MosaicT[];
|
|
29
|
+
/**
|
|
30
|
+
* Caps concurrent HTTP requests for this layer's source fetches.
|
|
31
|
+
*
|
|
32
|
+
* Defaults to a maximum of 6 concurrent requests per origin, which aligns
|
|
33
|
+
* with browser limits of 6 HTTP/1.1 requests per origin. If your sources
|
|
34
|
+
* support HTTP/2 or HTTP/3, you may want to increase this limit or disable
|
|
35
|
+
* it entirely by passing `null`.
|
|
36
|
+
*/
|
|
37
|
+
concurrencyLimiter?: ConcurrencyLimiter | null;
|
|
27
38
|
/** Fetch data for this source. */
|
|
28
39
|
getSource?: (source: MosaicT, opts: {
|
|
29
40
|
signal?: AbortSignal;
|
|
41
|
+
/**
|
|
42
|
+
* The layer's current `concurrencyLimiter` prop. Forward to
|
|
43
|
+
* {@link GeoTIFF.fromUrl}'s `concurrencyLimiter` option so this
|
|
44
|
+
* source's fetches join the shared per-origin queue.
|
|
45
|
+
*/
|
|
46
|
+
concurrencyLimiter?: ConcurrencyLimiter | null;
|
|
47
|
+
/**
|
|
48
|
+
* Callback that provides dynamic priority for fetches related to this
|
|
49
|
+
* source.
|
|
50
|
+
*
|
|
51
|
+
* This is designed to re-sort the limiter's queue on viewport pan,
|
|
52
|
+
* preferring sources closer to the viewport center.
|
|
53
|
+
*/
|
|
54
|
+
getPriority?: () => Priority;
|
|
30
55
|
}) => Promise<DataT>;
|
|
31
56
|
/** Render a source */
|
|
32
57
|
renderSource: (source: MosaicT, opts: {
|
|
33
58
|
data?: DataT;
|
|
34
59
|
signal?: AbortSignal;
|
|
35
60
|
}) => Layer | LayersList | null;
|
|
61
|
+
/**
|
|
62
|
+
* Called after a source's data has loaded successfully. `data` is the
|
|
63
|
+
* value returned by `getSource`, or `undefined` when no `getSource` was
|
|
64
|
+
* supplied.
|
|
65
|
+
*/
|
|
66
|
+
onSourceLoad?: (source: MosaicT, info: {
|
|
67
|
+
data?: DataT;
|
|
68
|
+
}) => void;
|
|
69
|
+
/**
|
|
70
|
+
* Called when fetching a source's data fails.
|
|
71
|
+
*/
|
|
72
|
+
onSourceError?: (source: MosaicT, info: {
|
|
73
|
+
error: Error;
|
|
74
|
+
}) => void;
|
|
75
|
+
/**
|
|
76
|
+
* Called when a source is evicted from the tile cache.
|
|
77
|
+
*/
|
|
78
|
+
onSourceUnload?: (source: MosaicT, info: {
|
|
79
|
+
data?: DataT;
|
|
80
|
+
}) => void;
|
|
81
|
+
/**
|
|
82
|
+
* Called when all sources currently in the viewport have finished
|
|
83
|
+
* loading.
|
|
84
|
+
*/
|
|
85
|
+
onViewportLoad?: (entries: Array<{
|
|
86
|
+
source: MosaicT;
|
|
87
|
+
data?: DataT;
|
|
88
|
+
}>) => void;
|
|
36
89
|
};
|
|
37
90
|
/**
|
|
38
91
|
* A deck.gl layer for rendering a mosaic of raster sources.
|
|
@@ -43,6 +96,12 @@ export type MosaicLayerProps<MosaicT extends MosaicSource = MosaicSource, DataT
|
|
|
43
96
|
export declare class MosaicLayer<MosaicT extends MosaicSource = MosaicSource, DataT = any> extends CompositeLayer<MosaicLayerProps<MosaicT, DataT>> {
|
|
44
97
|
static layerName: string;
|
|
45
98
|
static defaultProps: Partial<MosaicLayerProps<MosaicSource, any>>;
|
|
99
|
+
state: {
|
|
100
|
+
index: Flatbush | null;
|
|
101
|
+
};
|
|
102
|
+
initializeState(context: LayerContext): void;
|
|
103
|
+
updateState(params: UpdateParameters<this>): void;
|
|
104
|
+
private _buildSpatialIndex;
|
|
46
105
|
renderTileLayer(renderSource: MosaicLayerProps<MosaicT, DataT>["renderSource"]): TileLayer;
|
|
47
106
|
renderLayers(): Layer | null | LayersList;
|
|
48
107
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mosaic-layer.d.ts","sourceRoot":"","sources":["../../src/mosaic-layer/mosaic-layer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"mosaic-layer.d.ts","sourceRoot":"","sources":["../../src/mosaic-layer/mosaic-layer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,42 @@
|
|
|
1
|
-
import { CompositeLayer } from "@deck.gl/core";
|
|
1
|
+
import { _GlobeViewport, CompositeLayer, WebMercatorViewport, } from "@deck.gl/core";
|
|
2
2
|
import { TileLayer } from "@deck.gl/geo-layers";
|
|
3
|
+
import Flatbush from "flatbush";
|
|
4
|
+
import { DEFAULT_CONCURRENCY_LIMITER } from "../default-concurrency-limiter.js";
|
|
3
5
|
import { MosaicTileset2D } from "./mosaic-tileset-2d.js";
|
|
4
|
-
const defaultProps = {
|
|
6
|
+
const defaultProps = {
|
|
7
|
+
concurrencyLimiter: DEFAULT_CONCURRENCY_LIMITER,
|
|
8
|
+
sources: [],
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Build the limiter `getPriority` callback for one mosaic source: euclidean
|
|
12
|
+
* distance from the source's bbox center to the current viewport center, in
|
|
13
|
+
* lon/lat degree-space (just an ordering key — great-circle isn't needed).
|
|
14
|
+
*
|
|
15
|
+
* `getViewport` is read on every call, so the limiter re-sorts its queue as
|
|
16
|
+
* the viewport pans, pulling newly-central sources ahead of edge sources.
|
|
17
|
+
*
|
|
18
|
+
* Returns `undefined` for non-geographic viewports — where the source bbox and
|
|
19
|
+
* viewport center don't share a coordinate space — so the limiter falls back
|
|
20
|
+
* to FIFO instead of comparing mismatched units. The viewport type is checked
|
|
21
|
+
* once here; it isn't expected to change under the layer.
|
|
22
|
+
*/
|
|
23
|
+
function createGetPriorityCallback(bbox, getViewport) {
|
|
24
|
+
const viewport = getViewport();
|
|
25
|
+
if (!(viewport instanceof WebMercatorViewport) &&
|
|
26
|
+
!(viewport instanceof _GlobeViewport)) {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
const [minX, minY, maxX, maxY] = bbox;
|
|
30
|
+
const sourceCx = (minX + maxX) / 2;
|
|
31
|
+
const sourceCy = (minY + maxY) / 2;
|
|
32
|
+
return () => {
|
|
33
|
+
// Geographic viewport (checked above); both types expose lon/lat.
|
|
34
|
+
const v = getViewport();
|
|
35
|
+
const dx = sourceCx - v.longitude;
|
|
36
|
+
const dy = sourceCy - v.latitude;
|
|
37
|
+
return Math.hypot(dx, dy);
|
|
38
|
+
};
|
|
39
|
+
}
|
|
5
40
|
/**
|
|
6
41
|
* A deck.gl layer for rendering a mosaic of raster sources.
|
|
7
42
|
*
|
|
@@ -11,34 +46,66 @@ const defaultProps = {};
|
|
|
11
46
|
export class MosaicLayer extends CompositeLayer {
|
|
12
47
|
static layerName = "MosaicLayer";
|
|
13
48
|
static defaultProps = defaultProps;
|
|
49
|
+
initializeState(context) {
|
|
50
|
+
super.initializeState(context);
|
|
51
|
+
this._buildSpatialIndex();
|
|
52
|
+
}
|
|
53
|
+
updateState(params) {
|
|
54
|
+
super.updateState(params);
|
|
55
|
+
const { props, oldProps } = params;
|
|
56
|
+
if (props.sources !== oldProps.sources) {
|
|
57
|
+
this._buildSpatialIndex();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
_buildSpatialIndex() {
|
|
61
|
+
const { sources } = this.props;
|
|
62
|
+
if (sources.length === 0) {
|
|
63
|
+
this.setState({ index: null });
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const index = new Flatbush(sources.length);
|
|
67
|
+
for (const source of sources) {
|
|
68
|
+
index.add(...source.bbox);
|
|
69
|
+
}
|
|
70
|
+
index.finish();
|
|
71
|
+
this.setState({ index });
|
|
72
|
+
}
|
|
14
73
|
renderTileLayer(renderSource) {
|
|
15
|
-
const { id,
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
//
|
|
74
|
+
const { id, concurrencyLimiter, extent, maxCacheByteSize, maxCacheSize, maxRequests, maxZoom, minZoom, onSourceLoad, onSourceError, onSourceUnload, onViewportLoad, } = this.props;
|
|
75
|
+
// Arrow functions bind to the MosaicLayer instance, which deck.gl reuses
|
|
76
|
+
// across prop updates — so `this.props` and `this.state` always reflect
|
|
77
|
+
// the latest values when the tileset reads them.
|
|
19
78
|
const getSources = () => this.props.sources;
|
|
79
|
+
const getIndex = () => this.state.index;
|
|
20
80
|
class MosaicTileset2DFactory extends MosaicTileset2D {
|
|
21
81
|
constructor(opts) {
|
|
22
|
-
super(getSources, opts);
|
|
82
|
+
super(getSources, getIndex, opts);
|
|
23
83
|
}
|
|
24
84
|
}
|
|
25
85
|
return new TileLayer({
|
|
26
86
|
id: `mosaic-layer-${id}`,
|
|
27
87
|
TilesetClass: MosaicTileset2DFactory,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
88
|
+
...omitUndefined({
|
|
89
|
+
minZoom,
|
|
90
|
+
maxZoom,
|
|
91
|
+
extent,
|
|
92
|
+
maxCacheByteSize,
|
|
93
|
+
maxCacheSize,
|
|
94
|
+
maxRequests,
|
|
95
|
+
}),
|
|
34
96
|
getTileData: async (data) => {
|
|
35
97
|
// We hard-cast this because TilesetClass is not generic.
|
|
36
98
|
// MosaicTileset2D returns MosaicT in `index`, but TileLayer's typing
|
|
37
99
|
// exposes only the plain `TileIndex` here.
|
|
38
100
|
const index = data.index;
|
|
39
101
|
const { signal } = data;
|
|
102
|
+
const getPriority = createGetPriorityCallback(index.bbox, () => this.context.viewport);
|
|
40
103
|
const userData = this.props.getSource &&
|
|
41
|
-
(await this.props.getSource(index, {
|
|
104
|
+
(await this.props.getSource(index, {
|
|
105
|
+
signal,
|
|
106
|
+
concurrencyLimiter,
|
|
107
|
+
getPriority,
|
|
108
|
+
}));
|
|
42
109
|
return {
|
|
43
110
|
source: index,
|
|
44
111
|
data: userData,
|
|
@@ -50,6 +117,38 @@ export class MosaicLayer extends CompositeLayer {
|
|
|
50
117
|
const { source, signal, data: userData } = data;
|
|
51
118
|
return renderSource(source, { data: userData, signal });
|
|
52
119
|
},
|
|
120
|
+
...(onSourceLoad && {
|
|
121
|
+
onTileLoad: (tile) => {
|
|
122
|
+
// `tile.index` is a `ResolvedSource<MosaicT>` from
|
|
123
|
+
// MosaicTileset2D.getTileIndices, which structurally extends
|
|
124
|
+
// MosaicT.
|
|
125
|
+
const source = tile.index;
|
|
126
|
+
onSourceLoad(source, { data: tile.content?.data });
|
|
127
|
+
},
|
|
128
|
+
}),
|
|
129
|
+
...(onSourceError && {
|
|
130
|
+
onTileError: (error, tile) => {
|
|
131
|
+
if (!tile) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
const source = tile.index;
|
|
135
|
+
onSourceError(source, { error });
|
|
136
|
+
},
|
|
137
|
+
}),
|
|
138
|
+
...(onSourceUnload && {
|
|
139
|
+
onTileUnload: (tile) => {
|
|
140
|
+
const source = tile.index;
|
|
141
|
+
onSourceUnload(source, { data: tile.content?.data });
|
|
142
|
+
},
|
|
143
|
+
}),
|
|
144
|
+
...(onViewportLoad && {
|
|
145
|
+
onViewportLoad: (tiles) => {
|
|
146
|
+
onViewportLoad(tiles.map((tile) => ({
|
|
147
|
+
source: tile.index,
|
|
148
|
+
data: tile.content?.data,
|
|
149
|
+
})));
|
|
150
|
+
},
|
|
151
|
+
}),
|
|
53
152
|
});
|
|
54
153
|
}
|
|
55
154
|
renderLayers() {
|
|
@@ -63,4 +162,18 @@ export class MosaicLayer extends CompositeLayer {
|
|
|
63
162
|
return this.renderTileLayer(renderSource);
|
|
64
163
|
}
|
|
65
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* Drop keys whose value is `undefined`.
|
|
167
|
+
*
|
|
168
|
+
* Passing down an explicit `undefined` will override any default prop values.
|
|
169
|
+
*/
|
|
170
|
+
function omitUndefined(obj) {
|
|
171
|
+
const result = {};
|
|
172
|
+
for (const key in obj) {
|
|
173
|
+
if (obj[key] !== undefined) {
|
|
174
|
+
result[key] = obj[key];
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return result;
|
|
178
|
+
}
|
|
66
179
|
//# sourceMappingURL=mosaic-layer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mosaic-layer.js","sourceRoot":"","sources":["../../src/mosaic-layer/mosaic-layer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mosaic-layer.js","sourceRoot":"","sources":["../../src/mosaic-layer/mosaic-layer.ts"],"names":[],"mappings":"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"}
|