@cogeotiff/core 8.0.2 → 8.1.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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## [8.1.0](https://github.com/blacha/cogeotiff/compare/core-v8.0.2...core-v8.1.0) (2023-08-23)
4
+
5
+
6
+ ### Features
7
+
8
+ * **cli:** fetch all tiff tags with --fetch-tags ([#1155](https://github.com/blacha/cogeotiff/issues/1155)) ([4067751](https://github.com/blacha/cogeotiff/commit/406775184eed18ab10ae2816ecbedea9706b20f5))
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **core:** do not read past the end of a file ([#1152](https://github.com/blacha/cogeotiff/issues/1152)) ([fd0be56](https://github.com/blacha/cogeotiff/commit/fd0be56eee6944239502cd8ffd7a6fe89e76b984))
14
+
3
15
  ## [8.0.2](https://github.com/blacha/cogeotiff/compare/core-v8.0.1...core-v8.0.2) (2023-08-05)
4
16
 
5
17
 
@@ -1,6 +1,7 @@
1
1
  import { readFile } from 'fs/promises';
2
2
  import { CogTiff } from '../cog.tiff.js';
3
3
  import { SourceMemory } from './source.memory.js';
4
+ import { TiffTag } from '../index.js';
4
5
  // console.log = console.trace;
5
6
  /** Read a tile from every image inside of a tiff 300 tiles read */
6
7
  async function main() {
@@ -14,6 +15,9 @@ async function main() {
14
15
  // 6 images
15
16
  for (const img of tiff.images)
16
17
  await img.getTile(0, 0);
18
+ // Force loading all the byte arrays in which benchmarks the bulk array loading
19
+ await tiff.images[0].fetch(TiffTag.TileByteCounts);
20
+ await tiff.images[0].fetch(TiffTag.TileOffsets);
17
21
  }
18
22
  }
19
23
  main();
@@ -1 +1 @@
1
- {"version":3,"file":"cog.read.benchmark.js","sourceRoot":"","sources":["../../src/__benchmark__/cog.read.benchmark.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,+BAA+B;AAC/B,mEAAmE;AACnE,KAAK,UAAU,IAAI;IACjB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAK,EAAE,CAAC,EAAE,EAAE;QAC9B,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAElC,WAAW;QACX,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KACxD;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"cog.read.benchmark.js","sourceRoot":"","sources":["../../src/__benchmark__/cog.read.benchmark.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,+BAA+B;AAC/B,mEAAmE;AACnE,KAAK,UAAU,IAAI;IACjB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAK,EAAE,CAAC,EAAE,EAAE;QAC9B,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAElC,WAAW;QACX,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEvD,+EAA+E;QAC/E,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACnD,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;KACjD;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -1,9 +1,10 @@
1
1
  import assert from 'node:assert';
2
2
  import { describe, it } from 'node:test';
3
+ import { TestFileSource } from '../__benchmark__/source.file.js';
3
4
  import { CogTiff } from '../cog.tiff.js';
4
5
  import { TiffMimeType } from '../const/tiff.mime.js';
5
- import { TestFileSource } from '../__benchmark__/source.file.js';
6
6
  import { TiffVersion } from '../const/tiff.version.js';
7
+ import { TiffTag, TiffTagGeo } from '../index.js';
7
8
  function validate(tif) {
8
9
  assert.equal(tif.images.length, 5);
9
10
  const [firstTif] = tif.images;
@@ -50,5 +51,18 @@ describe('CogRead', () => {
50
51
  await tiff.init();
51
52
  assert.equal(tiff.images.length, 5);
52
53
  });
54
+ it('should read ifds from anywhere in the file', async () => {
55
+ const source = new TestFileSource(new URL('../../data/DEM_BS28_2016_1000_1141.tif', import.meta.url));
56
+ const tiff = await CogTiff.create(source);
57
+ assert.equal(tiff.images.length, 1);
58
+ const im = tiff.images[0];
59
+ assert.equal(im.isGeoTagsLoaded, true);
60
+ assert.equal(im.epsg, 2193);
61
+ assert.equal(im.compression, TiffMimeType.None);
62
+ assert.equal(im.isTiled(), false);
63
+ assert.equal(im.tagsGeo.get(TiffTagGeo.GTCitationGeoKey), 'NZGD2000 / New Zealand Transverse Mercator 2000');
64
+ assert.equal(im.tagsGeo.get(TiffTagGeo.GeogCitationGeoKey), 'NZGD2000');
65
+ assert.deepEqual(await im.fetch(TiffTag.StripByteCounts), [8064, 8064, 8064, 8064, 8064, 8064, 8064, 5040]);
66
+ });
53
67
  });
54
68
  //# sourceMappingURL=cog.read.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cog.read.test.js","sourceRoot":"","sources":["../../src/__test__/cog.read.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cog.read.test.js","sourceRoot":"","sources":["../../src/__test__/cog.read.test.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { TiffMimeType } from './const/tiff.mime.js';
3
3
  import { TiffTag, TiffTagGeo } from './const/tiff.tag.id.js';
4
4
  import { Tag, TagOffset } from './read/tiff.tag.js';
5
5
  import { BoundingBox, Size } from './vector.js';
6
+ /** Invalid EPSG code */
6
7
  export declare const InvalidProjectionCode = 32767;
7
8
  /**
8
9
  * Number of tiles used inside this image
@@ -27,8 +28,14 @@ export interface CogTiffImageTileSize {
27
28
  export declare class CogTiffImage {
28
29
  /** All IFD tags that have been read for the image */
29
30
  tags: Map<TiffTag, Tag>;
30
- /** Id of the tif image, generally the image index inside the tif */
31
+ /**
32
+ * Id of the tif image, generally the image index inside the tif
33
+ * where 0 is the root image, and every sub image is +1
34
+ *
35
+ * @example 0, 1, 2
36
+ */
31
37
  id: number;
38
+ /** Reference to the TIFF that owns this image */
32
39
  tiff: CogTiff;
33
40
  /** Has loadGeoTiffTags been called */
34
41
  isGeoTagsLoaded: boolean;
@@ -42,19 +49,31 @@ export declare class CogTiffImage {
42
49
  */
43
50
  init(loadGeoTags?: boolean): Promise<void>;
44
51
  /**
45
- * Get the value of a TiffTag if it exists null otherwise
52
+ * Get the value of a TiffTag if it has been loaded, null otherwise
53
+ *
54
+ * if the value is not loaded @see {CogTiffImage.fetch}
55
+ * @returns value if loaded, null otherwise
46
56
  */
47
57
  value<T>(tag: TiffTag): T | null;
48
58
  /**
49
59
  * Load and unpack the GeoKeyDirectory
60
+ *
61
+ * @see {TiffTag.GeoKeyDirectory}
50
62
  */
51
63
  loadGeoTiffTags(): Promise<void>;
52
64
  /**
53
- * Get the associated GeoTiffTags
65
+ * Get the associated TiffTagGeo
66
+ *
67
+ * @example
68
+ * ```typescript
69
+ * image.valueGeo(TiffTagGeo.GTRasterTypeGeoKey)
70
+ * ```
71
+ * @throws if {@link loadGeoTiffTags} has not been called
54
72
  */
55
73
  valueGeo(tag: TiffTagGeo): string | number | undefined;
56
74
  /**
57
75
  * Load a tag, if it is not currently loaded, fetch the required data for the tag.
76
+ *
58
77
  * @param tag tag to fetch
59
78
  */
60
79
  fetch<T>(tag: TiffTag): Promise<T | null>;
@@ -81,7 +100,7 @@ export declare class CogTiffImage {
81
100
  /**
82
101
  * Get the compression used by the tile
83
102
  *
84
- * @see TiffCompression
103
+ * @see {@link TiffCompression}
85
104
  *
86
105
  * @returns Compression type eg webp
87
106
  */
@@ -128,7 +147,9 @@ export declare class CogTiffImage {
128
147
  get stripCount(): number;
129
148
  getTileBounds(x: number, y: number): BoundingBox;
130
149
  /**
131
- * Read a strip into a uint8 array
150
+ * Read a strip into a ArrayBuffer
151
+ *
152
+ * Image has to be striped see {@link stripCount}
132
153
  *
133
154
  * @param index Strip index to read
134
155
  */
@@ -141,9 +162,9 @@ export declare class CogTiffImage {
141
162
  /** Read image bytes at the given offset */
142
163
  private getBytes;
143
164
  /**
144
- * Load the tile buffer, this works best with webp
165
+ * Load a tile into a ArrayBuffer
145
166
  *
146
- * This will also apply the JPEG compression tables
167
+ * if the tile compression is JPEG, This will also apply the JPEG compression tables to the resulting ArrayBuffer see {@link getJpegHeader}
147
168
  *
148
169
  * @param x Tile x offset
149
170
  * @param y Tile y offset
@@ -155,13 +176,20 @@ export declare class CogTiffImage {
155
176
  /**
156
177
  * Does this tile exist in the tiff and does it actually have a value
157
178
  *
158
- * Sparse tiffs can have a lot of empty tiles, this checks to see if the tile actually has data.
179
+ * Sparse tiffs can have a lot of empty tiles, they set the tile size to `0 bytes` when the tile is empty
180
+ * this checks the tile byte size to validate if it actually has any data.
159
181
  *
160
182
  * @param x Tile x offset
161
183
  * @param y Tile y offset
184
+ *
162
185
  * @returns if the tile exists and has data
163
186
  */
164
187
  hasTile(x: number, y: number): Promise<boolean>;
188
+ /**
189
+ * Load the offset and byteCount of a tile
190
+ * @param index index in the tile array
191
+ * @returns Offset and byteCount for the tile
192
+ */
165
193
  getTileSize(index: number): Promise<{
166
194
  offset: number;
167
195
  imageSize: number;
@@ -1,8 +1,8 @@
1
1
  import { getUint } from './util/bytes.js';
2
2
  import { TiffCompression, TiffMimeType } from './const/tiff.mime.js';
3
3
  import { TiffTag, TiffTagGeo } from './const/tiff.tag.id.js';
4
- import { fetchLazy, getValueAt } from './read/tiff.tag.factory.js';
5
- // /** Invalid EPSG code */
4
+ import { fetchAllOffsets, fetchLazy, getValueAt } from './read/tiff.tag.factory.js';
5
+ /** Invalid EPSG code */
6
6
  export const InvalidProjectionCode = 32767;
7
7
  /** Tags that are commonly accessed for geotiffs */
8
8
  export const ImportantTags = new Set([
@@ -28,13 +28,19 @@ export class CogTiffImage {
28
28
  writable: true,
29
29
  value: void 0
30
30
  });
31
- /** Id of the tif image, generally the image index inside the tif */
31
+ /**
32
+ * Id of the tif image, generally the image index inside the tif
33
+ * where 0 is the root image, and every sub image is +1
34
+ *
35
+ * @example 0, 1, 2
36
+ */
32
37
  Object.defineProperty(this, "id", {
33
38
  enumerable: true,
34
39
  configurable: true,
35
40
  writable: true,
36
41
  value: void 0
37
42
  });
43
+ /** Reference to the TIFF that owns this image */
38
44
  Object.defineProperty(this, "tiff", {
39
45
  enumerable: true,
40
46
  configurable: true,
@@ -85,7 +91,10 @@ export class CogTiffImage {
85
91
  await this.loadGeoTiffTags();
86
92
  }
87
93
  /**
88
- * Get the value of a TiffTag if it exists null otherwise
94
+ * Get the value of a TiffTag if it has been loaded, null otherwise
95
+ *
96
+ * if the value is not loaded @see {CogTiffImage.fetch}
97
+ * @returns value if loaded, null otherwise
89
98
  */
90
99
  value(tag) {
91
100
  const sourceTag = this.tags.get(tag);
@@ -97,6 +106,8 @@ export class CogTiffImage {
97
106
  }
98
107
  /**
99
108
  * Load and unpack the GeoKeyDirectory
109
+ *
110
+ * @see {TiffTag.GeoKeyDirectory}
100
111
  */
101
112
  async loadGeoTiffTags() {
102
113
  // Already loaded
@@ -123,26 +134,32 @@ export class CogTiffImage {
123
134
  throw new Error('Invalid geo tags found');
124
135
  for (let i = 4; i <= geoTags[3] * 4; i += 4) {
125
136
  const key = geoTags[i];
126
- const location = geoTags[i + 1];
137
+ const locationTagId = geoTags[i + 1];
127
138
  const offset = geoTags[i + 3];
128
- if (location === 0) {
139
+ if (locationTagId === 0) {
129
140
  this.tagsGeo.set(key, offset);
130
141
  continue;
131
142
  }
132
- const tag = this.tags.get(location);
143
+ const tag = this.tags.get(locationTagId);
133
144
  if (tag == null || tag.value == null)
134
145
  continue;
135
146
  const count = geoTags[i + 2];
136
- if (Array.isArray(tag.value)) {
137
- this.tagsGeo.set(key, tag.value[offset + count - 1]);
138
- }
139
- else if (typeof tag.value === 'string') {
147
+ if (typeof tag.value === 'string') {
140
148
  this.tagsGeo.set(key, tag.value.slice(offset, offset + count - 1).trim());
141
149
  }
150
+ else {
151
+ throw new Error('Failed to extract GeoTiffTags');
152
+ }
142
153
  }
143
154
  }
144
155
  /**
145
- * Get the associated GeoTiffTags
156
+ * Get the associated TiffTagGeo
157
+ *
158
+ * @example
159
+ * ```typescript
160
+ * image.valueGeo(TiffTagGeo.GTRasterTypeGeoKey)
161
+ * ```
162
+ * @throws if {@link loadGeoTiffTags} has not been called
146
163
  */
147
164
  valueGeo(tag) {
148
165
  if (this.isGeoTagsLoaded === false)
@@ -151,6 +168,7 @@ export class CogTiffImage {
151
168
  }
152
169
  /**
153
170
  * Load a tag, if it is not currently loaded, fetch the required data for the tag.
171
+ *
154
172
  * @param tag tag to fetch
155
173
  */
156
174
  async fetch(tag) {
@@ -163,6 +181,8 @@ export class CogTiffImage {
163
181
  return fetchLazy(sourceTag, this.tiff);
164
182
  if (sourceTag.isLoaded)
165
183
  return sourceTag.value;
184
+ if (sourceTag.type === 'offset')
185
+ return fetchAllOffsets(this.tiff, sourceTag);
166
186
  throw new Error('Cannot fetch:' + tag);
167
187
  }
168
188
  /**
@@ -241,7 +261,7 @@ export class CogTiffImage {
241
261
  /**
242
262
  * Get the compression used by the tile
243
263
  *
244
- * @see TiffCompression
264
+ * @see {@link TiffCompression}
245
265
  *
246
266
  * @returns Compression type eg webp
247
267
  */
@@ -334,7 +354,9 @@ export class CogTiffImage {
334
354
  return { x: left, y: top, width, height };
335
355
  }
336
356
  /**
337
- * Read a strip into a uint8 array
357
+ * Read a strip into a ArrayBuffer
358
+ *
359
+ * Image has to be striped see {@link stripCount}
338
360
  *
339
361
  * @param index Strip index to read
340
362
  */
@@ -381,9 +403,9 @@ export class CogTiffImage {
381
403
  return { mimeType, bytes };
382
404
  }
383
405
  /**
384
- * Load the tile buffer, this works best with webp
406
+ * Load a tile into a ArrayBuffer
385
407
  *
386
- * This will also apply the JPEG compression tables
408
+ * if the tile compression is JPEG, This will also apply the JPEG compression tables to the resulting ArrayBuffer see {@link getJpegHeader}
387
409
  *
388
410
  * @param x Tile x offset
389
411
  * @param y Tile y offset
@@ -407,16 +429,17 @@ export class CogTiffImage {
407
429
  if (idx >= totalTiles)
408
430
  throw new Error(`Tile index is outside of tile range: ${idx} >= ${totalTiles}`);
409
431
  const { offset, imageSize } = await this.getTileSize(idx);
410
- // console.log({ x, y, offset, imageSize });
411
432
  return this.getBytes(offset, imageSize);
412
433
  }
413
434
  /**
414
435
  * Does this tile exist in the tiff and does it actually have a value
415
436
  *
416
- * Sparse tiffs can have a lot of empty tiles, this checks to see if the tile actually has data.
437
+ * Sparse tiffs can have a lot of empty tiles, they set the tile size to `0 bytes` when the tile is empty
438
+ * this checks the tile byte size to validate if it actually has any data.
417
439
  *
418
440
  * @param x Tile x offset
419
441
  * @param y Tile y offset
442
+ *
420
443
  * @returns if the tile exists and has data
421
444
  */
422
445
  async hasTile(x, y) {
@@ -433,6 +456,11 @@ export class CogTiffImage {
433
456
  const ret = await this.getTileSize(idx);
434
457
  return ret.offset > 0;
435
458
  }
459
+ /**
460
+ * Load the offset and byteCount of a tile
461
+ * @param index index in the tile array
462
+ * @returns Offset and byteCount for the tile
463
+ */
436
464
  async getTileSize(index) {
437
465
  // GDAL optimizes tiles by storing the size of the tile in
438
466
  // the few bytes leading up to the tile
@@ -461,7 +489,7 @@ function getOffset(tiff, x, index) {
461
489
  if (index > x.count || index < 0)
462
490
  throw new Error('TagIndex: out of bounds ' + x.id + ' @ ' + index);
463
491
  if (x.type === 'inline') {
464
- if (Array.isArray(x.value))
492
+ if (x.count > 1)
465
493
  return x.value[index];
466
494
  return x.value;
467
495
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cog.tiff.image.js","sourceRoot":"","sources":["../src/cog.tiff.image.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cog.tiff.image.js","sourceRoot":"","sources":["../src/cog.tiff.image.ts"],"names":[],"mappings":"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"}
package/build/cog.tiff.js CHANGED
@@ -154,7 +154,7 @@ export class CogTiff {
154
154
  // Ensure at least 1KB near at the IFD offset is ready for reading
155
155
  // TODO is 1KB enough, most IFD entries are in the order of 100-300 bytes
156
156
  if (!hasBytes(lastView, nextOffsetIfd, 1024)) {
157
- const bytes = await this.source.fetch(nextOffsetIfd, this.defaultReadSize);
157
+ const bytes = await this.source.fetch(nextOffsetIfd, getMaxLength(this.source, nextOffsetIfd, this.defaultReadSize));
158
158
  lastView = new DataView(bytes);
159
159
  lastView.sourceOffset = nextOffsetIfd;
160
160
  }
@@ -189,4 +189,14 @@ export class CogTiff {
189
189
  return getUint(view, startOffset + tagCount * ifdSize, this.ifdConfig.pointer, this.isLittleEndian);
190
190
  }
191
191
  }
192
+ function getMaxLength(source, offset, length) {
193
+ // max length is unknown, roll the dice and hope the chunk exists
194
+ if (source.metadata?.size == null)
195
+ return length;
196
+ const size = source.metadata.size;
197
+ // Read was going to happen past the end of the file limit it to the end of the file
198
+ if (offset + length > size)
199
+ return size - offset;
200
+ return length;
201
+ }
192
202
  //# sourceMappingURL=cog.tiff.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cog.tiff.js","sourceRoot":"","sources":["../src/cog.tiff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAkB,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAiB,MAAM,2BAA2B,CAAC;AAC3F,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,MAAM,OAAO,OAAO;IAmBlB,YAAY,MAAc;QAlB1B,iCAAiC;QACjC;;;;mBAAkB,EAAE,GAAG,IAAI;WAAC;QAC5B,+CAA+C;QAC/C;;;;;WAAe;QACf,wBAAwB;QACxB;;;;mBAAU,WAAW,CAAC,IAAI;WAAC;QAC3B,0CAA0C;QAC1C;;;;mBAAyB,EAAE;WAAC;QAC5B,2BAA2B;QAC3B;;;;;WAA6B;QAC7B,4CAA4C;QAC5C;;;;mBAA2B,aAAa;WAAC;QACzC,8CAA8C;QAC9C;;;;mBAAiB,KAAK;WAAC;QACvB,6BAA6B;QAC7B;;;;mBAAgB,KAAK;WAAC;QAEd;;;;;WAAgC;QAEtC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,gEAAgE;IAChE,MAAM,CAAC,MAAM,CAAC,MAAc;QAC1B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC;QAChD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACH,oBAAoB,CAAC,UAAkB;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC;QAErC,MAAM,eAAe,GAAG,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC;QACpD,wDAAwD;QACxD,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC;YAEzB,MAAM,cAAc,GAAG,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC;YACvD,qCAAqC;YACrC,2DAA2D;YAE3D,IAAI,cAAc,GAAG,UAAU,IAAI,IAAI;gBAAE,OAAO,GAAG,CAAC;SACrD;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,qEAAqE;IAC7D,KAAK,CAAC,UAAU;QACtB,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAmB,CAAC;QAC/F,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;QAEvB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5D,MAAM,IAAI,CAAC,CAAC;QAEZ,IAAI,CAAC,cAAc,GAAG,MAAM,KAAK,UAAU,CAAC,MAAM,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAC7E,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5D,MAAM,IAAI,CAAC,CAAC;QAEZ,IAAI,aAAqB,CAAC;QAC1B,IAAI,IAAI,CAAC,OAAO,KAAK,WAAW,CAAC,OAAO,EAAE;YACxC,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC;YAClC,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YACjE,MAAM,IAAI,CAAC,CAAC;YACZ,IAAI,WAAW,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;YAC5E,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YAC3D,MAAM,IAAI,CAAC,CAAC;YACZ,IAAI,KAAK,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC5D,aAAa,GAAG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YACpF,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAClC;aAAM,IAAI,IAAI,CAAC,OAAO,KAAK,WAAW,CAAC,IAAI,EAAE;YAC5C,aAAa,GAAG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YACpF,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAClC;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;SAChE;QAED,MAAM,SAAS,GAAG,aAAa,GAAG,MAAM,CAAC;QACzC,uEAAuE;QACvE,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,EAAE,GAAG,IAAI,EAAE;YAC1C,IAAI,CAAC,OAAO,GAAG,IAAI,kBAAkB,EAAE,CAAC;YACxC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;SAChD;QAED,OAAO,aAAa,KAAK,CAAC,EAAE;YAC1B,IAAI,QAAQ,GAAG,KAAK,CAAC;YAErB,kEAAkE;YAClE,yEAAyE;YACzE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE;gBAC5C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC3E,QAAQ,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAmB,CAAC;gBACjD,QAAQ,CAAC,YAAY,GAAG,aAAa,CAAC;aACvC;YACD,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;SAC7D;QAED,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,IAAoB;QACxD,MAAM,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;QAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAEvF,MAAM,IAAI,GAAsB,IAAI,GAAG,EAAE,CAAC;QAE1C,0EAA0E;QAC1E,MAAM,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE;YACrC,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SACtF;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QACnC,MAAM,WAAW,GAAG,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;YACjC,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;YAC7D,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;SACvB;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QACnE,OAAO,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,GAAG,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IACtG,CAAC;CACF"}
1
+ {"version":3,"file":"cog.tiff.js","sourceRoot":"","sources":["../src/cog.tiff.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Tiff format
3
- * The header of a tif file contains the endianness of the file
3
+ *
4
+ * The header of a Tiff file contains the endianness of the file
4
5
  */
5
6
  export declare enum TiffEndian {
6
7
  Big = 19789,
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Tiff format
3
- * The header of a tif file contains the endianness of the file
3
+ *
4
+ * The header of a Tiff file contains the endianness of the file
4
5
  */
5
6
  export var TiffEndian;
6
7
  (function (TiffEndian) {
@@ -1 +1 @@
1
- {"version":3,"file":"tiff.endian.js","sourceRoot":"","sources":["../../src/const/tiff.endian.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAN,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,6CAAY,CAAA;IACZ,mDAAe,CAAA;AACjB,CAAC,EAHW,UAAU,KAAV,UAAU,QAGrB"}
1
+ {"version":3,"file":"tiff.endian.js","sourceRoot":"","sources":["../../src/const/tiff.endian.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAN,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,6CAAY,CAAA;IACZ,mDAAe,CAAA;AACjB,CAAC,EAHW,UAAU,KAAV,UAAU,QAGrB"}
package/build/index.d.ts CHANGED
@@ -8,4 +8,4 @@ export { TagInline, TagLazy, TagOffset, Tag } from './read/tiff.tag.js';
8
8
  export { getTiffTagSize } from './read/tiff.value.reader.js';
9
9
  export { Source } from './source.js';
10
10
  export { toHex } from './util/util.hex.js';
11
- export { BoundingBox, Point, Size, Vector } from './vector.js';
11
+ export type { BoundingBox, Point, Size, Vector } from './vector.js';
@@ -15,17 +15,17 @@ export declare enum GhostOptionTileLeader {
15
15
  uint32 = "SIZE_AS_UINT4"
16
16
  }
17
17
  /**
18
- * GDAL has made a ghost set of options for Tif files
19
- * this class represents the optimizations that can be used
18
+ * GDAL has made a ghost set of options for Tiff files
19
+ * this class represents the optimizations that GDAL has applied
20
20
  */
21
21
  export declare class CogTifGhostOptions {
22
22
  options: Map<string, string>;
23
23
  /**
24
- * Has GDAL optimized this tif
24
+ * Has GDAL optimized this tiff
25
25
  */
26
26
  get isCogOptimized(): boolean;
27
27
  /**
28
- * Has GDAL determined this tif is now broken
28
+ * Has GDAL determined this tiff is now broken
29
29
  */
30
30
  get isBroken(): boolean;
31
31
  /**
@@ -18,8 +18,8 @@ export var GhostOptionTileLeader;
18
18
  GhostOptionTileLeader["uint32"] = "SIZE_AS_UINT4";
19
19
  })(GhostOptionTileLeader || (GhostOptionTileLeader = {}));
20
20
  /**
21
- * GDAL has made a ghost set of options for Tif files
22
- * this class represents the optimizations that can be used
21
+ * GDAL has made a ghost set of options for Tiff files
22
+ * this class represents the optimizations that GDAL has applied
23
23
  */
24
24
  export class CogTifGhostOptions {
25
25
  constructor() {
@@ -31,7 +31,7 @@ export class CogTifGhostOptions {
31
31
  });
32
32
  }
33
33
  /**
34
- * Has GDAL optimized this tif
34
+ * Has GDAL optimized this tiff
35
35
  */
36
36
  get isCogOptimized() {
37
37
  if (this.isBroken)
@@ -39,7 +39,7 @@ export class CogTifGhostOptions {
39
39
  return this.options.get(GhostOption.Layout) === 'IFDS_BEFORE_DATA';
40
40
  }
41
41
  /**
42
- * Has GDAL determined this tif is now broken
42
+ * Has GDAL determined this tiff is now broken
43
43
  */
44
44
  get isBroken() {
45
45
  return this.options.get(GhostOption.KnownIncompatibleEdition) === 'YES';
@@ -29,11 +29,11 @@ export interface TagInline<T> extends TagBase {
29
29
  /** Tiff tag that is a list of offsets this can be partially read */
30
30
  export interface TagOffset extends TagBase {
31
31
  type: 'offset';
32
- /** Values of the offest's this is a sparse array unless @see {isLoaded} is true */
32
+ /** Values of the offsets this is a sparse array unless @see {TagOffset.isLoaded} is true */
33
33
  value: number[];
34
34
  /** has all the values been read */
35
- isLoaded?: boolean;
36
- /** Raw buffer of the values for lazy decoding, Reading 1000s of uint64s can take quite a while */
35
+ isLoaded: boolean;
36
+ /** Raw buffer of the values for lazy decoding, as reading 100,000s of uint64s can take quite a long time */
37
37
  view?: DataViewOffset;
38
38
  /** Where in the file the value is read from */
39
39
  dataOffset: number;
@@ -4,13 +4,19 @@ import { Tag, TagLazy, TagOffset } from './tiff.tag.js';
4
4
  /**
5
5
  * Determine if all the data for the tiff tag is loaded in and use that to create the specific CogTiffTag
6
6
  *
7
- * @see {Tag}
7
+ * @see {@link Tag}
8
8
  *
9
9
  * @param tiff
10
10
  * @param view Bytes to read from
11
11
  * @param offset Offset in the dataview to read a tag
12
12
  */
13
13
  export declare function createTag(tiff: CogTiff, view: DataViewOffset, offset: number): Tag<unknown>;
14
+ /** Fetch the value from a {@link TagLazy} tag */
14
15
  export declare function fetchLazy<T>(tag: TagLazy<T>, tiff: CogTiff): Promise<T>;
16
+ /**
17
+ * Fetch all the values from a {@link TagOffset}
18
+ */
19
+ export declare function fetchAllOffsets(tiff: CogTiff, tag: TagOffset): Promise<number[]>;
15
20
  export declare function setBytes(tag: TagOffset, view: DataViewOffset): void;
21
+ /** Partially fetch the values of a {@link TagOffset} and return the value for the offset */
16
22
  export declare function getValueAt(tiff: CogTiff, tag: TagOffset, index: number): Promise<number>;
@@ -26,6 +26,8 @@ function readTagValue(fieldType, bytes, offset, isLittleEndian) {
26
26
  return [bytes.getInt32(offset, isLittleEndian), bytes.getInt32(offset + 4, isLittleEndian)];
27
27
  case TiffTagValueType.Float64:
28
28
  return bytes.getFloat64(offset, isLittleEndian);
29
+ case TiffTagValueType.Float32:
30
+ return bytes.getFloat32(offset, isLittleEndian);
29
31
  case TiffTagValueType.Uint64:
30
32
  return getUint64(bytes, offset, isLittleEndian);
31
33
  default:
@@ -39,7 +41,7 @@ function readValue(tiff, bytes, offset, type, count) {
39
41
  return readTagValue(type, bytes, offset, tiff.isLittleEndian);
40
42
  switch (type) {
41
43
  case TiffTagValueType.Ascii:
42
- return String.fromCharCode.apply(null, new Uint8Array(bytes.buffer.slice(bytes.byteOffset + offset, bytes.byteOffset + offset + dataLength - 1)));
44
+ return String.fromCharCode.apply(null, new Uint8Array(bytes.buffer, offset, dataLength - 1));
43
45
  }
44
46
  const output = [];
45
47
  for (let i = 0; i < dataLength; i += typeSize) {
@@ -50,7 +52,7 @@ function readValue(tiff, bytes, offset, type, count) {
50
52
  /**
51
53
  * Determine if all the data for the tiff tag is loaded in and use that to create the specific CogTiffTag
52
54
  *
53
- * @see {Tag}
55
+ * @see {@link Tag}
54
56
  *
55
57
  * @param tiff
56
58
  * @param view Bytes to read from
@@ -79,6 +81,7 @@ export function createTag(tiff, view, offset) {
79
81
  count: dataCount,
80
82
  dataType,
81
83
  dataOffset,
84
+ isLoaded: false,
82
85
  value: [],
83
86
  tagOffset: offset,
84
87
  };
@@ -94,6 +97,7 @@ export function createTag(tiff, view, offset) {
94
97
  }
95
98
  return { type: 'lazy', id: tagId, count: dataCount, dataOffset, dataType, tagOffset: offset };
96
99
  }
100
+ /** Fetch the value from a {@link TagLazy} tag */
97
101
  export async function fetchLazy(tag, tiff) {
98
102
  if (tag.value != null)
99
103
  return tag.value;
@@ -104,12 +108,27 @@ export async function fetchLazy(tag, tiff) {
104
108
  tag.value = readValue(tiff, view, 0, tag.dataType, tag.count);
105
109
  return tag.value;
106
110
  }
111
+ /**
112
+ * Fetch all the values from a {@link TagOffset}
113
+ */
114
+ export async function fetchAllOffsets(tiff, tag) {
115
+ const dataTypeSize = getTiffTagSize(tag.dataType);
116
+ if (tag.view == null) {
117
+ const bytes = await tiff.source.fetch(tag.dataOffset, dataTypeSize * tag.count);
118
+ tag.view = new DataView(bytes);
119
+ tag.view.sourceOffset = tag.dataOffset;
120
+ }
121
+ tag.value = readValue(tiff, tag.view, 0, tag.dataType, tag.count);
122
+ tag.isLoaded = true;
123
+ return tag.value;
124
+ }
107
125
  export function setBytes(tag, view) {
108
126
  const dataTypeSize = getTiffTagSize(tag.dataType);
109
127
  const startBytes = view.byteOffset + tag.dataOffset - view.sourceOffset;
110
128
  tag.view = new DataView(view.buffer.slice(startBytes, startBytes + dataTypeSize * tag.count));
111
129
  tag.view.sourceOffset = tag.dataOffset;
112
130
  }
131
+ /** Partially fetch the values of a {@link TagOffset} and return the value for the offset */
113
132
  export async function getValueAt(tiff, tag, index) {
114
133
  if (index > tag.count || index < 0)
115
134
  throw new Error('TagOffset: out of bounds :' + index);
@@ -1 +1 @@
1
- {"version":3,"file":"tiff.tag.factory.js","sourceRoot":"","sources":["../../src/read/tiff.tag.factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tiff.tag.factory.js","sourceRoot":"","sources":["../../src/read/tiff.tag.factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAkB,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,SAAS,YAAY,CACnB,SAA2B,EAC3B,KAAe,EACf,MAAc,EACd,cAAuB;IAEvB,QAAQ,SAAS,EAAE;QACjB,KAAK,gBAAgB,CAAC,KAAK;YACzB,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAErD,KAAK,gBAAgB,CAAC,SAAS,CAAC;QAChC,KAAK,gBAAgB,CAAC,KAAK;YACzB,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEhC,KAAK,gBAAgB,CAAC,IAAI;YACxB,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE/B,KAAK,gBAAgB,CAAC,MAAM;YAC1B,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAEjD,KAAK,gBAAgB,CAAC,KAAK;YACzB,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAEhD,KAAK,gBAAgB,CAAC,MAAM;YAC1B,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAEjD,KAAK,gBAAgB,CAAC,KAAK;YACzB,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAEhD,KAAK,gBAAgB,CAAC,QAAQ;YAC5B,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;QAEhG,KAAK,gBAAgB,CAAC,cAAc;YAClC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;QAE9F,KAAK,gBAAgB,CAAC,OAAO;YAC3B,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAElD,KAAK,gBAAgB,CAAC,OAAO;YAC3B,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAElD,KAAK,gBAAgB,CAAC,MAAM;YAC1B,OAAO,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;QAClD;YACE,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,MAAM,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;KACxF;AACH,CAAC;AAED,SAAS,SAAS,CAAI,IAAa,EAAE,KAAe,EAAE,MAAc,EAAE,IAAsB,EAAE,KAAa;IACzG,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,KAAK,GAAG,QAAQ,CAAC;IAEpC,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,CAAiB,CAAC;IAE/F,QAAQ,IAAI,EAAE;QACZ,KAAK,gBAAgB,CAAC,KAAK;YACzB,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,CAC9B,IAAI,EACJ,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,CAAwB,CAC5D,CAAC;KACrB;IAED,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,IAAI,QAAQ,EAAE;QAC7C,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;KACzE;IAED,OAAO,MAAsB,CAAC;AAChC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CAAC,IAAa,EAAE,IAAoB,EAAE,MAAc;IAC3E,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IAE9D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,cAAc,CAAqB,CAAC;IACrF,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IACzF,MAAM,YAAY,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC;IAE5C,qCAAqC;IACrC,IAAI,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;QACxC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC9F,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;KAC5F;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IACnH,QAAQ,KAAK,EAAE;QACb,KAAK,OAAO,CAAC,WAAW,CAAC;QACzB,KAAK,OAAO,CAAC,cAAc,CAAC;QAC5B,KAAK,OAAO,CAAC,eAAe,CAAC;QAC7B,KAAK,OAAO,CAAC,YAAY;YACvB,MAAM,GAAG,GAAc;gBACrB,IAAI,EAAE,QAAQ;gBACd,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,SAAS;gBAChB,QAAQ;gBACR,UAAU;gBACV,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,EAAE;gBACT,SAAS,EAAE,MAAM;aAClB,CAAC;YACF,4HAA4H;YAC5H,IAAI,KAAK,KAAK,OAAO,CAAC,WAAW,IAAI,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC;gBAAE,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACjG,OAAO,GAAG,CAAC;KACd;IAED,wDAAwD;IACxD,IAAI,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE;QAC1C,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QACzF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;KAC5F;IAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AAChG,CAAC;AAED,iDAAiD;AACjD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAI,GAAe,EAAE,IAAa;IAC/D,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC;IACxC,MAAM,YAAY,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjC,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9D,OAAO,GAAG,CAAC,KAAU,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAa,EAAE,GAAc;IACjE,MAAM,YAAY,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAElD,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE;QACpB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;QAChF,GAAG,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAmB,CAAC;QACjD,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,UAAU,CAAC;KACxC;IAED,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAa,CAAC;IAC9E,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;IACpB,OAAO,GAAG,CAAC,KAAK,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAc,EAAE,IAAoB;IAC3D,MAAM,YAAY,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC;IACxE,GAAG,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,CAAmB,CAAC;IAChH,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,UAAU,CAAC;AACzC,CAAC;AAED,4FAA4F;AAC5F,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAa,EAAE,GAAc,EAAE,KAAa;IAC3E,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,KAAK,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,KAAK,CAAC,CAAC;IAC1F,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,YAAY,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAElD,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE;QACpB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,KAAK,GAAG,YAAY,EAAE,YAAY,CAAC,CAAC;QAC3F,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAW,CAAC;QAClE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QACzB,OAAO,KAAK,CAAC;KACd;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,YAAY,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAW,CAAC;IACzF,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IACzB,OAAO,KAAK,CAAC;AACf,CAAC"}
package/build/source.d.ts CHANGED
@@ -1,5 +1,17 @@
1
+ /**
2
+ * This is a partial re-implementation of @chunkd/source
3
+ * this is defined here so that @cogeotiff/core does not have any external dependencies
4
+ */
1
5
  export interface Source {
6
+ /** Where the source is located */
2
7
  url: URL;
8
+ /** Optional metadata about the source including the size in bytes of the file */
9
+ metadata?: {
10
+ /** Number of bytes in the file if known */
11
+ size?: number;
12
+ };
3
13
  /** Fetch bytes from a source */
4
14
  fetch(offset: number, length?: number): Promise<ArrayBuffer>;
15
+ /** Optionally close the source, useful for sources that have open connections of file descriptors */
16
+ close?(): Promise<void>;
5
17
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cogeotiff/core",
3
- "version": "8.0.2",
3
+ "version": "8.1.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/blacha/cogeotiff.git",
@@ -23,5 +23,5 @@
23
23
  "publishConfig": {
24
24
  "access": "public"
25
25
  },
26
- "gitHead": "5a80734a67c05c2e3b99e7f3124a51049c19cf85"
26
+ "gitHead": "c19acc74a71f376ce52fea5270a247b723219baf"
27
27
  }
@@ -1,6 +1,7 @@
1
1
  import { readFile } from 'fs/promises';
2
2
  import { CogTiff } from '../cog.tiff.js';
3
3
  import { SourceMemory } from './source.memory.js';
4
+ import { TiffTag } from '../index.js';
4
5
 
5
6
  // console.log = console.trace;
6
7
  /** Read a tile from every image inside of a tiff 300 tiles read */
@@ -15,6 +16,10 @@ async function main(): Promise<void> {
15
16
 
16
17
  // 6 images
17
18
  for (const img of tiff.images) await img.getTile(0, 0);
19
+
20
+ // Force loading all the byte arrays in which benchmarks the bulk array loading
21
+ await tiff.images[0].fetch(TiffTag.TileByteCounts);
22
+ await tiff.images[0].fetch(TiffTag.TileOffsets);
18
23
  }
19
24
  }
20
25
 
@@ -1,9 +1,10 @@
1
1
  import assert from 'node:assert';
2
2
  import { describe, it } from 'node:test';
3
+ import { TestFileSource } from '../__benchmark__/source.file.js';
3
4
  import { CogTiff } from '../cog.tiff.js';
4
5
  import { TiffMimeType } from '../const/tiff.mime.js';
5
- import { TestFileSource } from '../__benchmark__/source.file.js';
6
6
  import { TiffVersion } from '../const/tiff.version.js';
7
+ import { TiffTag, TiffTagGeo } from '../index.js';
7
8
 
8
9
  function validate(tif: CogTiff): void {
9
10
  assert.equal(tif.images.length, 5);
@@ -65,4 +66,20 @@ describe('CogRead', () => {
65
66
  await tiff.init();
66
67
  assert.equal(tiff.images.length, 5);
67
68
  });
69
+
70
+ it('should read ifds from anywhere in the file', async () => {
71
+ const source = new TestFileSource(new URL('../../data/DEM_BS28_2016_1000_1141.tif', import.meta.url));
72
+ const tiff = await CogTiff.create(source);
73
+
74
+ assert.equal(tiff.images.length, 1);
75
+ const im = tiff.images[0];
76
+
77
+ assert.equal(im.isGeoTagsLoaded, true);
78
+ assert.equal(im.epsg, 2193);
79
+ assert.equal(im.compression, TiffMimeType.None);
80
+ assert.equal(im.isTiled(), false);
81
+ assert.equal(im.tagsGeo.get(TiffTagGeo.GTCitationGeoKey), 'NZGD2000 / New Zealand Transverse Mercator 2000');
82
+ assert.equal(im.tagsGeo.get(TiffTagGeo.GeogCitationGeoKey), 'NZGD2000');
83
+ assert.deepEqual(await im.fetch(TiffTag.StripByteCounts), [8064, 8064, 8064, 8064, 8064, 8064, 8064, 5040]);
84
+ });
68
85
  });
@@ -4,9 +4,9 @@ import { TiffCompression, TiffMimeType } from './const/tiff.mime.js';
4
4
  import { TiffTag, TiffTagGeo } from './const/tiff.tag.id.js';
5
5
  import { Tag, TagInline, TagOffset } from './read/tiff.tag.js';
6
6
  import { BoundingBox, Size } from './vector.js';
7
- import { fetchLazy, getValueAt } from './read/tiff.tag.factory.js';
7
+ import { fetchAllOffsets, fetchLazy, getValueAt } from './read/tiff.tag.factory.js';
8
8
 
9
- // /** Invalid EPSG code */
9
+ /** Invalid EPSG code */
10
10
  export const InvalidProjectionCode = 32767;
11
11
 
12
12
  /**
@@ -48,12 +48,15 @@ export interface CogTiffImageTileSize {
48
48
  export class CogTiffImage {
49
49
  /** All IFD tags that have been read for the image */
50
50
  tags: Map<TiffTag, Tag>;
51
-
52
- /** Id of the tif image, generally the image index inside the tif */
51
+ /**
52
+ * Id of the tif image, generally the image index inside the tif
53
+ * where 0 is the root image, and every sub image is +1
54
+ *
55
+ * @example 0, 1, 2
56
+ */
53
57
  id: number;
54
-
58
+ /** Reference to the TIFF that owns this image */
55
59
  tiff: CogTiff;
56
-
57
60
  /** Has loadGeoTiffTags been called */
58
61
  isGeoTagsLoaded = false;
59
62
  /** Sub tags stored in TiffTag.GeoKeyDirectory */
@@ -93,7 +96,10 @@ export class CogTiffImage {
93
96
  }
94
97
 
95
98
  /**
96
- * Get the value of a TiffTag if it exists null otherwise
99
+ * Get the value of a TiffTag if it has been loaded, null otherwise
100
+ *
101
+ * if the value is not loaded @see {CogTiffImage.fetch}
102
+ * @returns value if loaded, null otherwise
97
103
  */
98
104
  value<T>(tag: TiffTag): T | null {
99
105
  const sourceTag = this.tags.get(tag);
@@ -104,6 +110,8 @@ export class CogTiffImage {
104
110
 
105
111
  /**
106
112
  * Load and unpack the GeoKeyDirectory
113
+ *
114
+ * @see {TiffTag.GeoKeyDirectory}
107
115
  */
108
116
  async loadGeoTiffTags(): Promise<void> {
109
117
  // Already loaded
@@ -127,27 +135,34 @@ export class CogTiffImage {
127
135
  if (typeof geoTags === 'number') throw new Error('Invalid geo tags found');
128
136
  for (let i = 4; i <= geoTags[3] * 4; i += 4) {
129
137
  const key = geoTags[i] as TiffTagGeo;
130
- const location = geoTags[i + 1];
138
+ const locationTagId = geoTags[i + 1];
131
139
 
132
140
  const offset = geoTags[i + 3];
133
141
 
134
- if (location === 0) {
142
+ if (locationTagId === 0) {
135
143
  this.tagsGeo.set(key, offset);
136
144
  continue;
137
145
  }
138
- const tag = this.tags.get(location);
146
+
147
+ const tag = this.tags.get(locationTagId);
139
148
  if (tag == null || tag.value == null) continue;
140
149
  const count = geoTags[i + 2];
141
- if (Array.isArray(tag.value)) {
142
- this.tagsGeo.set(key, tag.value[offset + count - 1]);
143
- } else if (typeof tag.value === 'string') {
150
+ if (typeof tag.value === 'string') {
144
151
  this.tagsGeo.set(key, tag.value.slice(offset, offset + count - 1).trim());
152
+ } else {
153
+ throw new Error('Failed to extract GeoTiffTags');
145
154
  }
146
155
  }
147
156
  }
148
157
 
149
158
  /**
150
- * Get the associated GeoTiffTags
159
+ * Get the associated TiffTagGeo
160
+ *
161
+ * @example
162
+ * ```typescript
163
+ * image.valueGeo(TiffTagGeo.GTRasterTypeGeoKey)
164
+ * ```
165
+ * @throws if {@link loadGeoTiffTags} has not been called
151
166
  */
152
167
  valueGeo(tag: TiffTagGeo): string | number | undefined {
153
168
  if (this.isGeoTagsLoaded === false) throw new Error('loadGeoTiffTags() has not been called');
@@ -156,14 +171,16 @@ export class CogTiffImage {
156
171
 
157
172
  /**
158
173
  * Load a tag, if it is not currently loaded, fetch the required data for the tag.
174
+ *
159
175
  * @param tag tag to fetch
160
176
  */
161
177
  public async fetch<T>(tag: TiffTag): Promise<T | null> {
162
178
  const sourceTag = this.tags.get(tag);
163
179
  if (sourceTag == null) return null;
164
180
  if (sourceTag.type === 'inline') return sourceTag.value as unknown as T;
165
- if (sourceTag.type === 'lazy') return fetchLazy(sourceTag, this.tiff) as unknown as T;
181
+ if (sourceTag.type === 'lazy') return fetchLazy(sourceTag, this.tiff) as T;
166
182
  if (sourceTag.isLoaded) return sourceTag.value as unknown as T;
183
+ if (sourceTag.type === 'offset') return fetchAllOffsets(this.tiff, sourceTag) as T;
167
184
  throw new Error('Cannot fetch:' + tag);
168
185
  }
169
186
 
@@ -255,7 +272,7 @@ export class CogTiffImage {
255
272
  /**
256
273
  * Get the compression used by the tile
257
274
  *
258
- * @see TiffCompression
275
+ * @see {@link TiffCompression}
259
276
  *
260
277
  * @returns Compression type eg webp
261
278
  */
@@ -353,7 +370,9 @@ export class CogTiffImage {
353
370
  }
354
371
 
355
372
  /**
356
- * Read a strip into a uint8 array
373
+ * Read a strip into a ArrayBuffer
374
+ *
375
+ * Image has to be striped see {@link stripCount}
357
376
  *
358
377
  * @param index Strip index to read
359
378
  */
@@ -405,9 +424,9 @@ export class CogTiffImage {
405
424
  }
406
425
 
407
426
  /**
408
- * Load the tile buffer, this works best with webp
427
+ * Load a tile into a ArrayBuffer
409
428
  *
410
- * This will also apply the JPEG compression tables
429
+ * if the tile compression is JPEG, This will also apply the JPEG compression tables to the resulting ArrayBuffer see {@link getJpegHeader}
411
430
  *
412
431
  * @param x Tile x offset
413
432
  * @param y Tile y offset
@@ -433,7 +452,6 @@ export class CogTiffImage {
433
452
  if (idx >= totalTiles) throw new Error(`Tile index is outside of tile range: ${idx} >= ${totalTiles}`);
434
453
 
435
454
  const { offset, imageSize } = await this.getTileSize(idx);
436
- // console.log({ x, y, offset, imageSize });
437
455
 
438
456
  return this.getBytes(offset, imageSize);
439
457
  }
@@ -441,10 +459,12 @@ export class CogTiffImage {
441
459
  /**
442
460
  * Does this tile exist in the tiff and does it actually have a value
443
461
  *
444
- * Sparse tiffs can have a lot of empty tiles, this checks to see if the tile actually has data.
462
+ * Sparse tiffs can have a lot of empty tiles, they set the tile size to `0 bytes` when the tile is empty
463
+ * this checks the tile byte size to validate if it actually has any data.
445
464
  *
446
465
  * @param x Tile x offset
447
466
  * @param y Tile y offset
467
+ *
448
468
  * @returns if the tile exists and has data
449
469
  */
450
470
  async hasTile(x: number, y: number): Promise<boolean> {
@@ -462,6 +482,11 @@ export class CogTiffImage {
462
482
  return ret.offset > 0;
463
483
  }
464
484
 
485
+ /**
486
+ * Load the offset and byteCount of a tile
487
+ * @param index index in the tile array
488
+ * @returns Offset and byteCount for the tile
489
+ */
465
490
  async getTileSize(index: number): Promise<{ offset: number; imageSize: number }> {
466
491
  // GDAL optimizes tiles by storing the size of the tile in
467
492
  // the few bytes leading up to the tile
@@ -494,7 +519,7 @@ function getOffset(
494
519
  ): number | Promise<number> {
495
520
  if (index > x.count || index < 0) throw new Error('TagIndex: out of bounds ' + x.id + ' @ ' + index);
496
521
  if (x.type === 'inline') {
497
- if (Array.isArray(x.value)) return x.value[index] as number;
522
+ if (x.count > 1) return (x.value as number[])[index] as number;
498
523
  return x.value as number;
499
524
  }
500
525
  return getValueAt(tiff, x, index);
package/src/cog.tiff.ts CHANGED
@@ -119,7 +119,10 @@ export class CogTiff {
119
119
  // Ensure at least 1KB near at the IFD offset is ready for reading
120
120
  // TODO is 1KB enough, most IFD entries are in the order of 100-300 bytes
121
121
  if (!hasBytes(lastView, nextOffsetIfd, 1024)) {
122
- const bytes = await this.source.fetch(nextOffsetIfd, this.defaultReadSize);
122
+ const bytes = await this.source.fetch(
123
+ nextOffsetIfd,
124
+ getMaxLength(this.source, nextOffsetIfd, this.defaultReadSize),
125
+ );
123
126
  lastView = new DataView(bytes) as DataViewOffset;
124
127
  lastView.sourceOffset = nextOffsetIfd;
125
128
  }
@@ -160,3 +163,13 @@ export class CogTiff {
160
163
  return getUint(view, startOffset + tagCount * ifdSize, this.ifdConfig.pointer, this.isLittleEndian);
161
164
  }
162
165
  }
166
+
167
+ function getMaxLength(source: Source, offset: number, length: number): number {
168
+ // max length is unknown, roll the dice and hope the chunk exists
169
+ if (source.metadata?.size == null) return length;
170
+ const size = source.metadata.size;
171
+
172
+ // Read was going to happen past the end of the file limit it to the end of the file
173
+ if (offset + length > size) return size - offset;
174
+ return length;
175
+ }
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Tiff format
3
- * The header of a tif file contains the endianness of the file
3
+ *
4
+ * The header of a Tiff file contains the endianness of the file
4
5
  */
5
6
  export enum TiffEndian {
6
7
  Big = 0x4d4d,
package/src/index.ts CHANGED
@@ -8,4 +8,4 @@ export { TagInline, TagLazy, TagOffset, Tag } from './read/tiff.tag.js';
8
8
  export { getTiffTagSize } from './read/tiff.value.reader.js';
9
9
  export { Source } from './source.js';
10
10
  export { toHex } from './util/util.hex.js';
11
- export { BoundingBox, Point, Size, Vector } from './vector.js';
11
+ export type { BoundingBox, Point, Size, Vector } from './vector.js';
@@ -19,14 +19,14 @@ export enum GhostOptionTileLeader {
19
19
  }
20
20
 
21
21
  /**
22
- * GDAL has made a ghost set of options for Tif files
23
- * this class represents the optimizations that can be used
22
+ * GDAL has made a ghost set of options for Tiff files
23
+ * this class represents the optimizations that GDAL has applied
24
24
  */
25
25
  export class CogTifGhostOptions {
26
26
  options: Map<string, string> = new Map();
27
27
 
28
28
  /**
29
- * Has GDAL optimized this tif
29
+ * Has GDAL optimized this tiff
30
30
  */
31
31
  get isCogOptimized(): boolean {
32
32
  if (this.isBroken) return false;
@@ -34,7 +34,7 @@ export class CogTifGhostOptions {
34
34
  }
35
35
 
36
36
  /**
37
- * Has GDAL determined this tif is now broken
37
+ * Has GDAL determined this tiff is now broken
38
38
  */
39
39
  get isBroken(): boolean {
40
40
  return this.options.get(GhostOption.KnownIncompatibleEdition) === 'YES';
@@ -44,6 +44,9 @@ function readTagValue(
44
44
  case TiffTagValueType.Float64:
45
45
  return bytes.getFloat64(offset, isLittleEndian);
46
46
 
47
+ case TiffTagValueType.Float32:
48
+ return bytes.getFloat32(offset, isLittleEndian);
49
+
47
50
  case TiffTagValueType.Uint64:
48
51
  return getUint64(bytes, offset, isLittleEndian);
49
52
  default:
@@ -51,7 +54,7 @@ function readTagValue(
51
54
  }
52
55
  }
53
56
 
54
- function readValue<T>(tiff: CogTiff, bytes: DataView, offset: number, type: number, count: number): T {
57
+ function readValue<T>(tiff: CogTiff, bytes: DataView, offset: number, type: TiffTagValueType, count: number): T {
55
58
  const typeSize = getTiffTagSize(type);
56
59
  const dataLength = count * typeSize;
57
60
 
@@ -61,9 +64,7 @@ function readValue<T>(tiff: CogTiff, bytes: DataView, offset: number, type: numb
61
64
  case TiffTagValueType.Ascii:
62
65
  return String.fromCharCode.apply(
63
66
  null,
64
- new Uint8Array(
65
- bytes.buffer.slice(bytes.byteOffset + offset, bytes.byteOffset + offset + dataLength - 1),
66
- ) as unknown as number[],
67
+ new Uint8Array(bytes.buffer, offset, dataLength - 1) as unknown as number[],
67
68
  ) as unknown as T;
68
69
  }
69
70
 
@@ -78,7 +79,7 @@ function readValue<T>(tiff: CogTiff, bytes: DataView, offset: number, type: numb
78
79
  /**
79
80
  * Determine if all the data for the tiff tag is loaded in and use that to create the specific CogTiffTag
80
81
  *
81
- * @see {Tag}
82
+ * @see {@link Tag}
82
83
  *
83
84
  * @param tiff
84
85
  * @param view Bytes to read from
@@ -110,6 +111,7 @@ export function createTag(tiff: CogTiff, view: DataViewOffset, offset: number):
110
111
  count: dataCount,
111
112
  dataType,
112
113
  dataOffset,
114
+ isLoaded: false,
113
115
  value: [],
114
116
  tagOffset: offset,
115
117
  };
@@ -127,6 +129,7 @@ export function createTag(tiff: CogTiff, view: DataViewOffset, offset: number):
127
129
  return { type: 'lazy', id: tagId, count: dataCount, dataOffset, dataType, tagOffset: offset };
128
130
  }
129
131
 
132
+ /** Fetch the value from a {@link TagLazy} tag */
130
133
  export async function fetchLazy<T>(tag: TagLazy<T>, tiff: CogTiff): Promise<T> {
131
134
  if (tag.value != null) return tag.value;
132
135
  const dataTypeSize = getTiffTagSize(tag.dataType);
@@ -137,6 +140,23 @@ export async function fetchLazy<T>(tag: TagLazy<T>, tiff: CogTiff): Promise<T> {
137
140
  return tag.value as T;
138
141
  }
139
142
 
143
+ /**
144
+ * Fetch all the values from a {@link TagOffset}
145
+ */
146
+ export async function fetchAllOffsets(tiff: CogTiff, tag: TagOffset): Promise<number[]> {
147
+ const dataTypeSize = getTiffTagSize(tag.dataType);
148
+
149
+ if (tag.view == null) {
150
+ const bytes = await tiff.source.fetch(tag.dataOffset, dataTypeSize * tag.count);
151
+ tag.view = new DataView(bytes) as DataViewOffset;
152
+ tag.view.sourceOffset = tag.dataOffset;
153
+ }
154
+
155
+ tag.value = readValue(tiff, tag.view, 0, tag.dataType, tag.count) as number[];
156
+ tag.isLoaded = true;
157
+ return tag.value;
158
+ }
159
+
140
160
  export function setBytes(tag: TagOffset, view: DataViewOffset): void {
141
161
  const dataTypeSize = getTiffTagSize(tag.dataType);
142
162
  const startBytes = view.byteOffset + tag.dataOffset - view.sourceOffset;
@@ -144,6 +164,7 @@ export function setBytes(tag: TagOffset, view: DataViewOffset): void {
144
164
  tag.view.sourceOffset = tag.dataOffset;
145
165
  }
146
166
 
167
+ /** Partially fetch the values of a {@link TagOffset} and return the value for the offset */
147
168
  export async function getValueAt(tiff: CogTiff, tag: TagOffset, index: number): Promise<number> {
148
169
  if (index > tag.count || index < 0) throw new Error('TagOffset: out of bounds :' + index);
149
170
  if (tag.value[index] != null) return tag.value[index];
@@ -34,11 +34,11 @@ export interface TagInline<T> extends TagBase {
34
34
  /** Tiff tag that is a list of offsets this can be partially read */
35
35
  export interface TagOffset extends TagBase {
36
36
  type: 'offset';
37
- /** Values of the offest's this is a sparse array unless @see {isLoaded} is true */
37
+ /** Values of the offsets this is a sparse array unless @see {TagOffset.isLoaded} is true */
38
38
  value: number[];
39
39
  /** has all the values been read */
40
- isLoaded?: boolean;
41
- /** Raw buffer of the values for lazy decoding, Reading 1000s of uint64s can take quite a while */
40
+ isLoaded: boolean;
41
+ /** Raw buffer of the values for lazy decoding, as reading 100,000s of uint64s can take quite a long time */
42
42
  view?: DataViewOffset;
43
43
  /** Where in the file the value is read from */
44
44
  dataOffset: number;
package/src/source.ts CHANGED
@@ -1,5 +1,20 @@
1
+ /**
2
+ * This is a partial re-implementation of @chunkd/source
3
+ * this is defined here so that @cogeotiff/core does not have any external dependencies
4
+ */
1
5
  export interface Source {
6
+ /** Where the source is located */
2
7
  url: URL;
8
+
9
+ /** Optional metadata about the source including the size in bytes of the file */
10
+ metadata?: {
11
+ /** Number of bytes in the file if known */
12
+ size?: number;
13
+ };
14
+
3
15
  /** Fetch bytes from a source */
4
16
  fetch(offset: number, length?: number): Promise<ArrayBuffer>;
17
+
18
+ /** Optionally close the source, useful for sources that have open connections of file descriptors */
19
+ close?(): Promise<void>;
5
20
  }