@developmentseed/deck.gl-geotiff 0.2.0 → 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.
Files changed (46) hide show
  1. package/README.md +33 -4
  2. package/dist/cog-layer.d.ts +63 -57
  3. package/dist/cog-layer.d.ts.map +1 -1
  4. package/dist/cog-layer.js +116 -85
  5. package/dist/cog-layer.js.map +1 -1
  6. package/dist/geotiff/geotiff.d.ts +5 -43
  7. package/dist/geotiff/geotiff.d.ts.map +1 -1
  8. package/dist/geotiff/geotiff.js +34 -103
  9. package/dist/geotiff/geotiff.js.map +1 -1
  10. package/dist/geotiff/render-pipeline.d.ts +7 -5
  11. package/dist/geotiff/render-pipeline.d.ts.map +1 -1
  12. package/dist/geotiff/render-pipeline.js +152 -49
  13. package/dist/geotiff/render-pipeline.js.map +1 -1
  14. package/dist/geotiff/texture.d.ts +5 -4
  15. package/dist/geotiff/texture.d.ts.map +1 -1
  16. package/dist/geotiff/texture.js +7 -7
  17. package/dist/geotiff/texture.js.map +1 -1
  18. package/dist/geotiff-layer.d.ts +21 -24
  19. package/dist/geotiff-layer.d.ts.map +1 -1
  20. package/dist/geotiff-layer.js +25 -21
  21. package/dist/geotiff-layer.js.map +1 -1
  22. package/dist/geotiff-reprojection.d.ts +5 -18
  23. package/dist/geotiff-reprojection.d.ts.map +1 -1
  24. package/dist/geotiff-reprojection.js +9 -126
  25. package/dist/geotiff-reprojection.js.map +1 -1
  26. package/dist/index.d.ts +3 -10
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +1 -7
  29. package/dist/index.js.map +1 -1
  30. package/dist/proj.d.ts +3 -23
  31. package/dist/proj.d.ts.map +1 -1
  32. package/dist/proj.js +20 -38
  33. package/dist/proj.js.map +1 -1
  34. package/package.json +16 -12
  35. package/dist/cog-tile-matrix-set.d.ts +0 -32
  36. package/dist/cog-tile-matrix-set.d.ts.map +0 -1
  37. package/dist/cog-tile-matrix-set.js +0 -180
  38. package/dist/cog-tile-matrix-set.js.map +0 -1
  39. package/dist/ellipsoids.d.ts +0 -153
  40. package/dist/ellipsoids.d.ts.map +0 -1
  41. package/dist/ellipsoids.js +0 -153
  42. package/dist/ellipsoids.js.map +0 -1
  43. package/dist/geotiff/types.d.ts +0 -34
  44. package/dist/geotiff/types.d.ts.map +0 -1
  45. package/dist/geotiff/types.js +0 -18
  46. package/dist/geotiff/types.js.map +0 -1
package/README.md CHANGED
@@ -1,6 +1,35 @@
1
- GeoTIFF and Cloud-Optimized GeoTIFF visualization in deck.gl.
1
+ # @developmentseed/deck.gl-geotiff
2
2
 
3
- There are two layers exported:
3
+ High-level API for rendering [Cloud-Optimized GeoTIFFs] in deck.gl.
4
4
 
5
- - `COGLayer` uses a `TileLayer` to individually render each internal tile of a COG. This relies on the input geotiff being tiled and having overviews.
6
- - `GeoTIFFLayer` **doesn't use a `TileLayer`**. It just fetches the highest resolution image of a `GeoTIFF` and renders it using a `RasterLayer`. This should work for more generic GeoTIFF images, including those that don't have overviews and those that are laid out in strips instead of in tiles.
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
@@ -2,12 +2,14 @@ import type { CompositeLayerProps, Layer, LayersList, UpdateParameters } from "@
2
2
  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
- import type { RasterModule, TileMatrixSet } from "@developmentseed/deck.gl-raster";
5
+ import type { RasterModule } from "@developmentseed/deck.gl-raster";
6
+ import type { DecoderPool, GeoTIFF, Overview } from "@developmentseed/geotiff";
7
+ import type { TileMatrixSet } from "@developmentseed/morecantile";
6
8
  import type { ReprojectionFns } from "@developmentseed/raster-reproject";
7
- import type { Device } from "@luma.gl/core";
8
- import type { BaseClient, GeoTIFF, GeoTIFFImage, Pool } from "geotiff";
9
+ import type { Device, Texture } from "@luma.gl/core";
10
+ import type { ProjectionDefinition } from "wkt-parser";
9
11
  import type { TextureDataT } from "./geotiff/render-pipeline.js";
