@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
@@ -1,59 +1,21 @@
1
- import type { GeoTIFF, GeoTIFFImage, TypedArrayWithDimensions } from "geotiff";
2
- import { BaseClient, Pool } from "geotiff";
1
+ import type { RasterArray } from "@developmentseed/geotiff";
2
+ import { GeoTIFF } from "@developmentseed/geotiff";
3
3
  import type { Converter } from "proj4";
4
- /**
5
- * Options that may be passed when reading image data from geotiff.js
6
- */
7
- type ReadRasterOptions = {
8
- /** the subset to read data from in pixels. */
9
- window?: [number, number, number, number];
10
- /** The optional decoder pool to use. */
11
- pool?: Pool;
12
- /** An AbortSignal that may be signalled if the request is to be aborted */
13
- signal?: AbortSignal;
14
- };
15
- /**
16
- * Retrieve the default geotiff.js decoder Pool.
17
- *
18
- * If a Pool has not yet been created, it will be created on first call.
19
- *
20
- * The Pool will be shared between all COGLayer and GeoTIFFLayer instances.
21
- */
22
- export declare function defaultPool(): Pool;
23
- /**
24
- * Load an RGBA image from a GeoTIFFImage.
25
- */
26
- export declare function loadRgbImage(image: GeoTIFFImage, options?: ReadRasterOptions): Promise<{
27
- texture: ImageData;
28
- height: number;
29
- width: number;
30
- }>;
31
4
  /**
32
5
  * Add an alpha channel to an RGB image array.
33
6
  *
34
7
  * Only supports input arrays with 3 (RGB) or 4 (RGBA) channels. If the input is
35
8
  * already RGBA, it is returned unchanged.
36
9
  */
37
- export declare function addAlphaChannel(rgbImage: TypedArrayWithDimensions): ImageData;
38
- /**
39
- * Parse the GeoTIFF `ColorMap` tag into an ImageData.
40
- *
41
- * @param {Uint16Array} cmap The colormap array from the GeoTIFF `ColorMap` tag.
42
- *
43
- * @return {ImageData} The parsed colormap as an ImageData object.
44
- */
45
- export declare function parseColormap(cmap: Uint16Array): ImageData;
46
- export declare function fetchGeoTIFF(input: GeoTIFF | string | ArrayBuffer | Blob | BaseClient): Promise<GeoTIFF>;
10
+ export declare function addAlphaChannel(rgbImage: RasterArray): RasterArray;
11
+ export declare function fetchGeoTIFF(input: GeoTIFF | string | URL | ArrayBuffer): Promise<GeoTIFF>;
47
12
  /**
48
13
  * Calculate the WGS84 bounding box of a GeoTIFF image
49
14
  */
