@cogeotiff/core 8.1.1 → 9.0.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 (67) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +45 -7
  3. package/build/__benchmark__/cog.read.benchmark.js +5 -5
  4. package/build/__benchmark__/cog.read.benchmark.js.map +1 -1
  5. package/build/__benchmark__/source.file.js +1 -1
  6. package/build/__benchmark__/source.file.js.map +1 -1
  7. package/build/__test__/cog.image.test.js +14 -9
  8. package/build/__test__/cog.image.test.js.map +1 -1
  9. package/build/__test__/cog.read.test.js +33 -17
  10. package/build/__test__/cog.read.test.js.map +1 -1
  11. package/build/__test__/example.js +2 -2
  12. package/build/__test__/example.js.map +1 -1
  13. package/build/const/index.d.ts +1 -1
  14. package/build/const/index.js +1 -1
  15. package/build/const/index.js.map +1 -1
  16. package/build/const/tiff.mime.d.ts +11 -5
  17. package/build/const/tiff.mime.js +27 -14
  18. package/build/const/tiff.mime.js.map +1 -1
  19. package/build/const/tiff.tag.id.d.ts +603 -41
  20. package/build/const/tiff.tag.id.js +479 -50
  21. package/build/const/tiff.tag.id.js.map +1 -1
  22. package/build/const/tiff.tag.value.js +1 -1
  23. package/build/const/tiff.tag.value.js.map +1 -1
  24. package/build/index.d.ts +6 -5
  25. package/build/index.js +6 -4
  26. package/build/index.js.map +1 -1
  27. package/build/read/tiff.gdal.d.ts +1 -1
  28. package/build/read/tiff.gdal.js +1 -1
  29. package/build/read/tiff.gdal.js.map +1 -1
  30. package/build/read/tiff.ifd.config.js +1 -1
  31. package/build/read/tiff.ifd.config.js.map +1 -1
  32. package/build/read/tiff.tag.d.ts +3 -0
  33. package/build/read/tiff.tag.factory.d.ts +5 -5
  34. package/build/read/tiff.tag.factory.js +22 -13
  35. package/build/read/tiff.tag.factory.js.map +1 -1
  36. package/build/read/tiff.value.reader.d.ts +1 -1
  37. package/build/read/tiff.value.reader.js.map +1 -1
  38. package/build/{cog.tiff.d.ts → tiff.d.ts} +12 -10
  39. package/build/{cog.tiff.image.d.ts → tiff.image.d.ts} +69 -27
  40. package/build/{cog.tiff.image.js → tiff.image.js} +125 -82
  41. package/build/tiff.image.js.map +1 -0
  42. package/build/{cog.tiff.js → tiff.js} +17 -10
  43. package/build/tiff.js.map +1 -0
  44. package/build/util/bytes.d.ts +4 -2
  45. package/build/util/bytes.js +5 -2
  46. package/build/util/bytes.js.map +1 -1
  47. package/package.json +2 -2
  48. package/src/__benchmark__/cog.read.benchmark.ts +6 -5
  49. package/src/__benchmark__/source.file.ts +2 -1
  50. package/src/__test__/cog.image.test.ts +17 -9
  51. package/src/__test__/cog.read.test.ts +41 -18
  52. package/src/__test__/example.ts +3 -2
  53. package/src/const/index.ts +1 -1
  54. package/src/const/tiff.mime.ts +28 -14
  55. package/src/const/tiff.tag.id.ts +758 -131
  56. package/src/const/tiff.tag.value.ts +16 -16
  57. package/src/index.ts +20 -5
  58. package/src/read/tiff.gdal.ts +1 -1
  59. package/src/read/tiff.ifd.config.ts +1 -1
  60. package/src/read/tiff.tag.factory.ts +33 -17
  61. package/src/read/tiff.tag.ts +3 -0
  62. package/src/read/tiff.value.reader.ts +1 -1
  63. package/src/{cog.tiff.image.ts → tiff.image.ts} +137 -92
  64. package/src/{cog.tiff.ts → tiff.ts} +18 -16
  65. package/src/util/bytes.ts +5 -1
  66. package/build/cog.tiff.image.js.map +0 -1
  67. package/build/cog.tiff.js.map +0 -1