10
- import type { GeoKeysParser, ProjectionInfo } from "./proj.js";
12
+ import type { EpsgResolver } from "./proj.js";
11
13
  /**
12
14
  * Minimum interface that **must** be returned from getTileData.
13
15
  */
@@ -15,78 +17,82 @@ export type MinimalDataT = {
15
17
  height: number;
16
18
  width: number;
17
19
  };
18
- export type DefaultDataT = MinimalDataT & {
19
- texture: ImageData;
20
+ type DefaultDataT = MinimalDataT & {
21
+ texture: Texture;
20
22
  };
21
23
  /** Options passed to `getTileData`. */
22
24
  export type GetTileDataOptions = {
23
25
  /** The luma.gl Device */
24
26
  device: Device;
25
- /** the subset to read data from in pixels. */
26
- window?: [number, number, number, number];
27
+ /** The x coordinate of the tile within the IFD. */
28
+ x: number;
29
+ /** The y coordinate of the tile within the IFD. */
30
+ y: number;
27
31
  /** An AbortSignal that may be signalled if the request is to be aborted */
28
32
  signal?: AbortSignal;
29
33
  /** The decoder pool to use. */
30
- pool: Pool;
34
+ pool: DecoderPool;
31
35
  };
32
36
  type GetTileDataResult<DataT> = {
33
37
  data: DataT;
34
38
  forwardTransform: ReprojectionFns["forwardTransform"];
35
39
  inverseTransform: ReprojectionFns["inverseTransform"];
36
40
  };
37
- export interface COGLayerProps<DataT extends MinimalDataT = DefaultDataT> extends CompositeLayerProps {
41
+ type COGLayerDataProps<DataT extends MinimalDataT> = {
38
42
  /**
39
- * GeoTIFF input.
43
+ * User-defined method to load data for a tile.
40
44
  *
41
- * - URL string pointing to a COG
42
- * - ArrayBuffer containing the COG data
43
- * - Blob containing the COG data
44
- * - An instance of GeoTIFF.js's GeoTIFF class
45
- * - An instance of GeoTIFF.js's BaseClient for custom fetching
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.
46
48
  */
47
- geotiff: GeoTIFF | string | ArrayBuffer | Blob | BaseClient;
49
+ getTileData: (image: GeoTIFF | Overview, options: GetTileDataOptions) => Promise<DataT>;
48
50
  /**
49
- * A function callback for parsing GeoTIFF geo keys to a Proj4 compatible
50
- * definition.
51
+ * User-defined method to render data for a tile.
51
52
  *
52
- * By default, uses epsg.io to resolve EPSG codes found in the GeoTIFF.
53
- * Alternatively, you may want to use `geotiff-geokeys-to-proj4`, which is
54
- * more extensive but adds 1.5MB to your bundle size.
53
+ * Must be provided together with `getTileData`. Receives the value
54
+ * returned by `getTileData` and must return a render pipeline.
55
55
  */
56
- geoKeysParser?: GeoKeysParser;
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> & {
57
65
  /**
58
- * GeoTIFF.js Pool for decoding image chunks.
66
+ * Cloud-optimized GeoTIFF input.
67
+ *
68
+ * - {@link URL} or `string` pointing to a COG
69
+ * - {@link ArrayBuffer} containing the COG data
70
+ * - An instance of the {@link GeoTIFF} class.
71
+ */
72
+ geotiff: GeoTIFF | string | URL | ArrayBuffer;
73
+ /**
74
+ * A function callback for parsing numeric EPSG codes to projection
75
+ * information (as returned by `wkt-parser`).
76
+ *
77
+ * The default implementation:
78
+ * - makes a request to epsg.io to resolve EPSG codes found in the GeoTIFF.
79
+ * - caches any previous requests
80
+ * - parses PROJJSON response with `wkt-parser`
81
+ */
82
+ epsgResolver?: EpsgResolver;
83
+ /**
84
+ * Worker pool for decoding image chunks.
59
85
  *
60
86
  * If none is provided, a default Pool will be created and shared between all
61
87
  * COGLayer and GeoTIFFLayer instances.
62
88
  */
63
- pool?: Pool;
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 using geotiff.js's readRGB
74
- * method, returning an ImageData 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: GeoTIFFImage, 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
@@ -99,12 +105,9 @@ export interface COGLayerProps<DataT extends MinimalDataT = DefaultDataT> extend
99
105
  debugOpacity?: number;
100
106
  /**
101
107
  * Called when the GeoTIFF metadata has been loaded and parsed.
102
- *
103
- * @param {GeoTIFF} geotiff
104
- * @param {ProjectionInfo} projection
105
108
  */
106
109
  onGeoTIFFLoad?: (geotiff: GeoTIFF, options: {
107
- projection: ProjectionInfo;
110
+ projection: ProjectionDefinition;
108
111
  /**
109
112
  * Bounds of the image in geographic coordinates (WGS84) [minLon, minLat,
110
113
  * maxLon, maxLat]
@@ -123,7 +126,7 @@ export interface COGLayerProps<DataT extends MinimalDataT = DefaultDataT> extend
123
126
  * automatically aborted.
124
127
  */
125
128
  signal?: AbortSignal;
126
- }
129
+ };
127
130
  /**
128
131
  * COGLayer renders a COG using a tiled approach with reprojection.
129
132
  */
@@ -131,27 +134,30 @@ export declare class COGLayer<DataT extends MinimalDataT = DefaultDataT> extends
131
134
  static layerName: string;
132
135
  static defaultProps: Partial<COGLayerProps<DefaultDataT>>;
133
136
  state: {
134
- forwardReproject?: ReprojectionFns["forwardReproject"];
135
- inverseReproject?: ReprojectionFns["inverseReproject"];
136
- metadata?: TileMatrixSet;
137
- images?: GeoTIFFImage[];
137
+ geotiff: GeoTIFF;
138
+ forwardTo4326?: ReprojectionFns["forwardReproject"];
139
+ inverseFrom4326?: ReprojectionFns["inverseReproject"];
140
+ forwardTo3857?: ReprojectionFns["forwardReproject"];
141
+ tms?: TileMatrixSet;
138
142
  defaultGetTileData?: COGLayerProps<TextureDataT>["getTileData"];
139
143
  defaultRenderTile?: COGLayerProps<TextureDataT>["renderTile"];
140
144
  };
141
145
  initializeState(): void;
142
146
  updateState(params: UpdateParameters<this>): void;
147
+ clearState(): void;
143
148
  _parseGeoTIFF(): Promise<void>;
144
149
  /**
145
150
  * Inner callback passed in to the underlying TileLayer's `getTileData`.
146
151
  */
147
- _getTileData(tile: TileLoadProps, images: GeoTIFFImage[], metadata: TileMatrixSet): Promise<GetTileDataResult<DataT>>;
152
+ _getTileData(tile: TileLoadProps, geotiff: GeoTIFF, tms: TileMatrixSet): Promise<GetTileDataResult<DataT>>;
148
153
  _renderSubLayers(props: TileLayerProps<GetTileDataResult<DataT>> & {
149
154
  id: string;
150
155
  data?: GetTileDataResult<DataT>;
151
156
  _offset: number;
152
157
  tile: Tile2DHeader<GetTileDataResult<DataT>>;
153
- }, metadata: TileMatrixSet, forwardReproject: ReprojectionFns["forwardReproject"], inverseReproject: ReprojectionFns["inverseReproject"]): Layer | LayersList | null;
154
- renderTileLayer(metadata: TileMatrixSet, forwardReproject: ReprojectionFns["forwardReproject"], inverseReproject: ReprojectionFns["inverseReproject"], images: GeoTIFFImage[]): TileLayer;
158
+ }, tms: TileMatrixSet, forwardTo4326: ReprojectionFns["forwardReproject"], inverseFrom4326: ReprojectionFns["inverseReproject"]): Layer | LayersList | null;
159
+ /** Define the underlying deck.gl TileLayer. */
160
+ renderTileLayer(tms: TileMatrixSet, forwardTo4326: ReprojectionFns["forwardReproject"], inverseFrom4326: ReprojectionFns["inverseReproject"], forwardTo3857: ReprojectionFns["forwardReproject"], geotiff: GeoTIFF): TileLayer;
155
161
  renderLayers(): TileLayer<any, {}> | null;
156
162
  }
157
163
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"cog-layer.d.ts","sourceRoot":"","sources":["../src/cog-layer.ts"],"names":[],"mappings":"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"}
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
@@ -1,15 +1,17 @@
1
1
  import { CompositeLayer } from "@deck.gl/core";