50
- export declare function getGeographicBounds(image: GeoTIFFImage, converter: Converter): {
15
+ export declare function getGeographicBounds(geotiff: GeoTIFF, converter: Converter): {
51
16
  west: number;
52
17
  south: number;
53
18
  east: number;
54
19
  north: number;
55
20
  };
56
- /** Parse the GDAL_NODATA TIFF tag into a number. */
57
- export declare function parseGDALNoData(GDAL_NODATA: string | undefined): number | null;
58
- export {};
59
21
  //# sourceMappingURL=geotiff.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"geotiff.d.ts","sourceRoot":"","sources":["../../src/geotiff/geotiff.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAC/E,OAAO,EACL,UAAU,EAKV,IAAI,EACL,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC;;GAEG;AACH,KAAK,iBAAiB,GAAG;IACvB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAE1C,wCAAwC;IACxC,IAAI,CAAC,EAAE,IAAI,CAAC;IAEZ,2EAA2E;IAC3E,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AASF;;;;;;GAMG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAMlC;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,YAAY,EACnB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC;IAAE,OAAO,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAmBhE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,wBAAwB,GAAG,SAAS,CAwB7E;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,CAqB1D;AAED,wBAAsB,YAAY,CAChC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,WAAW,GAAG,IAAI,GAAG,UAAU,GACxD,OAAO,CAAC,OAAO,CAAC,CAoBlB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,YAAY,EACnB,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,CA4B9D;AAED,oDAAoD;AACpD,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,MAAM,GAAG,IAAI,CAYf"}
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"}
@@ -1,44 +1,5 @@
1
- // Utilities for interacting with geotiff.js.
2
- import { BaseClient, fromArrayBuffer, fromBlob, fromCustomClient, fromUrl, Pool, } from "geotiff";
3
- /**
4
- * A default geotiff.js decoder pool instance.
5
- *
6
- * It will be created on first call of `defaultPool`.
7
- */
8
- let DEFAULT_POOL = null;
9
- /**
10
- * Retrieve the default geotiff.js decoder Pool.
11
- *
12
- * If a Pool has not yet been created, it will be created on first call.
13
- *
14
- * The Pool will be shared between all COGLayer and GeoTIFFLayer instances.
15
- */
16
- export function defaultPool() {
17
- if (DEFAULT_POOL === null) {
18
- DEFAULT_POOL = new Pool();
19
- }
20
- return DEFAULT_POOL;
21
- }
22
- /**
23
- * Load an RGBA image from a GeoTIFFImage.
24
- */
25
- export async function loadRgbImage(image, options) {
26
- const mergedOptions = {
27
- ...options,
28
- interleave: true,
29
- enableAlpha: true,
30
- };
31
- // Since we set interleave: true, the result is a single array with all
32
- // samples, so we cast to TypedArrayWithDimensions
33
- // https://github.com/geotiffjs/geotiff.js/issues/486
34
- const rgbImage = (await image.readRGB(mergedOptions));
35
- const imageData = addAlphaChannel(rgbImage);
36
- return {
37
- texture: imageData,
38
- height: rgbImage.height,
39
- width: rgbImage.width,
40
- };
41
- }
1
+ // Utilities for interacting with a GeoTIFF
2
+ import { GeoTIFF } from "@developmentseed/geotiff";
42
3
  /**
43
4
  * Add an alpha channel to an RGB image array.
44
5
  *
@@ -47,75 +8,56 @@ export async function loadRgbImage(image, options) {
47
8
  */
48
9
  export function addAlphaChannel(rgbImage) {
49
10
  const { height, width } = rgbImage;
50
- if (rgbImage.length === height * width * 4) {
11
+ if (rgbImage.layout === "band-separate") {
12
+ // This should be pretty easy to do by just returning an additional array of
13
+ // 255s
14
+ // But not sure if we'll want to do that, because it's fine to upload 3
15
+ // separate textures.
16
+ throw new Error("Band-separate images not yet implemented.");
17
+ }
18
+ if (rgbImage.data.length === height * width * 4) {
51
19
  // Already has alpha channel
52
- return new ImageData(new Uint8ClampedArray(rgbImage), width, height);
20
+ return rgbImage;
53
21
  }
54
- else if (rgbImage.length === height * width * 3) {
22
+ else if (rgbImage.data.length === height * width * 3) {
55
23
  // Need to add alpha channel
56
- const rgbaLength = (rgbImage.length / 3) * 4;
57
- const rgbaArray = new Uint8ClampedArray(rgbaLength);
58
- for (let i = 0; i < rgbImage.length / 3; ++i) {
59
- rgbaArray[i * 4] = rgbImage[i * 3];
60
- rgbaArray[i * 4 + 1] = rgbImage[i * 3 + 1];
61
- rgbaArray[i * 4 + 2] = rgbImage[i * 3 + 2];
62
- rgbaArray[i * 4 + 3] = 255;
24
+ const rgbaLength = (rgbImage.data.length / 3) * 4;
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;
30
+ for (let i = 0; i < rgbImage.data.length / 3; ++i) {
31
+ rgbaArray[i * 4] = rgbImage.data[i * 3];
32
+ rgbaArray[i * 4 + 1] = rgbImage.data[i * 3 + 1];
33
+ rgbaArray[i * 4 + 2] = rgbImage.data[i * 3 + 2];
34
+ rgbaArray[i * 4 + 3] = maxAlpha;
63
35
  }
64
- return new ImageData(rgbaArray, width, height);
36
+ return {
37
+ ...rgbImage,
38
+ count: 4,
39
+ data: rgbaArray,
40
+ };
65
41
  }
66
42
  else {
67
- throw new Error(`Unexpected number of channels in raster data: ${rgbImage.length / (height * width)}`);
43
+ throw new Error(`Unexpected number of channels in raster data: ${rgbImage.data.length / (height * width)}`);
68
44
  }
69
45
  }
70
- /**
71
- * Parse the GeoTIFF `ColorMap` tag into an ImageData.
72
- *
73
- * @param {Uint16Array} cmap The colormap array from the GeoTIFF `ColorMap` tag.
74
- *
75
- * @return {ImageData} The parsed colormap as an ImageData object.
76
- */
77
- export function parseColormap(cmap) {
78
- // TODO: test colormap handling on a 16-bit image with 2^16 entries?
79
- const size = cmap.length / 3;
80
- const rgba = new Uint8ClampedArray(size * 4);
81
- const rOffset = 0;
82
- const gOffset = size;
83
- const bOffset = size * 2;
84
- // Note: >> 8 is needed to convert from 16-bit to 8-bit color values
85
- // It just divides by 256 and floors to nearest integer
86
- for (let i = 0; i < size; i++) {
87
- rgba[4 * i + 0] = cmap[rOffset + i] >> 8;
88
- rgba[4 * i + 1] = cmap[gOffset + i] >> 8;
89
- rgba[4 * i + 2] = cmap[bOffset + i] >> 8;
90
- // Full opacity
91
- rgba[4 * i + 3] = 255;
92
- }
93
- return new ImageData(rgba, size, 1);
94
- }
95
46
  export async function fetchGeoTIFF(input) {
96
- if (typeof input === "string") {
97
- return fromUrl(input);
47
+ if (typeof input === "string" || input instanceof URL) {
48
+ return await GeoTIFF.fromUrl(input);
98
49
  }
99
50
  if (input instanceof ArrayBuffer) {
100
- return fromArrayBuffer(input);
101
- }
102
- if (input instanceof Blob) {
103
- return fromBlob(input);
104
- }
105
- // TODO: instanceof may fail here if multiple versions of geotiff.js are
106
- // present
107
- if (input instanceof BaseClient) {
108
- return fromCustomClient(input);
51
+ return await GeoTIFF.fromArrayBuffer(input);
109
52
  }
110
53
  return input;
111
54
  }
112
55
  /**
113
56
  * Calculate the WGS84 bounding box of a GeoTIFF image
114
57
  */
115
- export function getGeographicBounds(image, converter) {
116
- const projectedBbox = image.getBoundingBox();
58
+ export function getGeographicBounds(geotiff, converter) {
59
+ const [minX, minY, maxX, maxY] = geotiff.bbox;
117
60
  // Reproject all four corners to handle rotation/skew
118
- const [minX, minY, maxX, maxY] = projectedBbox;
119
61
  const corners = [
120
62
  converter.forward([minX, minY]), // bottom-left
121
63
  converter.forward([maxX, minY]), // bottom-right
@@ -132,15 +74,4 @@ export function getGeographicBounds(image, converter) {
132
74
  // Return bounds in MapLibre format: [[west, south], [east, north]]
133
75
  return { west, south, east, north };
134
76
  }
135
- /** Parse the GDAL_NODATA TIFF tag into a number. */
136
- export function parseGDALNoData(GDAL_NODATA) {
137
- if (!GDAL_NODATA) {
138
- return null;
139
- }
140
- // Remove trailing null character if present
141
- const noDataString = GDAL_NODATA?.[GDAL_NODATA?.length - 1] === "\x00"
142
- ? GDAL_NODATA.slice(0, -1)
143
- : GDAL_NODATA;
144
- return noDataString?.length > 0 ? parseFloat(noDataString) : null;
145
- }
146
77
  //# sourceMappingURL=geotiff.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"geotiff.js","sourceRoot":"","sources":["../../src/geotiff/geotiff.ts"],"names":[],"mappings":"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"}
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 { RasterModule } from "@developmentseed/deck.gl-raster/gpu-modules";
2
+ import type { GeoTIFF, Overview } from "@developmentseed/geotiff";
1
3
  import type { Device, Texture } from "@luma.gl/core";
2
- import type { COGLayerProps } from "../cog-layer";
3
- import type { ImageFileDirectory } from "./types";
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
- export declare function inferRenderPipeline(ifd: ImageFileDirectory, device: Device): {
10
- getTileData: COGLayerProps<TextureDataT>["getTileData"];
11
- renderTile: COGLayerProps<TextureDataT>["renderTile"];
11
+ export declare function inferRenderPipeline(geotiff: GeoTIFF, device: Device): {
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":"AASA,OAAO,KAAK,EAAE,MAAM,EAAgB,OAAO,EAAE,MAAM,eAAe,CAAC;AAEnE,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAGtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAGlD,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAqBF,wBAAgB,mBAAmB,CAEjC,GAAG,EAAE,kBAAkB,EACvB,MAAM,EAAE,MAAM,GACb;IACD,WAAW,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC,aAAa,CAAC,CAAC;IACxD,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC;CACvD,CAYA"}
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,23 +1,25 @@
1
- import { CMYKToRGB, Colormap, CreateTexture, cieLabToRGB, FilterNoDataVal, YCbCrToRGB, } from "@developmentseed/deck.gl-raster/gpu-modules";
2
- import { addAlphaChannel, parseColormap, parseGDALNoData } from "./geotiff";
1
+ import { Photometric, SampleFormat } from "@cogeotiff/core";
2
+ import { BlackIsZero, CMYKToRGB, Colormap, CreateTexture, cieLabToRGB, FilterNoDataVal, MaskTexture, WhiteIsZero, } from "@developmentseed/deck.gl-raster/gpu-modules";
3
+ import { parseColormap } from "@developmentseed/geotiff";
4
+ import { addAlphaChannel } from "./geotiff";
3
5
  import { inferTextureFormat } from "./texture";
4
- import { PhotometricInterpretationT } from "./types";
5
- export function inferRenderPipeline(
6
- // TODO: narrow type to only used fields
7
- ifd, device) {
8
- const { SampleFormat } = ifd;
9
- switch (SampleFormat[0]) {
6
+ export function inferRenderPipeline(geotiff, device) {
7
+ const { sampleFormat } = geotiff.cachedTags;
8
+ if (sampleFormat === null) {
9
+ throw new Error("SampleFormat tag is required to infer render pipeline");
10
+ }
11
+ switch (sampleFormat[0]) {
10
12
  // Unsigned integers
11
- case 1:
12
- return createUnormPipeline(ifd, device);
13
+ case SampleFormat.Uint:
14
+ return createUnormPipeline(geotiff, device);
13
15
  }
14
- throw new Error(`Inferring render pipeline for non-unsigned integers not yet supported. Found SampleFormat: ${SampleFormat}`);
16
+ throw new Error(`Inferring render pipeline for non-unsigned integers not yet supported. Found SampleFormat: ${sampleFormat}`);
15
17
  }
16
18
  /**
17
19
  * Create pipeline for visualizing unsigned-integer data.
18
20
  */
19
- function createUnormPipeline(ifd, device) {
20
- const { BitsPerSample, ColorMap, GDAL_NODATA, PhotometricInterpretation, SampleFormat, SamplesPerPixel, } = ifd;
21
+ function createUnormPipeline(geotiff, device) {
22
+ const { bitsPerSample, colorMap, photometric, sampleFormat, samplesPerPixel, nodata, } = geotiff.cachedTags;
21
23
  const renderPipeline = [
22
24
  {
23
25
  module: CreateTexture,
@@ -26,22 +28,35 @@ function createUnormPipeline(ifd, device) {
26
28
  },
27
29
  },
28
30
  ];
29
- // Add NoData filtering if GDAL_NODATA is defined
30
- const noDataVal = parseGDALNoData(GDAL_NODATA);
31
- if (noDataVal !== null) {
32
- // Since values are 0-1 for unorm textures,
33
- const noDataScaled = noDataVal / 255.0;
31
+ if (nodata !== null) {
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;
34
35
  renderPipeline.push({
35
36
  module: FilterNoDataVal,
36
37
  props: { value: noDataScaled },
37
38
  });
38
39
  }
39
- const toRGBModule = photometricInterpretationToRGB(PhotometricInterpretation, device, ColorMap);
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
+ });
40
55
  if (toRGBModule) {
41
56
  renderPipeline.push(toRGBModule);
42
57
  }
43
58
  // For palette images, use nearest-neighbor sampling
44
- const samplerOptions = PhotometricInterpretation === PhotometricInterpretationT.Palette
59
+ const samplerOptions = photometric === Photometric.Palette
45
60
  ? {
46
61
  magFilter: "nearest",
47
62
  minFilter: "nearest",
@@ -51,32 +66,60 @@ function createUnormPipeline(ifd, device) {
51
66
  minFilter: "linear",
52
67
  };
53
68
  const getTileData = async (image, options) => {
54
- const { device } = options;
55
- const mergedOptions = {
56
- ...options,
57
- interleave: true,
58
- };
59
- let data = (await image.readRasters(mergedOptions));
60
- let numSamples = SamplesPerPixel;
61
- if (SamplesPerPixel === 3) {
69
+ const { device, x, y, signal, pool } = options;
70
+ const tile = await image.fetchTile(x, y, {
71
+ boundless: false,
72
+ pool,
73
+ signal,
74
+ });
75
+ let { array } = tile;
76
+ const { width, height, mask } = array;
77
+ let numSamples = samplesPerPixel;
78
+ if (samplesPerPixel === 3) {
62
79
  // WebGL2 doesn't have an RGB-only texture format; it requires RGBA.
63
- data = addAlphaChannel(data);
80
+ array = addAlphaChannel(array);
64
81
  numSamples = 4;
65
82
  }
83
+ if (array.layout === "band-separate") {
84
+ throw new Error("Band-separate images not yet implemented.");
85
+ }
66
86
  const textureFormat = inferTextureFormat(
67
87
  // Add one sample for added alpha channel
68
- numSamples, BitsPerSample, SampleFormat);
88
+ numSamples, bitsPerSample, sampleFormat);
89
+ const bytesPerPixel = (bitsPerSample[0] / 8) * numSamples;
90
+ const textureData = enforceAlignment(array.data, {
91
+ width,
92
+ height,
93
+ bytesPerPixel,
94
+ });
69
95
  const texture = device.createTexture({
70
- data,
96
+ data: textureData,
71
97
  format: textureFormat,
72
- width: data.width,
73
- height: data.height,
74
- sampler: samplerOptions,
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
+ },
75
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
+ }
76
118
  return {
77
119
  texture,
78
- height: data.height,
79
- width: data.width,
120
+ mask: maskTexture,
121
+ height: array.height,
122
+ width: array.width,
80
123
  };
81
124
  };
82
125
  const renderTile = (tileData) => {
@@ -84,15 +127,29 @@ function createUnormPipeline(ifd, device) {
84
127
  };
85
128
  return { getTileData, renderTile };
86
129
  }
87
- function photometricInterpretationToRGB(PhotometricInterpretation, device, ColorMap) {
88
- switch (PhotometricInterpretation) {
89
- case PhotometricInterpretationT.RGB:
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
+ }
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
+ }
146
+ case Photometric.Rgb:
90
147
  return null;
91
- case PhotometricInterpretationT.Palette: {
92
- if (!ColorMap) {
148
+ case Photometric.Palette: {
149
+ if (!colorMap) {
93
150
  throw new Error("ColorMap is required for PhotometricInterpretation Palette");
94
151
  }
95
- const { data, width, height } = parseColormap(ColorMap);
152
+ const { data, width, height } = parseColormap(colorMap);
96
153
  const cmapTexture = device.createTexture({
97
154
  data,
98
155
  format: "rgba8unorm",
@@ -112,20 +169,22 @@ function photometricInterpretationToRGB(PhotometricInterpretation, device, Color
112
169
  },
113
170
  };
114
171
  }
115
- case PhotometricInterpretationT.CMYK:
172
+ // Not sure why cogeotiff calls this "Separated", but it means CMYK
173
+ case Photometric.Separated:
116
174
  return {
117
175
  module: CMYKToRGB,
118
176
  };
119
- case PhotometricInterpretationT.YCbCr:
120
- return {
121
- module: YCbCrToRGB,
122
- };
123
- case PhotometricInterpretationT.CIELab:
177
+ case Photometric.Ycbcr:
178
+ // @developmentseed/geotiff currently uses canvas to parse JPEG-compressed
179
+ // YCbCr images, which means the YCbCr->RGB conversion is already done by
180
+ // the browser's image decoder
181
+ return null;
182
+ case Photometric.Cielab:
124
183
  return {
125
184
  module: cieLabToRGB,
126
185
  };
127
186
  default:
128
- throw new Error(`Unsupported PhotometricInterpretation ${PhotometricInterpretation}`);
187
+ throw new Error(`Unsupported PhotometricInterpretation ${photometric}`);
129
188
  }
130
189
  }
131
190
  /**
@@ -146,4 +205,48 @@ function resolveModule(m, data) {
146
205
  }
147
206
  return { module, props: resolvedProps };
148
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
+ }
149
252
  //# sourceMappingURL=render-pipeline.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"render-pipeline.js","sourceRoot":"","sources":["../../src/geotiff/render-pipeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render-pipeline.js","sourceRoot":"","sources":["../../src/geotiff/render-pipeline.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,15 @@
1
- import type { TextureFormat, TextureProps } from "@luma.gl/core";
2
- import type { GeoTIFFImage, TypedArray } from "geotiff";
1
+ import { SampleFormat } from "@cogeotiff/core";
2
+ import type { GeoTIFF } from "@developmentseed/geotiff";
3
+ import type { TextureFormat, TextureProps, TypedArray } from "@luma.gl/core";
3
4
  /**
4
5
  * Infers texture properties from a GeoTIFF image and its associated data.
5
6
  */
6
- export declare function createTextureProps(image: GeoTIFFImage, data: TypedArray, options: {
7
+ export declare function createTextureProps(geotiff: GeoTIFF, data: TypedArray, options: {
7
8
  width: number;
8
9
  height: number;
9
10
  }): TextureProps;
10
11
  /**
11
12
  * Infer the TextureFormat given values from GeoTIFF tags.
12
13
  */
13
- export declare function inferTextureFormat(samplesPerPixel: number, bitsPerSample: Uint16Array, sampleFormat: Uint16Array): TextureFormat;
14
+ export declare function inferTextureFormat(samplesPerPixel: number, bitsPerSample: Uint16Array, sampleFormat: SampleFormat[]): TextureFormat;
14
15
  //# sourceMappingURL=texture.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"texture.d.ts","sourceRoot":"","sources":["../../src/geotiff/texture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGxD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACzC,YAAY,CAgBd;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,WAAW,EAC1B,YAAY,EAAE,WAAW,GACxB,aAAa,CAef"}
1
+ {"version":3,"file":"texture.d.ts","sourceRoot":"","sources":["../../src/geotiff/texture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE7E;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACzC,YAAY,CAed;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,WAAW,EAC1B,YAAY,EAAE,YAAY,EAAE,GAC3B,aAAa,CAef"}