@cogeotiff/core 8.1.0 → 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.
- package/CHANGELOG.md +32 -0
- package/README.md +45 -7
- package/build/__benchmark__/cog.read.benchmark.js +5 -5
- package/build/__benchmark__/cog.read.benchmark.js.map +1 -1
- package/build/__benchmark__/source.file.js +9 -2
- package/build/__benchmark__/source.file.js.map +1 -1
- package/build/__test__/cog.image.test.js +14 -9
- package/build/__test__/cog.image.test.js.map +1 -1
- package/build/__test__/cog.read.test.js +50 -8
- package/build/__test__/cog.read.test.js.map +1 -1
- package/build/__test__/example.js +2 -2
- package/build/__test__/example.js.map +1 -1
- package/build/const/index.d.ts +1 -1
- package/build/const/index.js +1 -1
- package/build/const/index.js.map +1 -1
- package/build/const/tiff.mime.d.ts +11 -5
- package/build/const/tiff.mime.js +27 -14
- package/build/const/tiff.mime.js.map +1 -1
- package/build/const/tiff.tag.id.d.ts +603 -41
- package/build/const/tiff.tag.id.js +479 -50
- package/build/const/tiff.tag.id.js.map +1 -1
- package/build/const/tiff.tag.value.js +1 -1
- package/build/const/tiff.tag.value.js.map +1 -1
- package/build/index.d.ts +6 -4
- package/build/index.js +6 -3
- package/build/index.js.map +1 -1
- package/build/read/tiff.gdal.d.ts +1 -1
- package/build/read/tiff.gdal.js +1 -1
- package/build/read/tiff.gdal.js.map +1 -1
- package/build/read/tiff.ifd.config.js +1 -1
- package/build/read/tiff.ifd.config.js.map +1 -1
- package/build/read/tiff.tag.d.ts +3 -0
- package/build/read/tiff.tag.factory.d.ts +5 -5
- package/build/read/tiff.tag.factory.js +22 -13
- package/build/read/tiff.tag.factory.js.map +1 -1
- package/build/read/tiff.value.reader.d.ts +1 -1
- package/build/read/tiff.value.reader.js.map +1 -1
- package/build/{cog.tiff.d.ts → tiff.d.ts} +12 -10
- package/build/{cog.tiff.image.d.ts → tiff.image.d.ts} +69 -27
- package/build/{cog.tiff.image.js → tiff.image.js} +131 -82
- package/build/tiff.image.js.map +1 -0
- package/build/{cog.tiff.js → tiff.js} +17 -10
- package/build/tiff.js.map +1 -0
- package/build/util/bytes.d.ts +4 -2
- package/build/util/bytes.js +5 -2
- package/build/util/bytes.js.map +1 -1
- package/package.json +2 -2
- package/src/__benchmark__/cog.read.benchmark.ts +6 -5
- package/src/__benchmark__/source.file.ts +10 -2
- package/src/__test__/cog.image.test.ts +17 -9
- package/src/__test__/cog.read.test.ts +65 -9
- package/src/__test__/example.ts +3 -2
- package/src/const/index.ts +1 -1
- package/src/const/tiff.mime.ts +28 -14
- package/src/const/tiff.tag.id.ts +758 -131
- package/src/const/tiff.tag.value.ts +16 -16
- package/src/index.ts +20 -4
- package/src/read/tiff.gdal.ts +1 -1
- package/src/read/tiff.ifd.config.ts +1 -1
- package/src/read/tiff.tag.factory.ts +33 -17
- package/src/read/tiff.tag.ts +3 -0
- package/src/read/tiff.value.reader.ts +1 -1
- package/src/{cog.tiff.image.ts → tiff.image.ts} +140 -91
- package/src/{cog.tiff.ts → tiff.ts} +18 -16
- package/src/util/bytes.ts +5 -1
- package/build/cog.tiff.image.js.map +0 -1
- package/build/cog.tiff.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
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
|
|
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
|
*
|
|
@@ -147,44 +219,17 @@ export class CogTiffImage {
|
|
|
147
219
|
if (typeof tag.value === 'string') {
|
|
148
220
|
this.tagsGeo.set(key, tag.value.slice(offset, offset + count - 1).trim());
|
|
149
221
|
}
|
|
222
|
+
else if (Array.isArray(tag.value)) {
|
|
223
|
+
if (count === 1)
|
|
224
|
+
this.tagsGeo.set(key, tag.value[offset]);
|
|
225
|
+
else
|
|
226
|
+
this.tagsGeo.set(key, tag.value.slice(offset, offset + count));
|
|
227
|
+
}
|
|
150
228
|
else {
|
|
151
229
|
throw new Error('Failed to extract GeoTiffTags');
|
|
152
230
|
}
|
|
153
231
|
}
|
|
154
232
|
}
|
|
155
|
-
/**
|
|
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
|
|
163
|
-
*/
|
|
164
|
-
valueGeo(tag) {
|
|
165
|
-
if (this.isGeoTagsLoaded === false)
|
|
166
|
-
throw new Error('loadGeoTiffTags() has not been called');
|
|
167
|
-
return this.tagsGeo.get(tag);
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Load a tag, if it is not currently loaded, fetch the required data for the tag.
|
|
171
|
-
*
|
|
172
|
-
* @param tag tag to fetch
|
|
173
|
-
*/
|
|
174
|
-
async fetch(tag) {
|
|
175
|
-
const sourceTag = this.tags.get(tag);
|
|
176
|
-
if (sourceTag == null)
|
|
177
|
-
return null;
|
|
178
|
-
if (sourceTag.type === 'inline')
|
|
179
|
-
return sourceTag.value;
|
|
180
|
-
if (sourceTag.type === 'lazy')
|
|
181
|
-
return fetchLazy(sourceTag, this.tiff);
|
|
182
|
-
if (sourceTag.isLoaded)
|
|
183
|
-
return sourceTag.value;
|
|
184
|
-
if (sourceTag.type === 'offset')
|
|
185
|
-
return fetchAllOffsets(this.tiff, sourceTag);
|
|
186
|
-
throw new Error('Cannot fetch:' + tag);
|
|
187
|
-
}
|
|
188
233
|
/**
|
|
189
234
|
* Get the origin point for the image
|
|
190
235
|
*
|
|
@@ -200,7 +245,7 @@ export class CogTiffImage {
|
|
|
200
245
|
return [modelTransformation[3], modelTransformation[7], modelTransformation[11]];
|
|
201
246
|
}
|
|
202
247
|
// If this is a sub image, use the origin from the top level image
|
|
203
|
-
if (this.value(TiffTag.
|
|
248
|
+
if (this.value(TiffTag.SubFileType) === SubFileType.ReducedImage && this.id !== 0) {
|
|
204
249
|
return this.tiff.images[0].origin;
|
|
205
250
|
}
|
|
206
251
|
throw new Error('Image does not have a geo transformation.');
|
|
@@ -211,7 +256,7 @@ export class CogTiffImage {
|
|
|
211
256
|
if (isImageLocated)
|
|
212
257
|
return true;
|
|
213
258
|
// If this is a sub image, use the isGeoLocated from the top level image
|
|
214
|
-
if (this.
|
|
259
|
+
if (this.isSubImage && this.id !== 0)
|
|
215
260
|
return this.tiff.images[0].isGeoLocated;
|
|
216
261
|
return false;
|
|
217
262
|
}
|
|
@@ -230,7 +275,7 @@ export class CogTiffImage {
|
|
|
230
275
|
return [modelTransformation[0], modelTransformation[5], modelTransformation[10]];
|
|
231
276
|
}
|
|
232
277
|
// If this is a sub image, use the resolution from the top level image
|
|
233
|
-
if (this.
|
|
278
|
+
if (this.isSubImage && this.id !== 0) {
|
|
234
279
|
const firstImg = this.tiff.images[0];
|
|
235
280
|
const [resX, resY, resZ] = firstImg.resolution;
|
|
236
281
|
const firstImgSize = firstImg.size;
|
|
@@ -240,6 +285,14 @@ export class CogTiffImage {
|
|
|
240
285
|
}
|
|
241
286
|
throw new Error('Image does not have a geo transformation.');
|
|
242
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
|
+
}
|
|
243
296
|
/**
|
|
244
297
|
* Bounding box of the image
|
|
245
298
|
*
|
|
@@ -261,23 +314,25 @@ export class CogTiffImage {
|
|
|
261
314
|
/**
|
|
262
315
|
* Get the compression used by the tile
|
|
263
316
|
*
|
|
264
|
-
* @see {@link
|
|
317
|
+
* @see {@link TiffCompressionMimeType}
|
|
265
318
|
*
|
|
266
319
|
* @returns Compression type eg webp
|
|
267
320
|
*/
|
|
268
321
|
get compression() {
|
|
269
322
|
const compression = this.value(TiffTag.Compression);
|
|
270
|
-
if (compression == null
|
|
323
|
+
if (compression == null)
|
|
271
324
|
return null;
|
|
272
|
-
return
|
|
325
|
+
return TiffCompressionMimeType[compression];
|
|
273
326
|
}
|
|
274
327
|
/**
|
|
275
328
|
* Attempt to read the EPSG Code from TiffGeoTags
|
|
276
329
|
*
|
|
330
|
+
* looks at both TiffTagGeo.ProjectionGeoKey and TiffTagGeo.ProjectedCRSGeoKey
|
|
331
|
+
*
|
|
277
332
|
* @returns EPSG Code if it exists
|
|
278
333
|
*/
|
|
279
334
|
get epsg() {
|
|
280
|
-
const projection = this.valueGeo(TiffTagGeo.
|
|
335
|
+
const projection = this.valueGeo(TiffTagGeo.ProjectionGeoKey) ?? this.valueGeo(TiffTagGeo.ProjectedCRSGeoKey);
|
|
281
336
|
if (projection === InvalidProjectionCode)
|
|
282
337
|
return null;
|
|
283
338
|
return projection;
|
|
@@ -288,10 +343,11 @@ export class CogTiffImage {
|
|
|
288
343
|
* @returns Size in pixels
|
|
289
344
|
*/
|
|
290
345
|
get size() {
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
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 };
|
|
295
351
|
}
|
|
296
352
|
/**
|
|
297
353
|
* Determine if this image is tiled
|
|
@@ -303,10 +359,11 @@ export class CogTiffImage {
|
|
|
303
359
|
* Get size of individual tiles
|
|
304
360
|
*/
|
|
305
361
|
get tileSize() {
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
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 };
|
|
310
367
|
}
|
|
311
368
|
/**
|
|
312
369
|
* Number of tiles used to create this image
|
|
@@ -339,10 +396,7 @@ export class CogTiffImage {
|
|
|
339
396
|
* @returns number of strips present
|
|
340
397
|
*/
|
|
341
398
|
get stripCount() {
|
|
342
|
-
|
|
343
|
-
if (tileOffset == null)
|
|
344
|
-
return 0;
|
|
345
|
-
return tileOffset.count;
|
|
399
|
+
return this.tags.get(TiffTag.StripByteCounts)?.count ?? 0;
|
|
346
400
|
}
|
|
347
401
|
// Clamp the bounds of the output image to the size of the image, as sometimes the edge tiles are not full tiles
|
|
348
402
|
getTileBounds(x, y) {
|
|
@@ -377,7 +431,7 @@ export class CogTiffImage {
|
|
|
377
431
|
getJpegHeader(bytes) {
|
|
378
432
|
// Both the JPEGTable and the Bytes with have the start of image and end of image markers
|
|
379
433
|
// StartOfImage 0xffd8 EndOfImage 0xffd9
|
|
380
|
-
const tables = this.value(TiffTag.
|
|
434
|
+
const tables = this.value(TiffTag.JpegTables);
|
|
381
435
|
if (tables == null)
|
|
382
436
|
throw new Error('Unable to find Jpeg header');
|
|
383
437
|
// Remove EndOfImage marker
|
|
@@ -389,18 +443,19 @@ export class CogTiffImage {
|
|
|
389
443
|
}
|
|
390
444
|
/** Read image bytes at the given offset */
|
|
391
445
|
async getBytes(offset, byteCount) {
|
|
392
|
-
const mimeType = this.compression;
|
|
393
|
-
if (mimeType == null)
|
|
394
|
-
throw new Error('Unsupported compression: ' + this.value(TiffTag.Compression));
|
|
395
446
|
if (byteCount === 0)
|
|
396
447
|
return null;
|
|
397
448
|
const bytes = await this.tiff.source.fetch(offset, byteCount);
|
|
398
449
|
if (bytes.byteLength < byteCount) {
|
|
399
450
|
throw new Error(`Failed to fetch bytes from offset:${offset} wanted:${byteCount} got:${bytes.byteLength}`);
|
|
400
451
|
}
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
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 };
|
|
404
459
|
}
|
|
405
460
|
/**
|
|
406
461
|
* Load a tile into a ArrayBuffer
|
|
@@ -411,13 +466,10 @@ export class CogTiffImage {
|
|
|
411
466
|
* @param y Tile y offset
|
|
412
467
|
*/
|
|
413
468
|
async getTile(x, y) {
|
|
414
|
-
const mimeType = this.compression;
|
|
415
469
|
const size = this.size;
|
|
416
470
|
const tiles = this.tileSize;
|
|
417
471
|
if (tiles == null)
|
|
418
472
|
throw new Error('Tiff is not tiled');
|
|
419
|
-
if (mimeType == null)
|
|
420
|
-
throw new Error('Unsupported compression: ' + this.value(TiffTag.Compression));
|
|
421
473
|
// TODO support GhostOptionTileOrder
|
|
422
474
|
const nyTiles = Math.ceil(size.height / tiles.height);
|
|
423
475
|
const nxTiles = Math.ceil(size.width / tiles.width);
|
|
@@ -467,7 +519,7 @@ export class CogTiffImage {
|
|
|
467
519
|
const leaderBytes = this.tiff.options?.tileLeaderByteSize;
|
|
468
520
|
if (leaderBytes) {
|
|
469
521
|
const offset = await getOffset(this.tiff, this.tileOffset, index);
|
|
470
|
-
// Sparse
|
|
522
|
+
// Sparse tiff no data found
|
|
471
523
|
if (offset === 0)
|
|
472
524
|
return { offset: 0, imageSize: 0 };
|
|
473
525
|
// This fetch will generally load in the bytes needed for the image too
|
|
@@ -488,11 +540,8 @@ export class CogTiffImage {
|
|
|
488
540
|
function getOffset(tiff, x, index) {
|
|
489
541
|
if (index > x.count || index < 0)
|
|
490
542
|
throw new Error('TagIndex: out of bounds ' + x.id + ' @ ' + index);
|
|
491
|
-
if (x.type === 'inline')
|
|
492
|
-
|
|
493
|
-
return x.value[index];
|
|
494
|
-
return x.value;
|
|
495
|
-
}
|
|
543
|
+
if (x.type === 'inline')
|
|
544
|
+
return x.value[index];
|
|
496
545
|
return getValueAt(tiff, x, index);
|
|
497
546
|
}
|
|
498
|
-
//# sourceMappingURL=
|
|
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 {
|
|
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
|
|
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:
|
|
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
|
|
76
|
+
/** Create a tiff and initialize it by reading the tiff headers */
|
|
77
77
|
static create(source) {
|
|
78
|
-
return new
|
|
78
|
+
return new Tiff(source).init();
|
|
79
79
|
}
|
|
80
80
|
/**
|
|
81
|
-
* Initialize the
|
|
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
|
|
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
|
|
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=
|
|
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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"}
|
package/build/util/bytes.d.ts
CHANGED
package/build/util/bytes.js
CHANGED
|
@@ -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";
|
package/build/util/bytes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bytes.js","sourceRoot":"","sources":["../../src/util/bytes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,
|
|
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": "
|
|
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": "
|
|
26
|
+
"gitHead": "7e83b76e5089791667a81df7c77e6d361ad1ccb8"
|
|
27
27
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { readFile } from 'fs/promises';
|
|
2
|
-
|
|
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('
|
|
13
|
-
const tiff = new
|
|
13
|
+
performance.mark('tiff:init');
|
|
14
|
+
const tiff = new Tiff(source);
|
|
14
15
|
await tiff.init();
|
|
15
|
-
performance.mark('
|
|
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,13 +1,21 @@
|
|
|
1
|
-
import { readFile, stat } from 'fs/promises';
|
|
1
|
+
import { readFile, stat } from 'node:fs/promises';
|
|
2
|
+
import { promisify } from 'node:util';
|
|
3
|
+
import { gunzip } from 'node:zlib';
|
|
4
|
+
|
|
2
5
|
import { Source } from '../source.js';
|
|
3
6
|
|
|
7
|
+
const gunzipP = promisify(gunzip);
|
|
8
|
+
|
|
4
9
|
export class TestFileSource implements Source {
|
|
5
10
|
url: URL;
|
|
6
11
|
data: Promise<Buffer>;
|
|
7
12
|
|
|
8
13
|
constructor(fileName: URL) {
|
|
9
14
|
this.url = fileName;
|
|
10
|
-
this.data = readFile(this.url)
|
|
15
|
+
this.data = readFile(this.url).then((buf) => {
|
|
16
|
+
if (this.url.pathname.endsWith('gz')) return gunzipP(buf);
|
|
17
|
+
return buf;
|
|
18
|
+
});
|
|
11
19
|
}
|
|
12
20
|
|
|
13
21
|
async fetch(offset: number, length: number): Promise<ArrayBuffer> {
|