2
2
  import { TileLayer } from "@deck.gl/geo-layers";
3
3
  import { PathLayer } from "@deck.gl/layers";
4
- import { RasterLayer, RasterTileset2D } from "@developmentseed/deck.gl-raster";
4
+ import { RasterLayer, TileMatrixSetTileset, } from "@developmentseed/deck.gl-raster";
5
+ import { defaultDecoderPool, generateTileMatrixSet, } from "@developmentseed/geotiff";
6
+ import { tileTransform } from "@developmentseed/morecantile";
5
7
  import proj4 from "proj4";
6
- import { parseCOGTileMatrixSet } from "./cog-tile-matrix-set.js";
7
- import { defaultPool, fetchGeoTIFF, getGeographicBounds, } from "./geotiff/geotiff.js";
8
+ import wktParser from "wkt-parser";
9
+ import { fetchGeoTIFF, getGeographicBounds } from "./geotiff/geotiff.js";
8
10
  import { inferRenderPipeline } from "./geotiff/render-pipeline.js";
9
- import { fromGeoTransform } from "./geotiff-reprojection.js";
10
- import { epsgIoGeoKeyParser } from "./proj.js";
11
+ import { fromAffine } from "./geotiff-reprojection.js";
12
+ import { epsgResolver } from "./proj.js";
11
13
  const defaultProps = {
12
- geoKeysParser: epsgIoGeoKeyParser,
14
+ epsgResolver,
13
15
  debug: false,
14
16
  debugOpacity: 0.5,
15
17
  };
