@developmentseed/deck.gl-geotiff 0.3.0-beta.3 → 0.3.0
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/README.md +33 -4
- package/dist/cog-layer.d.ts +34 -27
- package/dist/cog-layer.d.ts.map +1 -1
- package/dist/cog-layer.js +50 -14
- package/dist/cog-layer.js.map +1 -1
- package/dist/geotiff/geotiff.d.ts.map +1 -1
- package/dist/geotiff/geotiff.js +6 -2
- package/dist/geotiff/geotiff.js.map +1 -1
- package/dist/geotiff/render-pipeline.d.ts +6 -4
- package/dist/geotiff/render-pipeline.d.ts.map +1 -1
- package/dist/geotiff/render-pipeline.js +116 -16
- package/dist/geotiff/render-pipeline.js.map +1 -1
- package/dist/geotiff-layer.d.ts +5 -4
- package/dist/geotiff-layer.d.ts.map +1 -1
- package/dist/geotiff-layer.js.map +1 -1
- package/dist/geotiff-reprojection.d.ts +2 -1
- package/dist/geotiff-reprojection.d.ts.map +1 -1
- package/dist/geotiff-reprojection.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/package.json +12 -12
- package/dist/cog-tile-matrix-set.d.ts +0 -3
- package/dist/cog-tile-matrix-set.d.ts.map +0 -1
- package/dist/cog-tile-matrix-set.js +0 -23
- package/dist/cog-tile-matrix-set.js.map +0 -1
- package/dist/ellipsoids.d.ts +0 -153
- package/dist/ellipsoids.d.ts.map +0 -1
- package/dist/ellipsoids.js +0 -153
- package/dist/ellipsoids.js.map +0 -1
- package/dist/geotiff/high-level/affine.d.ts +0 -16
- package/dist/geotiff/high-level/affine.d.ts.map +0 -1
- package/dist/geotiff/high-level/affine.js +0 -2
- package/dist/geotiff/high-level/affine.js.map +0 -1
- package/dist/geotiff/high-level/array.d.ts +0 -37
- package/dist/geotiff/high-level/array.d.ts.map +0 -1
- package/dist/geotiff/high-level/array.js +0 -2
- package/dist/geotiff/high-level/array.js.map +0 -1
- package/dist/geotiff/high-level/geotiff.d.ts +0 -63
- package/dist/geotiff/high-level/geotiff.d.ts.map +0 -1
- package/dist/geotiff/high-level/geotiff.js +0 -135
- package/dist/geotiff/high-level/geotiff.js.map +0 -1
- package/dist/geotiff/high-level/index.d.ts +0 -8
- package/dist/geotiff/high-level/index.d.ts.map +0 -1
- package/dist/geotiff/high-level/index.js +0 -5
- package/dist/geotiff/high-level/index.js.map +0 -1
- package/dist/geotiff/high-level/options.d.ts +0 -11
- package/dist/geotiff/high-level/options.d.ts.map +0 -1
- package/dist/geotiff/high-level/options.js +0 -2
- package/dist/geotiff/high-level/options.js.map +0 -1
- package/dist/geotiff/high-level/overview.d.ts +0 -46
- package/dist/geotiff/high-level/overview.d.ts.map +0 -1
- package/dist/geotiff/high-level/overview.js +0 -124
- package/dist/geotiff/high-level/overview.js.map +0 -1
- package/dist/geotiff/high-level/tile.d.ts +0 -11
- package/dist/geotiff/high-level/tile.d.ts.map +0 -1
- package/dist/geotiff/high-level/tile.js +0 -2
- package/dist/geotiff/high-level/tile.js.map +0 -1
- package/dist/geotiff/high-level/transform.d.ts +0 -23
- package/dist/geotiff/high-level/transform.d.ts.map +0 -1
- package/dist/geotiff/high-level/transform.js +0 -55
- package/dist/geotiff/high-level/transform.js.map +0 -1
- package/dist/geotiff/high-level/window.d.ts +0 -23
- package/dist/geotiff/high-level/window.d.ts.map +0 -1
- package/dist/geotiff/high-level/window.js +0 -31
- package/dist/geotiff/high-level/window.js.map +0 -1
- package/dist/geotiff/types.d.ts +0 -5
- package/dist/geotiff/types.d.ts.map +0 -1
- package/dist/geotiff/types.js +0 -7
- package/dist/geotiff/types.js.map +0 -1
- package/dist/geotiff-types.d.ts +0 -13
- package/dist/geotiff-types.d.ts.map +0 -1
- package/dist/geotiff-types.js +0 -2
- package/dist/geotiff-types.js.map +0 -1
- package/dist/geotiff.d.ts +0 -50
- package/dist/geotiff.d.ts.map +0 -1
- package/dist/geotiff.js +0 -135
- package/dist/geotiff.js.map +0 -1
- package/dist/mosaic-layer/mosaic-tile-traversal.d.ts +0 -1
- package/dist/mosaic-layer/mosaic-tile-traversal.d.ts.map +0 -1
- package/dist/mosaic-layer/mosaic-tile-traversal.js +0 -2
- package/dist/mosaic-layer/mosaic-tile-traversal.js.map +0 -1
- package/dist/mosaic-layer.d.ts +0 -1
- package/dist/mosaic-layer.d.ts.map +0 -1
- package/dist/mosaic-layer.js +0 -2
- package/dist/mosaic-layer.js.map +0 -1
- package/dist/texture.d.ts +0 -10
- package/dist/texture.d.ts.map +0 -1
- package/dist/texture.js +0 -135
- package/dist/texture.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,35 @@
|
|
|
1
|
-
|
|
1
|
+
# @developmentseed/deck.gl-geotiff
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
High-level API for rendering [Cloud-Optimized GeoTIFFs] in deck.gl.
|
|
4
4
|
|
|
5
|
-
-
|
|
6
|
-
|
|
5
|
+
[Cloud-Optimized GeoTIFFs]: https://cogeo.org/
|
|
6
|
+
|
|
7
|
+
This uses `@developmentseed/geotiff` and [`@cogeotiff/core`] to efficiently read Cloud-Optimized GeoTIFFs from the browser.
|
|
8
|
+
|
|
9
|
+
[`@cogeotiff/core`]: https://github.com/blacha/cogeotiff
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { Deck } from '@deck.gl/core';
|
|
15
|
+
import { COGLayer } from '@developmentseed/deck.gl-geotiff';
|
|
16
|
+
|
|
17
|
+
new Deck({
|
|
18
|
+
initialViewState: {
|
|
19
|
+
longitude: 0,
|
|
20
|
+
latitude: 0,
|
|
21
|
+
zoom: 2
|
|
22
|
+
},
|
|
23
|
+
controller: true,
|
|
24
|
+
layers: [
|
|
25
|
+
new COGLayer({
|
|
26
|
+
id: 'cog-layer',
|
|
27
|
+
geotiff: 'https://example.com/my-cog.tif'
|
|
28
|
+
})
|
|
29
|
+
]
|
|
30
|
+
});
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The {@link COGLayer} is the recommended layer for rendering Cloud-Optimized GeoTIFFs. It leverages deck.gl's [`TileLayer`] to match the internal COG structure, automatically fetching appropriate overviews based on zoom level.
|
|
34
|
+
|
|
35
|
+
[`TileLayer`]: https://deck.gl/docs/api-reference/geo-layers/tile-layer
|
package/dist/cog-layer.d.ts
CHANGED
|
@@ -3,10 +3,10 @@ import { CompositeLayer } from "@deck.gl/core";
|
|
|
3
3
|
import type { _Tile2DHeader as Tile2DHeader, TileLayerProps, _TileLoadProps as TileLoadProps } from "@deck.gl/geo-layers";
|
|
4
4
|
import { TileLayer } from "@deck.gl/geo-layers";
|
|
5
5
|
import type { RasterModule } from "@developmentseed/deck.gl-raster";
|
|
6
|
-
import type { GeoTIFF, Overview } from "@developmentseed/geotiff";
|
|
6
|
+
import type { DecoderPool, GeoTIFF, Overview } from "@developmentseed/geotiff";
|
|
7
7
|
import type { TileMatrixSet } from "@developmentseed/morecantile";
|
|
8
8
|
import type { ReprojectionFns } from "@developmentseed/raster-reproject";
|
|
9
|
-
import type { Device } from "@luma.gl/core";
|
|
9
|
+
import type { Device, Texture } from "@luma.gl/core";
|
|
10
10
|
import type { ProjectionDefinition } from "wkt-parser";
|
|
11
11
|
import type { TextureDataT } from "./geotiff/render-pipeline.js";
|
|
12
12
|
import type { EpsgResolver } from "./proj.js";
|
|
@@ -17,8 +17,8 @@ export type MinimalDataT = {
|
|
|
17
17
|
height: number;
|
|
18
18
|
width: number;
|
|
19
19
|
};
|
|
20
|
-
|
|
21
|
-
texture:
|
|
20
|
+
type DefaultDataT = MinimalDataT & {
|
|
21
|
+
texture: Texture;
|
|
22
22
|
};
|
|
23
23
|
/** Options passed to `getTileData`. */
|
|
24
24
|
export type GetTileDataOptions = {
|
|
@@ -30,13 +30,38 @@ export type GetTileDataOptions = {
|
|
|
30
30
|
y: number;
|
|
31
31
|
/** An AbortSignal that may be signalled if the request is to be aborted */
|
|
32
32
|
signal?: AbortSignal;
|
|
33
|
+
/** The decoder pool to use. */
|
|
34
|
+
pool: DecoderPool;
|
|
33
35
|
};
|
|
34
36
|
type GetTileDataResult<DataT> = {
|
|
35
37
|
data: DataT;
|
|
36
38
|
forwardTransform: ReprojectionFns["forwardTransform"];
|
|
37
39
|
inverseTransform: ReprojectionFns["inverseTransform"];
|
|
38
40
|
};
|
|
39
|
-
|
|
41
|
+
type COGLayerDataProps<DataT extends MinimalDataT> = {
|
|
42
|
+
/**
|
|
43
|
+
* User-defined method to load data for a tile.
|
|
44
|
+
*
|
|
45
|
+
* Must be provided together with `renderTile`. If neither is provided,
|
|
46
|
+
* the default pipeline is used, which fetches the tile, uploads it as a
|
|
47
|
+
* GPU texture, and renders it using an inferred shader pipeline.
|
|
48
|
+
*/
|
|
49
|
+
getTileData: (image: GeoTIFF | Overview, options: GetTileDataOptions) => Promise<DataT>;
|
|
50
|
+
/**
|
|
51
|
+
* User-defined method to render data for a tile.
|
|
52
|
+
*
|
|
53
|
+
* Must be provided together with `getTileData`. Receives the value
|
|
54
|
+
* returned by `getTileData` and must return a render pipeline.
|
|
55
|
+
*/
|
|
56
|
+
renderTile: (data: DataT) => ImageData | RasterModule[];
|
|
57
|
+
} | {
|
|
58
|
+
getTileData?: undefined;
|
|
59
|
+
renderTile?: undefined;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Props that can be passed into the {@link COGLayer}.
|
|
63
|
+
*/
|
|
64
|
+
export type COGLayerProps<DataT extends MinimalDataT = DefaultDataT> = CompositeLayerProps & COGLayerDataProps<DataT> & {
|
|
40
65
|
/**
|
|
41
66
|
* Cloud-optimized GeoTIFF input.
|
|
42
67
|
*
|
|
@@ -56,37 +81,18 @@ export interface COGLayerProps<DataT extends MinimalDataT = DefaultDataT> extend
|
|
|
56
81
|
*/
|
|
57
82
|
epsgResolver?: EpsgResolver;
|
|
58
83
|
/**
|
|
59
|
-
*
|
|
84
|
+
* Worker pool for decoding image chunks.
|
|
60
85
|
*
|
|
61
86
|
* If none is provided, a default Pool will be created and shared between all
|
|
62
87
|
* COGLayer and GeoTIFFLayer instances.
|
|
63
88
|
*/
|
|
89
|
+
pool?: DecoderPool;
|
|
64
90
|
/**
|
|
65
91
|
* Maximum reprojection error in pixels for mesh refinement.
|
|
66
92
|
* Lower values create denser meshes with higher accuracy.
|
|
67
93
|
* @default 0.125
|
|
68
94
|
*/
|
|
69
95
|
maxError?: number;
|
|
70
|
-
/**
|
|
71
|
-
* User-defined method to load data for a tile.
|
|
72
|
-
*
|
|
73
|
-
* The default implementation loads an RGBA image, returning an ImageData
|
|
74
|
-
* object.
|
|
75
|
-
*
|
|
76
|
-
* For more customizability, you can also return a Texture object from
|
|
77
|
-
* luma.gl, along with optional custom shaders for the RasterLayer.
|
|
78
|
-
*/
|
|
79
|
-
getTileData?: (image: GeoTIFF | Overview, options: GetTileDataOptions) => Promise<DataT>;
|
|
80
|
-
/**
|
|
81
|
-
* User-defined method to render data for a tile.
|
|
82
|
-
*
|
|
83
|
-
* This receives the data returned by getTileData and must return a render
|
|
84
|
-
* pipeline.
|
|
85
|
-
*
|
|
86
|
-
* The default implementation returns an object with a `texture` property,
|
|
87
|
-
* assuming that this texture is already renderable.
|
|
88
|
-
*/
|
|
89
|
-
renderTile: (data: DataT) => ImageData | RasterModule[];
|
|
90
96
|
/**
|
|
91
97
|
* Enable debug visualization showing the triangulation mesh
|
|
92
98
|
* @default false
|
|
@@ -120,7 +126,7 @@ export interface COGLayerProps<DataT extends MinimalDataT = DefaultDataT> extend
|
|
|
120
126
|
* automatically aborted.
|
|
121
127
|
*/
|
|
122
128
|
signal?: AbortSignal;
|
|
123
|
-
}
|
|
129
|
+
};
|
|
124
130
|
/**
|
|
125
131
|
* COGLayer renders a COG using a tiled approach with reprojection.
|
|
126
132
|
*/
|
|
@@ -138,6 +144,7 @@ export declare class COGLayer<DataT extends MinimalDataT = DefaultDataT> extends
|
|
|
138
144
|
};
|
|
139
145
|
initializeState(): void;
|
|
140
146
|
updateState(params: UpdateParameters<this>): void;
|
|
147
|
+
clearState(): void;
|
|
141
148
|
_parseGeoTIFF(): Promise<void>;
|
|
142
149
|
/**
|
|
143
150
|
* Inner callback passed in to the underlying TileLayer's `getTileData`.
|
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,EACV,mBAAmB,EACnB,KAAK,EACL,UAAU,EACV,gBAAgB,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EACV,aAAa,IAAI,YAAY,EAC7B,cAAc,EACd,cAAc,IAAI,aAAa,EAEhC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAKpE,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,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,7 +2,7 @@ import { CompositeLayer } from "@deck.gl/core";
|
|
|
2
2
|
import { TileLayer } from "@deck.gl/geo-layers";
|
|
3
3
|
import { PathLayer } from "@deck.gl/layers";
|
|
4
4
|
import { RasterLayer, TileMatrixSetTileset, } from "@developmentseed/deck.gl-raster";
|
|
5
|
-
import { generateTileMatrixSet } from "@developmentseed/geotiff";
|
|
5
|
+
import { defaultDecoderPool, generateTileMatrixSet, } from "@developmentseed/geotiff";
|
|
6
6
|
import { tileTransform } from "@developmentseed/morecantile";
|
|
7
7
|
import proj4 from "proj4";
|
|
8
8
|
import wktParser from "wkt-parser";
|
|
@@ -29,9 +29,23 @@ export class COGLayer extends CompositeLayer {
|
|
|
29
29
|
const { props, oldProps, changeFlags } = params;
|
|
30
30
|
const needsUpdate = Boolean(changeFlags.dataChanged) || props.geotiff !== oldProps.geotiff;
|
|
31
31
|
if (needsUpdate) {
|
|
32
|
+
// Clear stale state so renderLayers returns null until the new GeoTIFF is
|
|
33
|
+
// ready
|
|
34
|
+
this.clearState();
|
|
32
35
|
this._parseGeoTIFF();
|
|
33
36
|
}
|
|
34
37
|
}
|
|
38
|
+
clearState() {
|
|
39
|
+
this.setState({
|
|
40
|
+
geotiff: undefined,
|
|
41
|
+
tms: undefined,
|
|
42
|
+
forwardTo4326: undefined,
|
|
43
|
+
inverseFrom4326: undefined,
|
|
44
|
+
forwardTo3857: undefined,
|
|
45
|
+
defaultGetTileData: undefined,
|
|
46
|
+
defaultRenderTile: undefined,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
35
49
|
async _parseGeoTIFF() {
|
|
36
50
|
const geotiff = await fetchGeoTIFF(this.props.geotiff);
|
|
37
51
|
const crs = geotiff.crs;
|
|
@@ -55,15 +69,18 @@ export class COGLayer extends CompositeLayer {
|
|
|
55
69
|
geographicBounds,
|
|
56
70
|
});
|
|
57
71
|
}
|
|
58
|
-
|
|
72
|
+
// Only create a default render pipeline if the user did not provide a
|
|
73
|
+
// custom one
|
|
74
|
+
if (!this.props.getTileData || !this.props.renderTile) {
|
|
75
|
+
const { getTileData: defaultGetTileData, renderTile: defaultRenderTile } = inferRenderPipeline(geotiff, this.context.device);
|
|
76
|
+
this.setState({ defaultGetTileData, defaultRenderTile });
|
|
77
|
+
}
|
|
59
78
|
this.setState({
|
|
60
79
|
geotiff,
|
|
61
80
|
tms,
|
|
62
81
|
forwardTo4326,
|
|
63
82
|
inverseFrom4326,
|
|
64
83
|
forwardTo3857,
|
|
65
|
-
defaultGetTileData,
|
|
66
|
-
defaultRenderTile,
|
|
67
84
|
});
|
|
68
85
|
}
|
|
69
86
|
/**
|
|
@@ -84,21 +101,29 @@ export class COGLayer extends CompositeLayer {
|
|
|
84
101
|
const tileMatrix = tms.tileMatrices[z];
|
|
85
102
|
const tileAffine = tileTransform(tileMatrix, { col: x, row: y });
|
|
86
103
|
const { forwardTransform, inverseTransform } = fromAffine(tileAffine);
|
|
87
|
-
const getTileData = this.props.getTileData || this.state.defaultGetTileData;
|
|
88
104
|
// Combine abort signals if both are defined
|
|
89
105
|
const combinedSignal = signal && this.props.signal
|
|
90
106
|
? AbortSignal.any([signal, this.props.signal])
|
|
91
107
|
: signal || this.props.signal;
|
|
92
|
-
const
|
|
108
|
+
const getTileDataProps = {
|
|
93
109
|
device: this.context.device,
|
|
94
110
|
x,
|
|
95
111
|
y,
|
|
96
112
|
signal: combinedSignal,
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
113
|
+
pool: this.props.pool ?? defaultDecoderPool(),
|
|
114
|
+
};
|
|
115
|
+
let data;
|
|
116
|
+
if (this.props.getTileData) {
|
|
117
|
+
// In the case that the user passed in a custom `getTileData`, TS knows
|
|
118
|
+
// that `DataT` is the return type of that function
|
|
119
|
+
data = await this.props.getTileData(image, getTileDataProps);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
// In the case where the user did not pass in a custom `getTileData`, we
|
|
123
|
+
// have to tell TS that `DefaultDataT` is assignable to `DataT`
|
|
124
|
+
data = (await this.state.defaultGetTileData(image, getTileDataProps));
|
|
125
|
+
}
|
|
100
126
|
return {
|
|
101
|
-
// @ts-expect-error type mismatch when using provided getTileData
|
|
102
127
|
data,
|
|
103
128
|
forwardTransform,
|
|
104
129
|
inverseTransform,
|
|
@@ -117,12 +142,23 @@ export class COGLayer extends CompositeLayer {
|
|
|
117
142
|
const layers = [];
|
|
118
143
|
if (data) {
|
|
119
144
|
const { height, width } = data;
|
|
120
|
-
|
|
121
|
-
|
|
145
|
+
let renderPipeline;
|
|
146
|
+
if (this.props.getTileData) {
|
|
147
|
+
// In the case that the user passed in a custom `getTileData`, TS knows
|
|
148
|
+
// that `data` can be passed in to `renderTile`.
|
|
149
|
+
renderPipeline = this.props.renderTile(data);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
// In the default case, `data` is `DefaultDataT` — cast required because
|
|
153
|
+
// TS can't prove that `DataT` (which defaults to `DefaultDataT`) is
|
|
154
|
+
// `DefaultDataT` at this point.
|
|
155
|
+
renderPipeline = this.state.defaultRenderTile(data);
|
|
156
|
+
}
|
|
157
|
+
layers.push(new RasterLayer(this.getSubLayerProps({
|
|
122
158
|
id: `${props.id}-raster`,
|
|
123
159
|
width,
|
|
124
160
|
height,
|
|
125
|
-
renderPipeline
|
|
161
|
+
renderPipeline,
|
|
126
162
|
maxError,
|
|
127
163
|
reprojectionFns: {
|
|
128
164
|
forwardTransform,
|
|
@@ -132,7 +168,7 @@ export class COGLayer extends CompositeLayer {
|
|
|
132
168
|
},
|
|
133
169
|
debug,
|
|
134
170
|
debugOpacity,
|
|
135
|
-
}));
|
|
171
|
+
})));
|
|
136
172
|
}
|
|
137
173
|
if (debug) {
|
|
138
174
|
// Get projected bounds from tile data
|
package/dist/cog-layer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cog-layer.js","sourceRoot":"","sources":["../src/cog-layer.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAO/C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EACL,WAAW,EACX,oBAAoB,GACrB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,
|
|
1
|
+
{"version":3,"file":"cog-layer.js","sourceRoot":"","sources":["../src/cog-layer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geotiff.d.ts","sourceRoot":"","sources":["../../src/geotiff/geotiff.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,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,
|
|
1
|
+
{"version":3,"file":"geotiff.d.ts","sourceRoot":"","sources":["../../src/geotiff/geotiff.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,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,GAC1C,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
|
@@ -22,12 +22,16 @@ export function addAlphaChannel(rgbImage) {
|
|
|
22
22
|
else if (rgbImage.data.length === height * width * 3) {
|
|
23
23
|
// Need to add alpha channel
|
|
24
24
|
const rgbaLength = (rgbImage.data.length / 3) * 4;
|
|
25
|
-
const
|
|
25
|
+
const isUint16 = rgbImage.data instanceof Uint16Array;
|
|
26
|
+
const rgbaArray = isUint16
|
|
27
|
+
? new Uint16Array(rgbaLength)
|
|
28
|
+
: new Uint8ClampedArray(rgbaLength);
|
|
29
|
+
const maxAlpha = isUint16 ? 65535 : 255;
|
|
26
30
|
for (let i = 0; i < rgbImage.data.length / 3; ++i) {
|
|
27
31
|
rgbaArray[i * 4] = rgbImage.data[i * 3];
|
|
28
32
|
rgbaArray[i * 4 + 1] = rgbImage.data[i * 3 + 1];
|
|
29
33
|
rgbaArray[i * 4 + 2] = rgbImage.data[i * 3 + 2];
|
|
30
|
-
rgbaArray[i * 4 + 3] =
|
|
34
|
+
rgbaArray[i * 4 + 3] = maxAlpha;
|
|
31
35
|
}
|
|
32
36
|
return {
|
|
33
37
|
...rgbImage,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geotiff.js","sourceRoot":"","sources":["../../src/geotiff/geotiff.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAG3C,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAGnD;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,QAAqB;IACnD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;IAEnC,IAAI,QAAQ,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;QACxC,4EAA4E;QAC5E,OAAO;QACP,uEAAuE;QACvE,qBAAqB;QACrB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC;QAChD,4BAA4B;QAC5B,OAAO,QAAQ,CAAC;IAClB,CAAC;SAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC;QACvD,4BAA4B;QAE5B,MAAM,UAAU,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"geotiff.js","sourceRoot":"","sources":["../../src/geotiff/geotiff.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { RasterModule } from "@developmentseed/deck.gl-raster/gpu-modules";
|
|
2
|
+
import type { GeoTIFF, Overview } from "@developmentseed/geotiff";
|
|
2
3
|
import type { Device, Texture } from "@luma.gl/core";
|
|
3
|
-
import type {
|
|
4
|
+
import type { GetTileDataOptions } from "../cog-layer";
|
|
4
5
|
export type TextureDataT = {
|
|
5
6
|
height: number;
|
|
6
7
|
width: number;
|
|
7
8
|
texture: Texture;
|
|
9
|
+
mask?: Texture;
|
|
8
10
|
};
|
|
9
11
|
export declare function inferRenderPipeline(geotiff: GeoTIFF, device: Device): {
|
|
10
|
-
getTileData:
|
|
11
|
-
renderTile:
|
|
12
|
+
getTileData: (image: GeoTIFF | Overview, options: GetTileDataOptions) => Promise<TextureDataT>;
|
|
13
|
+
renderTile: (data: TextureDataT) => ImageData | RasterModule[];
|
|
12
14
|
};
|
|
13
15
|
//# sourceMappingURL=render-pipeline.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-pipeline.d.ts","sourceRoot":"","sources":["../../src/geotiff/render-pipeline.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"render-pipeline.d.ts","sourceRoot":"","sources":["../../src/geotiff/render-pipeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6CAA6C,CAAC;AAWhF,OAAO,KAAK,EACV,OAAO,EACP,QAAQ,EAET,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,MAAM,EAAgB,OAAO,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAIvD,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAqBF,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,GACb;IACD,WAAW,EAAE,CACX,KAAK,EAAE,OAAO,GAAG,QAAQ,EACzB,OAAO,EAAE,kBAAkB,KACxB,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3B,UAAU,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,SAAS,GAAG,YAAY,EAAE,CAAC;CAChE,CAeA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Photometric, SampleFormat } from "@cogeotiff/core";
|
|
2
|
-
import { CMYKToRGB, Colormap, CreateTexture, cieLabToRGB, FilterNoDataVal, } from "@developmentseed/deck.gl-raster/gpu-modules";
|
|
2
|
+
import { BlackIsZero, CMYKToRGB, Colormap, CreateTexture, cieLabToRGB, FilterNoDataVal, MaskTexture, WhiteIsZero, } from "@developmentseed/deck.gl-raster/gpu-modules";
|
|
3
3
|
import { parseColormap } from "@developmentseed/geotiff";
|
|
4
4
|
import { addAlphaChannel } from "./geotiff";
|
|
5
5
|
import { inferTextureFormat } from "./texture";
|
|
@@ -13,14 +13,13 @@ export function inferRenderPipeline(geotiff, device) {
|
|
|
13
13
|
case SampleFormat.Uint:
|
|
14
14
|
return createUnormPipeline(geotiff, device);
|
|
15
15
|
}
|
|
16
|
-
throw new Error(`Inferring render pipeline for non-unsigned integers not yet supported. Found SampleFormat: ${
|
|
16
|
+
throw new Error(`Inferring render pipeline for non-unsigned integers not yet supported. Found SampleFormat: ${sampleFormat}`);
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
19
|
* Create pipeline for visualizing unsigned-integer data.
|
|
20
20
|
*/
|
|
21
21
|
function createUnormPipeline(geotiff, device) {
|
|
22
|
-
const
|
|
23
|
-
const { bitsPerSample, colorMap, photometric, sampleFormat, samplesPerPixel, nodata, } = tags;
|
|
22
|
+
const { bitsPerSample, colorMap, photometric, sampleFormat, samplesPerPixel, nodata, } = geotiff.cachedTags;
|
|
24
23
|
const renderPipeline = [
|
|
25
24
|
{
|
|
26
25
|
module: CreateTexture,
|
|
@@ -30,14 +29,29 @@ function createUnormPipeline(geotiff, device) {
|
|
|
30
29
|
},
|
|
31
30
|
];
|
|
32
31
|
if (nodata !== null) {
|
|
33
|
-
// Since values are 0-1 for unorm textures,
|
|
34
|
-
const
|
|
32
|
+
// Since values are 0-1 for unorm textures, scale nodata to [0, 1]
|
|
33
|
+
const maxVal = 2 ** bitsPerSample[0] - 1;
|
|
34
|
+
const noDataScaled = nodata / maxVal;
|
|
35
35
|
renderPipeline.push({
|
|
36
36
|
module: FilterNoDataVal,
|
|
37
37
|
props: { value: noDataScaled },
|
|
38
38
|
});
|
|
39
39
|
}
|
|
40
|
-
|
|
40
|
+
if (geotiff.maskImage !== null) {
|
|
41
|
+
renderPipeline.push({
|
|
42
|
+
module: MaskTexture,
|
|
43
|
+
props: {
|
|
44
|
+
// TODO: how to handle if mask failed to load and is undefined here
|
|
45
|
+
maskTexture: (data) => data.mask,
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
const toRGBModule = photometricInterpretationToRGB({
|
|
50
|
+
count: samplesPerPixel,
|
|
51
|
+
photometric,
|
|
52
|
+
device,
|
|
53
|
+
colorMap,
|
|
54
|
+
});
|
|
41
55
|
if (toRGBModule) {
|
|
42
56
|
renderPipeline.push(toRGBModule);
|
|
43
57
|
}
|
|
@@ -52,9 +66,14 @@ function createUnormPipeline(geotiff, device) {
|
|
|
52
66
|
minFilter: "linear",
|
|
53
67
|
};
|
|
54
68
|
const getTileData = async (image, options) => {
|
|
55
|
-
const { device, x, y, signal } = options;
|
|
56
|
-
const tile = await image.fetchTile(x, y, {
|
|
69
|
+
const { device, x, y, signal, pool } = options;
|
|
70
|
+
const tile = await image.fetchTile(x, y, {
|
|
71
|
+
boundless: false,
|
|
72
|
+
pool,
|
|
73
|
+
signal,
|
|
74
|
+
});
|
|
57
75
|
let { array } = tile;
|
|
76
|
+
const { width, height, mask } = array;
|
|
58
77
|
let numSamples = samplesPerPixel;
|
|
59
78
|
if (samplesPerPixel === 3) {
|
|
60
79
|
// WebGL2 doesn't have an RGB-only texture format; it requires RGBA.
|
|
@@ -67,15 +86,38 @@ function createUnormPipeline(geotiff, device) {
|
|
|
67
86
|
const textureFormat = inferTextureFormat(
|
|
68
87
|
// Add one sample for added alpha channel
|
|
69
88
|
numSamples, bitsPerSample, sampleFormat);
|
|
89
|
+
const bytesPerPixel = (bitsPerSample[0] / 8) * numSamples;
|
|
90
|
+
const textureData = enforceAlignment(array.data, {
|
|
91
|
+
width,
|
|
92
|
+
height,
|
|
93
|
+
bytesPerPixel,
|
|
94
|
+
});
|
|
70
95
|
const texture = device.createTexture({
|
|
71
|
-
data:
|
|
96
|
+
data: textureData,
|
|
72
97
|
format: textureFormat,
|
|
73
|
-
width
|
|
74
|
-
height
|
|
75
|
-
|
|
98
|
+
width,
|
|
99
|
+
height,
|
|
100
|
+
// Use nearest filtering for the mask to avoid interpolated edges/halos
|
|
101
|
+
sampler: {
|
|
102
|
+
minFilter: "nearest",
|
|
103
|
+
magFilter: "nearest",
|
|
104
|
+
},
|
|
76
105
|
});
|
|
106
|
+
let maskTexture;
|
|
107
|
+
if (mask !== null) {
|
|
108
|
+
maskTexture = device.createTexture({
|
|
109
|
+
// Mask is single-channel 8-bit, so bytesPerPixel must be 1
|
|
110
|
+
data: padToAlignment(mask, width, height, 1),
|
|
111
|
+
// Single-channel 8-bit texture for the mask
|
|
112
|
+
format: "r8unorm",
|
|
113
|
+
width,
|
|
114
|
+
height,
|
|
115
|
+
sampler: samplerOptions,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
77
118
|
return {
|
|
78
119
|
texture,
|
|
120
|
+
mask: maskTexture,
|
|
79
121
|
height: array.height,
|
|
80
122
|
width: array.width,
|
|
81
123
|
};
|
|
@@ -85,15 +127,29 @@ function createUnormPipeline(geotiff, device) {
|
|
|
85
127
|
};
|
|
86
128
|
return { getTileData, renderTile };
|
|
87
129
|
}
|
|
88
|
-
function photometricInterpretationToRGB(
|
|
130
|
+
function photometricInterpretationToRGB({ count, colorMap, device, photometric, }) {
|
|
131
|
+
if (count === 3 || count === 4) {
|
|
132
|
+
// Always interpret 3-band or 4-band images as RGB/RGBA
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
89
135
|
switch (photometric) {
|
|
136
|
+
case Photometric.MinIsWhite: {
|
|
137
|
+
return {
|
|
138
|
+
module: WhiteIsZero,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
case Photometric.MinIsBlack: {
|
|
142
|
+
return {
|
|
143
|
+
module: BlackIsZero,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
90
146
|
case Photometric.Rgb:
|
|
91
147
|
return null;
|
|
92
148
|
case Photometric.Palette: {
|
|
93
|
-
if (!
|
|
149
|
+
if (!colorMap) {
|
|
94
150
|
throw new Error("ColorMap is required for PhotometricInterpretation Palette");
|
|
95
151
|
}
|
|
96
|
-
const { data, width, height } = parseColormap(
|
|
152
|
+
const { data, width, height } = parseColormap(colorMap);
|
|
97
153
|
const cmapTexture = device.createTexture({
|
|
98
154
|
data,
|
|
99
155
|
format: "rgba8unorm",
|
|
@@ -149,4 +205,48 @@ function resolveModule(m, data) {
|
|
|
149
205
|
}
|
|
150
206
|
return { module, props: resolvedProps };
|
|
151
207
|
}
|
|
208
|
+
/**
|
|
209
|
+
* WebGL's default `UNPACK_ALIGNMENT` is 4, meaning each row of pixel data must
|
|
210
|
+
* start on a 4-byte boundary.
|
|
211
|
+
*
|
|
212
|
+
* For all array types, we must match our typed array type to what WebGL
|
|
213
|
+
* expects, so this must return the same array type as what was passed in.
|
|
214
|
+
*/
|
|
215
|
+
function enforceAlignment(data, { width, height, bytesPerPixel, }) {
|
|
216
|
+
return data instanceof Uint8Array ||
|
|
217
|
+
data instanceof Int8Array ||
|
|
218
|
+
data instanceof Uint16Array ||
|
|
219
|
+
data instanceof Int16Array
|
|
220
|
+
? padToAlignment(data, width, height, bytesPerPixel)
|
|
221
|
+
: data;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* WebGL's default `UNPACK_ALIGNMENT` is 4, meaning each row of pixel data must
|
|
225
|
+
* start on a 4-byte boundary.
|
|
226
|
+
*
|
|
227
|
+
* For 8-bit and 16-bit data, rows may not be 4-byte aligned. For 32-bit+ data,
|
|
228
|
+
* each element is already 4 bytes so rows are always aligned.
|
|
229
|
+
*
|
|
230
|
+
* Returns the original array unchanged when no padding is needed.
|
|
231
|
+
*/
|
|
232
|
+
function padToAlignment(data, width, height, bytesPerPixel) {
|
|
233
|
+
const rowBytes = width * bytesPerPixel;
|
|
234
|
+
const alignedRowBytes = Math.ceil(rowBytes / 4) * 4;
|
|
235
|
+
if (alignedRowBytes === rowBytes) {
|
|
236
|
+
return data;
|
|
237
|
+
}
|
|
238
|
+
const src = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
|
239
|
+
const dstBytes = new Uint8Array(alignedRowBytes * height);
|
|
240
|
+
for (let r = 0; r < height; r++) {
|
|
241
|
+
dstBytes.set(src.subarray(r * rowBytes, (r + 1) * rowBytes), r * alignedRowBytes);
|
|
242
|
+
}
|
|
243
|
+
// Return the same typed array type as the input
|
|
244
|
+
if (data instanceof Int8Array)
|
|
245
|
+
return new Int8Array(dstBytes.buffer);
|
|
246
|
+
if (data instanceof Uint16Array)
|
|
247
|
+
return new Uint16Array(dstBytes.buffer);
|
|
248
|
+
if (data instanceof Int16Array)
|
|
249
|
+
return new Int16Array(dstBytes.buffer);
|
|
250
|
+
return dstBytes;
|
|
251
|
+
}
|
|
152
252
|
//# sourceMappingURL=render-pipeline.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-pipeline.js","sourceRoot":"","sources":["../../src/geotiff/render-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE5D,OAAO,EACL,SAAS,EACT,QAAQ,EACR,aAAa,EACb,WAAW,EACX,eAAe,
|
|
1
|
+
{"version":3,"file":"render-pipeline.js","sourceRoot":"","sources":["../../src/geotiff/render-pipeline.ts"],"names":[],"mappings":"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"}
|