@gisatcz/deckgl-geolib 2.5.0 → 2.5.1-dev.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.
@@ -1,6 +1,6 @@
1
- import { GeoTIFF, GeoTIFFImage } from 'geotiff';
1
+ import { GeoTIFF } from 'geotiff';
2
2
  import GeoImage from './GeoImage';
3
- import { GeoImageOptions, TileResult } from './types';
3
+ import { GeoImageOptions, TileResult, TypedArray } from './types';
4
4
  export type Bounds = [minX: number, minY: number, maxX: number, maxY: number];
5
5
  declare class CogTiles {
6
6
  cog?: GeoTIFF;
@@ -13,63 +13,19 @@ declare class CogTiles {
13
13
  bounds: [number, number, number, number];
14
14
  geo: GeoImage;
15
15
  options: GeoImageOptions;
16
- private tileResultCache;
17
- private readonly tileResultCacheMaxSize;
18
- private getTileResultCacheKey;
19
- /** Clears the TileResult cache. Call when the COG URL or meshMaxError changes. */
20
- clearTileResultCache(): void;
21
- private rasterCache;
22
- private readonly rasterCacheMaxSize;
23
- private reliefMaskCache;
24
- private readonly reliefMaskCacheMaxSize;
25
- private getTileCacheKey;
26
- private imageCache;
16
+ private cache;
17
+ private tileReader?;
27
18
  private initializePromise?;
28
19
  private lastInitializedUrl?;
29
20
  constructor(options: GeoImageOptions);
30
21
  initializeCog(url: string): Promise<void>;
31
22
  getZoomRange(): number[];
32
- calculateZoomRange(tileSize: number, resolution: number, imgCount: number): number[];
33
- calculateBoundsAsLatLon(bbox: number[]): [number, number, number, number];
34
- getZoomLevelFromResolution(tileSize: number, resolution: number): number;
35
23
  getBoundsAsLatLon(): [number, number, number, number];
36
- getLatLon(input: number[]): [number, number];
37
- /**
38
- * Calculates the error multiplier based on zoom level and COG zoom range.
39
- * - z >= maxZ: multiplier = 0.5 (fine meshes at high zoom, maximum precision)
40
- * - z <= minZ: multiplier = 3.0 (coarse meshes at low zoom, maximum performance)
41
- * - Otherwise: linear interpolation between 3.0 and 0.5
42
- */
43
- private getErrorMultiplierForZoom;
44
- /**
45
- * Calculates dynamic meshMaxError for a given zoom level and resolution.
46
- * Formula: resolution * errorMultiplier, where multiplier scales from 3.0 (low zoom) to 0.5 (high zoom).
47
- * Results are clamped to 0.5–100 meters to prevent pathological tessellation:
48
- * - Min 0.5m ensures simplification always happens (no rounding to 0 with sub-meter pixels)
49
- * - Max 100m prevents excessive simplification at low zoom with low-resolution COGs
50
- */
51
- private calculateDynamicMeshMaxError;
52
24
  /**
53
25
  * Gets the auto meshMaxError for a given overview index.
54
26
  * Returns undefined if auto lookup has not been computed.
55
27
  */
56
28
  getMeshMaxErrorForImageIndex(imageIndex: number): number | undefined;
57
- /**
58
- * Builds lookup tables for zoom levels and estimated resolutions from a Cloud Optimized GeoTIFF (COG) object.
59
- *
60
- * It is assumed that inn web mapping, COG data is visualized in the Web Mercator coordinate system.
61
- * At zoom level 0, the Web Mercator resolution is defined by the constant `webMercatorRes0`
62
- * (e.g., 156543.03125 m/pixel). At each subsequent zoom level, this resolution is halved.
63
- *
64
- * This function calculates, for each image (overview) in the COG, its estimated resolution and
65
- * corresponding zoom level based on the base image's resolution and width.
66
- *
67
- * @param {object} cog - A Cloud Optimized GeoTIFF object loaded via geotiff.js.
68
- * @returns {Promise<[number[], number[]]>} A promise resolving to a tuple of two arrays:
69
- * - The first array (`zoomLookup`) maps each image index to its computed zoom level.
70
- * - The second array (`resolutionLookup`) maps each image index to its estimated resolution (m/pixel).
71
- */
72
- buildCogZoomResolutionLookup(cog: GeoTIFF): Promise<number[][]>;
73
29
  /**
74
30
  * Computes dynamic meshMaxError values for each overview based on COG resolution and zoom level.
75
31
  * Called only for terrain COGs after buildCogZoomResolutionLookup() completes.
@@ -89,37 +45,11 @@ declare class CogTiles {
89
45
  * @returns {number} The index of the image in the COG that best matches the specified zoom level.
90
46
  */
91
47
  getImageIndexForZoomLevel(zoom: number): number;
92
- getTileFromImage(tileX: number, tileY: number, zoom: number, fetchSize?: number, signal?: AbortSignal): Promise<(Uint8Array<ArrayBuffer> | Float32Array<ArrayBuffer> | Int8Array<ArrayBuffer> | Int16Array<ArrayBuffer> | Uint16Array<ArrayBuffer> | Int32Array<ArrayBuffer> | Uint32Array<ArrayBuffer> | Float64Array<ArrayBuffer>)[] | import("geotiff").TypedArrayWithDimensions[]>;
93
- /**
94
- * Creates a blank tile buffer filled with the "No Data" value.
95
- * @param size The width/height of the square tile (e.g., 256 or 257)
96
- */
97
- createEmptyTile(size?: number): Float32Array<ArrayBuffer>;
48
+ getTileFromImage(tileX: number, tileY: number, zoom: number, fetchSize?: number, signal?: AbortSignal): Promise<TypedArray[]>;
98
49
  getTile(x: number, y: number, z: number, bounds?: Bounds, meshMaxError?: number, signal?: AbortSignal, skipTexture?: boolean): Promise<TileResult | null>;
99
- /**
100
- * Determines the data type (e.g., "Int32", "Float64") of a GeoTIFF image
101
- * by reading its TIFF tags.
102
- *
103
- * @param {GeoTIFFImage} image - A GeoTIFF.js image.
104
- * @returns {Promise<string>} - A string representing the data type.
105
- */
106
- getDataTypeFromTags(fileDirectory: any): Promise<string>;
107
- /**
108
- * Extracts the noData value from a GeoTIFF.js image.
109
- * Returns the noData value as a number (including NaN) if available, otherwise undefined.
110
- *
111
- * @param {GeoTIFFImage} image - The GeoTIFF.js image.
112
- * @returns {number|undefined} The noData value, possibly NaN, or undefined if not set or invalid.
113
- */
114
- getNoDataValue(image: GeoTIFFImage): number | undefined;
115
- /**
116
- * Creates a tile buffer of the specified size using a typed array corresponding to the provided data type.
117
- *
118
- * @param {string} dataType - A string specifying the data type (e.g., "Int32", "Float64", "UInt16", etc.).
119
- * @param {number} tileSize - The width/height of the square tile.
120
- * @param {number} multiplier - Optional multiplier for interleaved buffers (e.g., numChannels).
121
- * @returns {TypedArray} A typed array buffer of length (tileSize * tileSize * multiplier).
122
- */
123
- createTileBuffer(dataType: string, tileSize: number, multiplier?: number): Uint8Array<ArrayBuffer> | Float32Array<ArrayBuffer> | Int8Array<ArrayBuffer> | Int16Array<ArrayBuffer> | Uint16Array<ArrayBuffer> | Int32Array<ArrayBuffer> | Uint32Array<ArrayBuffer> | Float64Array<ArrayBuffer>;
50
+ private getTerrainTile;
51
+ private getGlazeTile;
52
+ private getBitmapTile;
53
+ clearTileResultCache(): void;
124
54
  }
125
55
  export default CogTiles;
@@ -0,0 +1,41 @@
1
+ import type { GeoTIFFImage } from 'geotiff';
2
+ import type { TileResult, TypedArray } from '../types';
3
+ export type TileResultCacheEntry = {
4
+ promise: Promise<TileResult | null>;
5
+ controller: AbortController;
6
+ callerCount: number;
7
+ settled: boolean;
8
+ };
9
+ export default class TileCacheManager {
10
+ private tileResultCache;
11
+ private readonly tileResultCacheMaxSize;
12
+ private rasterCache;
13
+ private readonly rasterCacheMaxSize;
14
+ private reliefMaskCache;
15
+ private readonly reliefMaskCacheMaxSize;
16
+ private imageCache;
17
+ constructor(opts?: {
18
+ tileResultCacheMaxSize?: number;
19
+ rasterCacheMaxSize?: number;
20
+ reliefMaskCacheMaxSize?: number;
21
+ });
22
+ getTileResultCacheKey(x: number, y: number, z: number, meshMaxError: number, skipTexture: boolean): string;
23
+ getTileCacheKey(x: number, y: number, z: number): string;
24
+ getTileResult(key: string): TileResultCacheEntry | undefined;
25
+ setTileResult(key: string, entry: TileResultCacheEntry): void;
26
+ deleteTileResult(key: string): boolean;
27
+ clearTileResultCache(): void;
28
+ getRaster(key: string): Promise<TypedArray[]> | undefined;
29
+ setRaster(key: string, p: Promise<TypedArray[]>): void;
30
+ deleteRaster(key: string): boolean;
31
+ clearRasterCache(): void;
32
+ getReliefMask(key: string): Promise<Uint8ClampedArray> | undefined;
33
+ setReliefMask(key: string, p: Promise<Uint8ClampedArray>): void;
34
+ deleteReliefMask(key: string): boolean;
35
+ clearReliefMaskCache(): void;
36
+ getImage(index: number): Promise<GeoTIFFImage> | undefined;
37
+ setImage(index: number, p: Promise<GeoTIFFImage>): void;
38
+ deleteImage(index: number): boolean;
39
+ clearImageCache(): void;
40
+ clearAll(): void;
41
+ }
@@ -0,0 +1,11 @@
1
+ import type { TypedArray, GeoImageOptions } from '../types';
2
+ export default class TileReader {
3
+ private options;
4
+ private tileSize;
5
+ constructor(params: {
6
+ options: GeoImageOptions;
7
+ tileSize: number;
8
+ });
9
+ createEmptyTile(size?: number): Float32Array<ArrayBuffer>;
10
+ createTileBuffer(dataType: string, tileSize: number, multiplier?: number): TypedArray;
11
+ }
@@ -0,0 +1,8 @@
1
+ export declare const EARTH_CIRCUMFERENCE: number;
2
+ export declare const EARTH_HALF_CIRCUMFERENCE: number;
3
+ export declare const webMercatorOrigin: number[];
4
+ export declare const webMercatorRes0 = 156543.03125;
5
+ export declare function getLatLon(input: number[]): [number, number];
6
+ export declare function getZoomLevelFromResolution(tileSize: number, resolution: number): number;
7
+ export declare function calculateZoomRange(tileSize: number, resolution: number, imgCount: number): [number, number];
8
+ export declare function calculateBoundsAsLatLon(bbox: number[]): [number, number, number, number];
@@ -0,0 +1,8 @@
1
+ import type { GeoTIFF } from 'geotiff';
2
+ /**
3
+ * LOD (level-of-detail) helpers extracted from CogTiles.
4
+ */
5
+ export declare function getErrorMultiplierForZoom(z: number, minZ: number, maxZ: number): number;
6
+ export declare function calculateDynamicMeshMaxError(z: number, resolution: number, minZ: number, maxZ: number): number;
7
+ export declare function buildCogZoomResolutionLookup(cog: GeoTIFF): Promise<[number[], number[]]>;
8
+ export declare function getImageIndexForZoomLevel(zoom: number, cogZoomLookup: number[]): number;
@@ -0,0 +1,11 @@
1
+ import type { GeoTIFFImage } from 'geotiff';
2
+ /**
3
+ * Reads TIFF tags to determine the numeric data type (e.g. "UInt8", "Int16", "Float32").
4
+ * The implementation mirrors the logic previously present in CogTiles.
5
+ */
6
+ export declare function getDataTypeFromTags(fileDirectory: any): Promise<string>;
7
+ /**
8
+ * Extracts the noData value from a GeoTIFF.js image.
9
+ * Returns the numeric value, NaN, or undefined if not present/parsable.
10
+ */
11
+ export declare function getNoDataValue(image: GeoTIFFImage): number | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gisatcz/deckgl-geolib",
3
- "version": "2.5.0",
3
+ "version": "2.5.1-dev.1",
4
4
  "description": "Deck.gl extension for rendering Cloud-Optimized GeoTIFF (COG) data",
5
5
  "keywords": [
6
6
  "deck.gl",