@@ -27,76 +29,101 @@ export class COGLayer extends CompositeLayer {
27
29
  const { props, oldProps, changeFlags } = params;
28
30
  const needsUpdate = Boolean(changeFlags.dataChanged) || props.geotiff !== oldProps.geotiff;
29
31
  if (needsUpdate) {
32
+ // Clear stale state so renderLayers returns null until the new GeoTIFF is
33
+ // ready
34
+ this.clearState();
30
35
  this._parseGeoTIFF();
31
36
  }
32
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
+ }
33
49
  async _parseGeoTIFF() {
34
50
  const geotiff = await fetchGeoTIFF(this.props.geotiff);
35
- const geoKeysParser = this.props.geoKeysParser;
36
- const metadata = await parseCOGTileMatrixSet(geotiff, geoKeysParser);
37
- const image = await geotiff.getImage();
38
- const imageCount = await geotiff.getImageCount();
39
- const images = [];
40
- for (let imageIdx = 0; imageIdx < imageCount; imageIdx++) {
41
- images.push(await geotiff.getImage(imageIdx));
42
- }
43
- const sourceProjection = await geoKeysParser(image.getGeoKeys());
44
- if (!sourceProjection) {
45
- throw new Error("Could not determine source projection from GeoTIFF geo keys");
46
- }
47
- const converter = proj4(sourceProjection.def, "EPSG:4326");
48
- const forwardReproject = (x, y) => converter.forward([x, y], false);
49
- const inverseReproject = (x, y) => converter.inverse([x, y], false);
51
+ const crs = geotiff.crs;
52
+ const sourceProjection = typeof crs === "number"
53
+ ? await this.props.epsgResolver(crs)
54
+ : wktParser(crs);
55
+ const tms = generateTileMatrixSet(geotiff, sourceProjection);
56
+ // @ts-expect-error - proj4 typings are incomplete and don't support
57
+ // wkt-parser input
58
+ const converter4326 = proj4(sourceProjection, "EPSG:4326");
59
+ const forwardTo4326 = (x, y) => converter4326.forward([x, y], false);
60
+ const inverseFrom4326 = (x, y) => converter4326.inverse([x, y], false);
61
+ // @ts-expect-error - proj4 typings are incomplete and don't support
62
+ // wkt-parser input
63
+ const converter3857 = proj4(sourceProjection, "EPSG:3857");
64
+ const forwardTo3857 = (x, y) => converter3857.forward([x, y], false);
50
65
  if (this.props.onGeoTIFFLoad) {
51
- const geographicBounds = getGeographicBounds(image, converter);
66
+ const geographicBounds = getGeographicBounds(geotiff, converter4326);
52
67
  this.props.onGeoTIFFLoad(geotiff, {
53
68
  projection: sourceProjection,
54
69
  geographicBounds,
55
70
  });
56
71
  }
57
- const { getTileData: defaultGetTileData, renderTile: defaultRenderTile } = inferRenderPipeline(image.fileDirectory, this.context.device);
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
+ }
58
78
  this.setState({
59
- metadata,
60
- forwardReproject,
61
- inverseReproject,
62
- images,
63
- defaultGetTileData,
64
- defaultRenderTile,
79
+ geotiff,
80
+ tms,
81
+ forwardTo4326,
82
+ inverseFrom4326,
83
+ forwardTo3857,
65
84
  });