@@ -1,7 +1,7 @@
1
- import { getUint } from './util/bytes.js';
2
- import { TiffCompression, TiffMimeType } from './const/tiff.mime.js';
3
- import { TiffTag, TiffTagGeo } from './const/tiff.tag.id.js';
1
+ import { getCompressionMimeType, TiffCompressionMimeType, TiffMimeType } from './const/tiff.mime.js';
2
+ import { Compression, SubFileType, TiffTag, TiffTagGeo } from './const/tiff.tag.id.js';
4
3
  import { fetchAllOffsets, fetchLazy, getValueAt } from './read/tiff.tag.factory.js';
4
+ import { getUint } from './util/bytes.js';
5
5
  /** Invalid EPSG code */
6
6
  export const InvalidProjectionCode = 32767;
7
7
  /** Tags that are commonly accessed for geotiffs */
@@ -19,15 +19,8 @@ export const ImportantTags = new Set([
19
19
  TiffTag.GeoDoubleParams,
20
20
  TiffTag.TileOffsets,
21
21
  ]);
22
- export class CogTiffImage {
22
+ export class TiffImage {
23
23
  constructor(tiff, id, tags) {
24
- /** All IFD tags that have been read for the image */
25
- Object.defineProperty(this, "tags", {
26
- enumerable: true,
27
- configurable: true,
28
- writable: true,
29
- value: void 0
30
- });
31
24
  /**
32
25
  * Id of the tif image, generally the image index inside the tif
33
26
  * where 0 is the root image, and every sub image is +1
@@ -61,6 +54,13 @@ export class CogTiffImage {
61
54
  writable: true,
62
55
  value: new Map()
63
56
  });
57
+ /** All IFD tags that have been read for the image */
58
+ Object.defineProperty(this, "tags", {
59
+ enumerable: true,
60
+ configurable: true,
61
+ writable: true,
62
+ value: void 0
63
+ });
64
64
  this.tiff = tiff;
65
65
  this.id = id;
66
66
  this.tags = tags;
@@ -91,9 +91,12 @@ export class CogTiffImage {
91
91
  await this.loadGeoTiffTags();
92
92
  }
93
93
  /**
94
- * Get the value of a TiffTag if it has been loaded, null otherwise
94
+ * Get the value of a TiffTag if it has been loaded, null otherwise.
95
+ *
96
+ * If the value is not loaded use {@link TiffImage.fetch} to load the value
97
+ * Or use {@link TiffImage.has} to check if the tag exists
98
+ *
95
99
  *
96
- * if the value is not loaded @see {CogTiffImage.fetch}
97
100
  * @returns value if loaded, null otherwise
98
101
  */
99
102
  value(tag) {
@@ -102,8 +105,77 @@ export class CogTiffImage {
102
105
  return null;
103
106
  if (sourceTag.type === 'offset' && sourceTag.isLoaded === false)
104
107
  return null;
108
+ // TODO would be good to type check this
105
109
  return sourceTag.value;
106
110
  }
111
+ /**
112
+ * Does the tag exist
113
+ *
114
+ * @example
115
+ * ```typescript
116
+ * img.has(TiffTag.ImageWidth) // true
117
+ * ```
118
+ *
119
+ * @param tag Tag to check
120
+ * @returns true if the tag exists, false otherwise
121
+ */
122
+ has(tag) {
123
+ return this.tags.has(tag);
124
+ }
125
+ /**
126
+ * Load a tag.
127
+ *
128
+ * If it is not currently loaded, fetch the required data for the tag.
129
+ *
130
+ * @example
131
+ * ```typescript
132
+ * await img.fetch(TiffTag.ImageWidth) // 512 (px)
133
+ * ```
134
+ *
135
+ * @param tag tag to fetch
136
+ */
137
+ async fetch(tag) {
138
+ const sourceTag = this.tags.get(tag);
139
+ if (sourceTag == null)
140
+ return null;
141
+ if (sourceTag.type === 'inline')
142
+ return sourceTag.value;
143
+ if (sourceTag.type === 'lazy')
144
+ return fetchLazy(sourceTag, this.tiff);
145
+ if (sourceTag.isLoaded)
146
+ return sourceTag.value;
147
+ if (sourceTag.type === 'offset')
148
+ return fetchAllOffsets(this.tiff, sourceTag);
149
+ throw new Error('Cannot fetch:' + tag);
150
+ }
151
+ /**
152
+ * Get the associated TiffTagGeo
153
+ *
154
+ * @example
155
+ * ```typescript
156
+ * image.valueGeo(TiffTagGeo.GTRasterTypeGeoKey)
157
+ * ```
158
+ * @throws if {@link loadGeoTiffTags} has not been called
159
+ */
160
+ valueGeo(tag) {
161
+ if (this.isGeoTagsLoaded === false)
162
+ throw new Error('loadGeoTiffTags() has not been called');
163
+ return this.tagsGeo.get(tag);
164
+ }
165
+ /**
166
+ * Load and parse the GDAL_NODATA Tifftag
167
+ *
168
+ * @throws if the tag is not loaded
169
+ * @returns null if the tag does not exist
170
+ */
171
+ get noData() {
172
+ const tag = this.tags.get(TiffTag.GdalNoData);
173
+ if (tag == null)
174
+ return null;
175
+ if (tag.value)
176
+ return Number(tag.value);
177
+ throw new Error('GdalNoData tag is not loaded');
178
+ }
107
179
  /**
108
180
  * Load and unpack the GeoKeyDirectory
109
181
  *
@@ -158,39 +230,6 @@ export class CogTiffImage {
158
230
  }
159
231
  }
160
232
  }
161
- /**
162
- * Get the associated TiffTagGeo
163
- *
164
- * @example
165
- * ```typescript
166
- * image.valueGeo(TiffTagGeo.GTRasterTypeGeoKey)
167
- * ```
168
- * @throws if {@link loadGeoTiffTags} has not been called
169
- */
170
- valueGeo(tag) {
171
- if (this.isGeoTagsLoaded === false)
172
- throw new Error('loadGeoTiffTags() has not been called');
173
- return this.tagsGeo.get(tag);
174
- }
175
- /**
176
- * Load a tag, if it is not currently loaded, fetch the required data for the tag.
177
- *
178
- * @param tag tag to fetch
179
- */
180
- async fetch(tag) {
181
- const sourceTag = this.tags.get(tag);
182
- if (sourceTag == null)
183
- return null;
184
- if (sourceTag.type === 'inline')
185
- return sourceTag.value;
186
- if (sourceTag.type === 'lazy')
187
- return fetchLazy(sourceTag, this.tiff);
188
- if (sourceTag.isLoaded)
189
- return sourceTag.value;
190
- if (sourceTag.type === 'offset')
191
- return fetchAllOffsets(this.tiff, sourceTag);
192
- throw new Error('Cannot fetch:' + tag);
193
- }
194
233
  /**
195
234
  * Get the origin point for the image
196
235
  *
@@ -206,7 +245,7 @@ export class CogTiffImage {
206
245
  return [modelTransformation[3], modelTransformation[7], modelTransformation[11]];
207
246
  }
208
247
  // If this is a sub image, use the origin from the top level image
209
- if (this.value(TiffTag.NewSubFileType) === 1 && this.id !== 0) {
248
+ if (this.value(TiffTag.SubFileType) === SubFileType.ReducedImage && this.id !== 0) {
210
249
  return this.tiff.images[0].origin;
211
250
  }
212
251
  throw new Error('Image does not have a geo transformation.');
@@ -217,7 +256,7 @@ export class CogTiffImage {
217
256
  if (isImageLocated)
218
257
  return true;
219
258
  // If this is a sub image, use the isGeoLocated from the top level image
220
- if (this.value(TiffTag.NewSubFileType) === 1 && this.id !== 0)
259
+ if (this.isSubImage && this.id !== 0)
221
260
  return this.tiff.images[0].isGeoLocated;
222
261
  return false;
223
262
  }
@@ -236,7 +275,7 @@ export class CogTiffImage {
236
275
  return [modelTransformation[0], modelTransformation[5], modelTransformation[10]];
237
276
  }
238
277
  // If this is a sub image, use the resolution from the top level image
239
- if (this.value(TiffTag.NewSubFileType) === 1 && this.id !== 0) {
278
+ if (this.isSubImage && this.id !== 0) {
240
279
  const firstImg = this.tiff.images[0];
241
280
  const [resX, resY, resZ] = firstImg.resolution;
242
281
  const firstImgSize = firstImg.size;
@@ -246,6 +285,14 @@ export class CogTiffImage {
246
285
  }
247
286
  throw new Error('Image does not have a geo transformation.');
248
287
  }
288
+ /**
289
+ * Is this image a reduced size image
290
+ * @see {@link TiffTag.SubFileType}
291
+ * @returns true if SubFileType is Reduces image, false otherwise
292
+ */
293
+ get isSubImage() {
294
+ return this.value(TiffTag.SubFileType) === SubFileType.ReducedImage;
295
+ }
249
296
  /**
250
297
  * Bounding box of the image
251
298
  *
@@ -267,23 +314,25 @@ export class CogTiffImage {
267
314
  /**
268
315
  * Get the compression used by the tile
269
316
  *
270
- * @see {@link TiffCompression}
317
+ * @see {@link TiffCompressionMimeType}
271
318
  *
272
319
  * @returns Compression type eg webp
273
320
  */
274
321
  get compression() {
275
322
  const compression = this.value(TiffTag.Compression);
276
- if (compression == null || typeof compression !== 'number')
323
+ if (compression == null)
277
324
  return null;
278
- return TiffCompression[compression];
325
+ return TiffCompressionMimeType[compression];
279
326
  }
280
327
  /**
281
328
  * Attempt to read the EPSG Code from TiffGeoTags
282
329
  *
330
+ * looks at both TiffTagGeo.ProjectionGeoKey and TiffTagGeo.ProjectedCRSGeoKey
331
+ *
283
332
  * @returns EPSG Code if it exists
284
333
  */
285
334
  get epsg() {
286
- const projection = this.valueGeo(TiffTagGeo.ProjectedCSTypeGeoKey);
335
+ const projection = this.valueGeo(TiffTagGeo.ProjectionGeoKey) ?? this.valueGeo(TiffTagGeo.ProjectedCRSGeoKey);
287
336
  if (projection === InvalidProjectionCode)
288
337
  return null;
289
338
  return projection;
@@ -294,10 +343,11 @@ export class CogTiffImage {
294
343
  * @returns Size in pixels
295
344
  */
296
345
  get size() {
297
- return {
298
- width: this.value(TiffTag.ImageWidth),
299
- height: this.value(TiffTag.ImageHeight),
300
- };
346
+ const width = this.value(TiffTag.ImageWidth);
347
+ const height = this.value(TiffTag.ImageWidth);
348
+ if (width == null || height == null)
349
+ throw new Error('Tiff has no height or width');
350
+ return { width, height };
301
351
  }
302
352
  /**
303
353
  * Determine if this image is tiled
@@ -309,10 +359,11 @@ export class CogTiffImage {
309
359
  * Get size of individual tiles
310
360
  */
311
361
  get tileSize() {
312
- return {
313
- width: this.value(TiffTag.TileWidth),
314
- height: this.value(TiffTag.TileHeight),
315
- };
362
+ const width = this.value(TiffTag.TileWidth);
363
+ const height = this.value(TiffTag.TileHeight);
364
+ if (width == null || height == null)
365
+ throw new Error('Tiff is not tiled');
366
+ return { width, height };
316
367
  }
317
368
  /**
318
369
  * Number of tiles used to create this image
@@ -345,10 +396,7 @@ export class CogTiffImage {
345
396
  * @returns number of strips present
346
397
  */
347
398
  get stripCount() {
348
- const tileOffset = this.tags.get(TiffTag.StripByteCounts);
349
- if (tileOffset == null)
350
- return 0;
351
- return tileOffset.count;
399
+ return this.tags.get(TiffTag.StripByteCounts)?.count ?? 0;
352
400
  }
353
401
  // Clamp the bounds of the output image to the size of the image, as sometimes the edge tiles are not full tiles
354
402
  getTileBounds(x, y) {
@@ -383,7 +431,7 @@ export class CogTiffImage {
383
431
  getJpegHeader(bytes) {
384
432
  // Both the JPEGTable and the Bytes with have the start of image and end of image markers
385
433
  // StartOfImage 0xffd8 EndOfImage 0xffd9
386
- const tables = this.value(TiffTag.JPEGTables);
434
+ const tables = this.value(TiffTag.JpegTables);
387
435
  if (tables == null)
388
436
  throw new Error('Unable to find Jpeg header');
389
437
  // Remove EndOfImage marker
@@ -395,18 +443,19 @@ export class CogTiffImage {
395
443
  }
396
444
  /** Read image bytes at the given offset */
397
445
  async getBytes(offset, byteCount) {
398
- const mimeType = this.compression;
399
- if (mimeType == null)
400
- throw new Error('Unsupported compression: ' + this.value(TiffTag.Compression));
401
446
  if (byteCount === 0)
402
447
  return null;
403
448
  const bytes = await this.tiff.source.fetch(offset, byteCount);
404
449
  if (bytes.byteLength < byteCount) {
405
450
  throw new Error(`Failed to fetch bytes from offset:${offset} wanted:${byteCount} got:${bytes.byteLength}`);
406
451
  }
407
- if (this.compression === TiffMimeType.Jpeg)
408
- return { mimeType, bytes: this.getJpegHeader(bytes) };
409
- return { mimeType, bytes };
452
+ let compression = this.value(TiffTag.Compression);
453
+ if (compression == null)
454
+ compression = Compression.None; // No compression found default ??
455
+ const mimeType = getCompressionMimeType(compression) ?? TiffMimeType.None;
456
+ if (compression === Compression.Jpeg)
457
+ return { mimeType, bytes: this.getJpegHeader(bytes), compression };
458
+ return { mimeType, bytes, compression };
410
459
  }
411
460
  /**
412
461
  * Load a tile into a ArrayBuffer
@@ -417,13 +466,10 @@ export class CogTiffImage {
417
466
  * @param y Tile y offset
418
467
  */
419
468
  async getTile(x, y) {
420
- const mimeType = this.compression;
421
469
  const size = this.size;
422
470
  const tiles = this.tileSize;
423
471
  if (tiles == null)
424
472
  throw new Error('Tiff is not tiled');
425
- if (mimeType == null)
426
- throw new Error('Unsupported compression: ' + this.value(TiffTag.Compression));
427
473
  // TODO support GhostOptionTileOrder
428
474
  const nyTiles = Math.ceil(size.height / tiles.height);
429
475
  const nxTiles = Math.ceil(size.width / tiles.width);
@@ -473,7 +519,7 @@ export class CogTiffImage {
473
519
  const leaderBytes = this.tiff.options?.tileLeaderByteSize;
474
520
  if (leaderBytes) {
475
521
  const offset = await getOffset(this.tiff, this.tileOffset, index);
476
- // Sparse COG no data found
522
+ // Sparse tiff no data found
477
523
  if (offset === 0)
478
524
  return { offset: 0, imageSize: 0 };
479
525
  // This fetch will generally load in the bytes needed for the image too
@@ -494,11 +540,8 @@ export class CogTiffImage {
494
540
  function getOffset(tiff, x, index) {
495
541
  if (index > x.count || index < 0)
496
542
  throw new Error('TagIndex: out of bounds ' + x.id + ' @ ' + index);
497
- if (x.type === 'inline') {
498
- if (x.count > 1)
499
- return x.value[index];
500
- return x.value;
501
- }
543
+ if (x.type === 'inline')
544
+ return x.value[index];
502
545
  return getValueAt(tiff, x, index);
503
546
  }
504
- //# sourceMappingURL=cog.tiff.image.js.map
547
+ //# sourceMappingURL=tiff.image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiff.image.js","sourceRoot":"","sources":["../src/tiff.image.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,20 @@
1
- import { CogTiffImage } from './cog.tiff.image.js';
2
1
  import { TiffEndian } from './const/tiff.endian.js';
3
2
  import { TiffVersion } from './const/tiff.version.js';
4
3
  import { hasBytes } from './read/data.view.offset.js';
5
- import { CogTifGhostOptions } from './read/tiff.gdal.js';
4
+ import { TiffGhostOptions } from './read/tiff.gdal.js';
6
5
  import { TagTiffBigConfig, TagTiffConfig } from './read/tiff.ifd.config.js';
7
6
  import { createTag } from './read/tiff.tag.factory.js';
7
+ import { TiffImage } from './tiff.image.js';
8
8
  import { getUint } from './util/bytes.js';
9
9
  import { toHex } from './util/util.hex.js';
10
- export class CogTiff {
10
+ export class Tiff {
11
11
  constructor(source) {
12
12
  /** Read 16KB blocks at a time */
13
13
  Object.defineProperty(this, "defaultReadSize", {
14
14
  enumerable: true,
15
15
  configurable: true,
16
16
  writable: true,
17
- value: 16 * 1024
17
+ value: Tiff.DefaultReadSize
18
18
  });
19
19
  /** Where this cog is fetching its data from */
20
20
  Object.defineProperty(this, "source", {
@@ -73,12 +73,12 @@ export class CogTiff {
73
73
  });
74
74
  this.source = source;
75
75
  }
76
- /** Create a COG and initialize it by reading the COG headers */
76
+ /** Create a tiff and initialize it by reading the tiff headers */
77
77
  static create(source) {
78
- return new CogTiff(source).init();
78
+ return new Tiff(source).init();
79
79
  }
80
80
  /**
81
- * Initialize the COG loading in the header and all image headers
81
+ * Initialize the tiff loading in the header and all image headers
82
82
  */
83
83
  init() {
84
84
  if (this._initPromise)
@@ -146,7 +146,7 @@ export class CogTiff {
146
146
  const ghostSize = nextOffsetIfd - offset;
147
147
  // GDAL now stores metadata between the IFD inside a ghost storage area
148
148
  if (ghostSize > 0 && ghostSize < 16 * 1024) {
149
- this.options = new CogTifGhostOptions();
149
+ this.options = new TiffGhostOptions();
150
150
  this.options.process(bytes, offset, ghostSize);
151
151
  }
152
152
  while (nextOffsetIfd !== 0) {
@@ -185,10 +185,17 @@ export class CogTiff {
185
185
  const tag = createTag(this, view, startOffset + i * ifdSize);
186
186
  tags.set(tag.id, tag);
187
187
  }
188
- this.images.push(new CogTiffImage(this, this.images.length, tags));
188
+ this.images.push(new TiffImage(this, this.images.length, tags));
189
189
  return getUint(view, startOffset + tagCount * ifdSize, this.ifdConfig.pointer, this.isLittleEndian);
190
190
  }
191
191
  }
192
+ /** Read 16KB blocks at a time */
193
+ Object.defineProperty(Tiff, "DefaultReadSize", {
194
+ enumerable: true,
195
+ configurable: true,
196
+ writable: true,
197
+ value: 16 * 1024
198
+ });
192
199
  function getMaxLength(source, offset, length) {
193
200
  // max length is unknown, roll the dice and hope the chunk exists
194
201
  if (source.metadata?.size == null)
@@ -199,4 +206,4 @@ function getMaxLength(source, offset, length) {
199
206
  return size - offset;
200
207
  return length;
201
208
  }
202
- //# sourceMappingURL=cog.tiff.js.map
209
+ //# sourceMappingURL=tiff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiff.js","sourceRoot":"","sources":["../src/tiff.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
- export declare enum ByteSize {
1
+ export declare enum ByteSizeFloat {
2
2
  Double = 8,
3
- Float32 = 4,
3
+ Float32 = 4
4
+ }
5
+ export declare enum ByteSize {
4
6
  UInt64 = 8,
5
7
  UInt32 = 4,
6
8
  UInt16 = 2,
@@ -1,7 +1,10 @@
1
+ export var ByteSizeFloat;
2
+ (function (ByteSizeFloat) {
3
+ ByteSizeFloat[ByteSizeFloat["Double"] = 8] = "Double";
4
+ ByteSizeFloat[ByteSizeFloat["Float32"] = 4] = "Float32";
5
+ })(ByteSizeFloat || (ByteSizeFloat = {}));
1
6
  export var ByteSize;
2
7
  (function (ByteSize) {
3
- ByteSize[ByteSize["Double"] = 8] = "Double";
4
- ByteSize[ByteSize["Float32"] = 4] = "Float32";
5
8
  ByteSize[ByteSize["UInt64"] = 8] = "UInt64";
6
9
  ByteSize[ByteSize["UInt32"] = 4] = "UInt32";
7
10
  ByteSize[ByteSize["UInt16"] = 2] = "UInt16";
@@ -1 +1 @@
1
- {"version":3,"file":"bytes.js","sourceRoot":"","sources":["../../src/util/bytes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,QAOX;AAPD,WAAY,QAAQ;IAClB,2CAAU,CAAA;IACV,6CAAW,CAAA;IACX,2CAAU,CAAA;IACV,2CAAU,CAAA;IACV,2CAAU,CAAA;IACV,yCAAS,CAAA;AACX,CAAC,EAPW,QAAQ,KAAR,QAAQ,QAOnB;AACD,mDAAmD;AACnD,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;AACvB;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,IAAc,EAAE,MAAc,EAAE,cAAuB;IAC/E,qDAAqD;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC;IAEzD,gCAAgC;IAChC,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;IAEhF,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;QACnC,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,kDAAkD,CAAC,CAAC;KAChF;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAc,EAAE,MAAc,EAAE,EAAY,EAAE,cAAuB;IAC3F,QAAQ,EAAE,EAAE;QACV,KAAK,QAAQ,CAAC,KAAK;YACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,KAAK,QAAQ,CAAC,MAAM;YAClB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAChD,KAAK,QAAQ,CAAC,MAAM;YAClB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAChD,KAAK,QAAQ,CAAC,MAAM;YAClB,OAAO,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;KAClD;AACH,CAAC"}
1
+ {"version":3,"file":"bytes.js","sourceRoot":"","sources":["../../src/util/bytes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,qDAAU,CAAA;IACV,uDAAW,CAAA;AACb,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB;AAED,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,2CAAU,CAAA;IACV,2CAAU,CAAA;IACV,2CAAU,CAAA;IACV,yCAAS,CAAA;AACX,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB;AAED,mDAAmD;AACnD,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;AACvB;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,IAAc,EAAE,MAAc,EAAE,cAAuB;IAC/E,qDAAqD;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC;IAEzD,gCAAgC;IAChC,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;IAEhF,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,kDAAkD,CAAC,CAAC;IACjF,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAc,EAAE,MAAc,EAAE,EAAY,EAAE,cAAuB;IAC3F,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,QAAQ,CAAC,KAAK;YACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,KAAK,QAAQ,CAAC,MAAM;YAClB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAChD,KAAK,QAAQ,CAAC,MAAM;YAClB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAChD,KAAK,QAAQ,CAAC,MAAM;YAClB,OAAO,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;IACnD,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cogeotiff/core",
3
- "version": "8.1.1",
3
+ "version": "9.0.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": "b4fa67e6a7886c8fff3528ce86a6db10f4063fb2"
26
+ "gitHead": "7e83b76e5089791667a81df7c77e6d361ad1ccb8"
27
27
  }
@@ -1,7 +1,8 @@
1
1
  import { readFile } from 'fs/promises';
2
- import { CogTiff } from '../cog.tiff.js';
3
- import { SourceMemory } from './source.memory.js';
2
+
4
3
  import { TiffTag } from '../index.js';
4
+ import { Tiff } from '../tiff.js';
5
+ import { SourceMemory } from './source.memory.js';
5
6
 
6
7
  // console.log = console.trace;
7
8
  /** Read a tile from every image inside of a tiff 300 tiles read */
@@ -9,10 +10,10 @@ async function main(): Promise<void> {
9
10
  const buf = await readFile(process.argv[process.argv.length - 1]);
10
11
  const source = new SourceMemory(buf);
11
12
  for (let i = 0; i < 5_000; i++) {
12
- performance.mark('cog:init');
13
- const tiff = new CogTiff(source);
13
+ performance.mark('tiff:init');
14
+ const tiff = new Tiff(source);
14
15
  await tiff.init();
15
- performance.mark('cog:init:done');
16
+ performance.mark('tiff:init:done');
16
17
 
17
18
  // 6 images
18
19
  for (const img of tiff.images) await img.getTile(0, 0);
@@ -1,6 +1,7 @@
1
1
  import { readFile, stat } from 'node:fs/promises';
2
- import { gunzip } from 'node:zlib';
3
2
  import { promisify } from 'node:util';
3
+ import { gunzip } from 'node:zlib';
4
+
4
5
  import { Source } from '../source.js';
5
6
 
6
7
  const gunzipP = promisify(gunzip);
@@ -1,11 +1,14 @@
1
- import { promises as fs } from 'fs';
2
1
  import assert from 'node:assert';
3
2
  import { beforeEach, describe, it } from 'node:test';
3
+
4
+ import { promises as fs } from 'fs';
5
+
4
6
  import { TestFileSource } from '../__benchmark__/source.file.js';
5
7
  import { SourceMemory } from '../__benchmark__/source.memory.js';
6
- import { ByteSize } from '../util/bytes.js';
7
- import { CogTiff } from '../cog.tiff.js';
8
8
  import { TiffMimeType } from '../const/tiff.mime.js';
9
+ import { Photometric, TiffTag } from '../const/tiff.tag.id.js';
10
+ import { Tiff } from '../tiff.js';
11
+ import { ByteSize } from '../util/bytes.js';
9
12
 
10
13
  // 900913 properties.
11
14
  const A = 6378137.0;
@@ -15,9 +18,9 @@ function getResolution(zoom: number): number {
15
18
  return InitialResolution / 2 ** zoom;
16
19
  }
17
20
 
18
- describe('CogTiled', () => {
21
+ describe('TiffTiled', () => {
19
22
  const cogSourceFile = new TestFileSource(new URL('../../data/rgba8_tiled.tiff', import.meta.url));
20
- const cog = new CogTiff(cogSourceFile);
23
+ const cog = new Tiff(cogSourceFile);
21
24
 
22
25
  beforeEach(() => cog.init());
23
26
 
@@ -85,7 +88,7 @@ describe('Cog.Big', () => {
85
88
  it('should support reading from memory', async () => {
86
89
  const fullSource = new TestFileSource(new URL('../../data/sparse.tiff', import.meta.url));
87
90
 
88
- const cog = new CogTiff(fullSource);
91
+ const cog = new Tiff(fullSource);
89
92
  await cog.init();
90
93
 
91
94
  const [firstImage] = cog.images;
@@ -99,7 +102,7 @@ describe('Cog.Big', () => {
99
102
  it('should read using a memory source', async () => {
100
103
  const bytes = await fs.readFile(new URL('../../data/sparse.tiff', import.meta.url));
101
104
  const source = new SourceMemory(bytes.buffer);
102
- const cog = new CogTiff(source);
105
+ const cog = new Tiff(source);
103
106
  await cog.init();
104
107
 
105
108
  const [firstImage] = cog.images;
@@ -113,7 +116,7 @@ describe('Cog.Big', () => {
113
116
 
114
117
  describe('Cog.Sparse', () => {
115
118
  const cogSourceFile = new TestFileSource(new URL('../../data/sparse.tiff', import.meta.url));
116
- const cog = new CogTiff(cogSourceFile);
119
+ const cog = new Tiff(cogSourceFile);
117
120
 
118
121
  it('should read metadata', async () => {
119
122
  await cog.init();
@@ -131,6 +134,11 @@ describe('Cog.Sparse', () => {
131
134
  const { tileCount } = img;
132
135
  assert.deepEqual(tileCount, { x: 2, y: 2 });
133
136
 
137
+ assert.equal(img.value(TiffTag.SamplesPerPixel), 4); // 4 bands
138
+ assert.deepEqual(img.value(TiffTag.BitsPerSample), [8, 8, 8, 8]);
139
+ assert.equal(img.value(TiffTag.Photometric), Photometric.Rgb);
140
+ assert.equal(img.value(TiffTag.GdalNoData), null);
141
+
134
142
  for (let x = 0; x < tileCount.x; x++) {
135
143
  for (let y = 0; y < tileCount.y; y++) {
136
144
  const hasTile = await img.hasTile(x, y);
@@ -162,7 +170,7 @@ describe('Cog.Sparse', () => {
162
170
 
163
171
  describe('CogStrip', () => {
164
172
  const cogSourceFile = new TestFileSource(new URL('../../data/rgba8_strip.tiff', import.meta.url));
165
- const cog = new CogTiff(cogSourceFile);
173
+ const cog = new Tiff(cogSourceFile);
166
174
 
167
175
  beforeEach(() => cog.init());
168
176