66
85
  }
67
86
  /**
68
87
  * Inner callback passed in to the underlying TileLayer's `getTileData`.
69
88
  */
70
- async _getTileData(tile, images, metadata) {
89
+ async _getTileData(tile, geotiff, tms) {
71
90
  const { signal } = tile;
72
91
  const { x, y, z } = tile.index;
73
92
  // Select overview image
74
- const geotiffImage = images[images.length - 1 - z];
75
- const imageHeight = geotiffImage.getHeight();
76
- const imageWidth = geotiffImage.getWidth();
77
- const tileMatrix = metadata.tileMatrices[z];
78
- const { tileWidth, tileHeight } = tileMatrix;
79
- const tileGeotransform = computeTileGeotransform(x, y, tileMatrix);
80
- const { forwardTransform, inverseTransform } = fromGeoTransform(tileGeotransform);
81
- const window = [
82
- x * tileWidth,
83
- y * tileHeight,
84
- Math.min((x + 1) * tileWidth, imageWidth),
85
- Math.min((y + 1) * tileHeight, imageHeight),
86
- ];
87
- const getTileData = this.props.getTileData || this.state.defaultGetTileData;
93
+ // If z=0, use the coarsest overview (which is the last in the array)
94
+ // If z=max, use the full-resolution image (which is the first in the array)
95
+ // TODO: should be able to (micro) optimize this to not create the array
96
+ // Something like:
97
+ // const image = z === geotiff.overviews.length - 1 ? geotiff :
98
+ // geotiff.overviews[geotiff.overviews.length - 1 - z]!;
99
+ const images = [geotiff, ...geotiff.overviews];
100
+ const image = images[images.length - 1 - z];
101
+ const tileMatrix = tms.tileMatrices[z];
102
+ const tileAffine = tileTransform(tileMatrix, { col: x, row: y });
103
+ const { forwardTransform, inverseTransform } = fromAffine(tileAffine);
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 data = await getTileData(geotiffImage, {
108
+ const getTileDataProps = {
93
109
  device: this.context.device,
94
- window,
110
+ x,
111
+ y,
95
112
  signal: combinedSignal,
96
- pool: this.props.pool || defaultPool(),
97
- });
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
+ }
98
126
  return {
99
- // @ts-expect-error type mismatch when using provided getTileData
100
127
  data,
101
128
  forwardTransform,
102
129
  inverseTransform,
@@ -105,7 +132,7 @@ export class COGLayer extends CompositeLayer {
105
132
  _renderSubLayers(
106
133
  // TODO: it would be nice to have a cleaner type here
107
134
  // this is copy-pasted from the upstream tile layer definition for props.
108
- props, metadata, forwardReproject, inverseReproject) {
135
+ props, tms, forwardTo4326, inverseFrom4326) {
109
136
  const { maxError, debug, debugOpacity } = this.props;
110
137
  const { tile } = props;
111
138
  if (!props.data) {
@@ -115,37 +142,48 @@ export class COGLayer extends CompositeLayer {
115
142
  const layers = [];
116
143
  if (data) {
117
144
  const { height, width } = data;
118
- const renderTile = this.props.renderTile || this.state.defaultRenderTile;
119
- layers.push(new RasterLayer({
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({
120
158
  id: `${props.id}-raster`,
121
159
  width,
122
160
  height,
123
- renderPipeline: renderTile(data),
161
+ renderPipeline,
124
162
  maxError,
125
163
  reprojectionFns: {
126
164
  forwardTransform,
127
165
  inverseTransform,
128
- forwardReproject,
129
- inverseReproject,
166
+ forwardReproject: forwardTo4326,
167
+ inverseReproject: inverseFrom4326,
130
168
  },
131
169
  debug,
132
170
  debugOpacity,
133
- }));
171
+ })));
134
172
  }
135
173
  if (debug) {
136
174
  // Get projected bounds from tile data
137
175
  // getTileMetadata returns data that includes projectedBounds
138
176
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
139
177
  const projectedBounds = tile?.projectedBounds;
140
- if (!projectedBounds || !metadata) {
178
+ if (!projectedBounds || !tms) {
141
179
  return [];
142
180
  }
143
181
  // Project bounds from image CRS to WGS84
144
182
  const { topLeft, topRight, bottomLeft, bottomRight } = projectedBounds;
145
- const topLeftWgs84 = metadata.projectToWgs84(topLeft);
146
- const topRightWgs84 = metadata.projectToWgs84(topRight);
147
- const bottomRightWgs84 = metadata.projectToWgs84(bottomRight);
148
- const bottomLeftWgs84 = metadata.projectToWgs84(bottomLeft);
183
+ const topLeftWgs84 = forwardTo4326(topLeft[0], topLeft[1]);
184
+ const topRightWgs84 = forwardTo4326(topRight[0], topRight[1]);
185
+ const bottomRightWgs84 = forwardTo4326(bottomRight[0], bottomRight[1]);
186
+ const bottomLeftWgs84 = forwardTo4326(bottomLeft[0], bottomLeft[1]);
149
187
  // Create a closed path around the tile bounds
150
188
  const path = [
151
189
  topLeftWgs84,
@@ -166,44 +204,37 @@ export class COGLayer extends CompositeLayer {
166
204
  }
167
205
  return layers;
168
206
  }
169
- renderTileLayer(metadata, forwardReproject, inverseReproject, images) {
207
+ /** Define the underlying deck.gl TileLayer. */
208
+ renderTileLayer(tms, forwardTo4326, inverseFrom4326, forwardTo3857, geotiff) {
170
209
  // Create a factory class that wraps COGTileset2D with the metadata
171
- class RasterTileset2DFactory extends RasterTileset2D {
210
+ class TileMatrixSetTilesetFactory extends TileMatrixSetTileset {
172
211
  constructor(opts) {
173
- super(metadata, opts);
212
+ super(opts, tms, {
213
+ projectTo4326: forwardTo4326,
214
+ projectTo3857: forwardTo3857,
215
+ });
174
216
  }
175
217
  }
176
218
  return new TileLayer({
177
219
  id: `cog-tile-layer-${this.id}`,
178
- TilesetClass: RasterTileset2DFactory,
179
- getTileData: async (tile) => this._getTileData(tile, images, metadata),
180
- renderSubLayers: (props) => this._renderSubLayers(props, metadata, forwardReproject, inverseReproject),
220
+ TilesetClass: TileMatrixSetTilesetFactory,
221
+ getTileData: async (tile) => this._getTileData(tile, geotiff, tms),
222
+ renderSubLayers: (props) => this._renderSubLayers(props, tms, forwardTo4326, inverseFrom4326),
181
223
  });
182
224
  }
183
225
  renderLayers() {
184
- const { forwardReproject, inverseReproject, metadata, images } = this.state;
185
- if (!forwardReproject || !inverseReproject || !metadata || !images) {
226
+ const { forwardTo4326, inverseFrom4326, forwardTo3857, tms, geotiff } = this.state;
227
+ if (!forwardTo4326 ||
228
+ !inverseFrom4326 ||
229
+ !forwardTo3857 ||
230
+ !tms ||
231
+ !geotiff) {
186
232
  return null;
187
233
  }
188
234
  // Split into a separate method to make TS happy, because when metadata is
189
235
  // nullable in any part of function scope, the tileset factory wrapper gives
190
236
  // a type error
191
- return this.renderTileLayer(metadata, forwardReproject, inverseReproject, images);
237
+ return this.renderTileLayer(tms, forwardTo4326, inverseFrom4326, forwardTo3857, geotiff);
192
238
  }
193
239
  }
194
- /**
195
- * Compute the affine geotransform for this tile.
196
- *
197
- * We need to offset the geotransform for the matrix level by the tile's pixel
198
- * origin.
199
- */
200
- function computeTileGeotransform(x, y, tileMatrix) {
201
- const { tileWidth, tileHeight } = tileMatrix;
202
- const xPixelOrigin = x * tileWidth;
203
- const yPixelOrigin = y * tileHeight;
204
- const [a, b, c, d, e, f] = tileMatrix.geotransform;
205
- const xCoordOffset = a * xPixelOrigin + b * yPixelOrigin + c;
206
- const yCoordOffset = d * xPixelOrigin + e * yPixelOrigin + f;
207
- return [a, b, xCoordOffset, d, e, yCoordOffset];
208
- }
209
240
  //# sourceMappingURL=cog-layer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cog-layer.js","sourceRoot":"","sources":["../src/cog-layer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cog-layer.js","sourceRoot":"","sources":["../src/cog-layer.ts"],"names":[],"mappings":"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"}