@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 +12 -0
- package/build/__benchmark__/cog.read.benchmark.js +4 -0
- package/build/__benchmark__/cog.read.benchmark.js.map +1 -1
- package/build/__test__/cog.read.test.js +15 -1
- package/build/__test__/cog.read.test.js.map +1 -1
- package/build/cog.tiff.image.d.ts +36 -8
- package/build/cog.tiff.image.js +47 -19
- package/build/cog.tiff.image.js.map +1 -1
- package/build/cog.tiff.js +11 -1
- package/build/cog.tiff.js.map +1 -1
- package/build/const/tiff.endian.d.ts +2 -1
- package/build/const/tiff.endian.js +2 -1
- package/build/const/tiff.endian.js.map +1 -1
- package/build/index.d.ts +1 -1
- package/build/read/tiff.gdal.d.ts +4 -4
- package/build/read/tiff.gdal.js +4 -4
- package/build/read/tiff.tag.d.ts +3 -3
- package/build/read/tiff.tag.factory.d.ts +7 -1
- package/build/read/tiff.tag.factory.js +21 -2
- package/build/read/tiff.tag.factory.js.map +1 -1
- package/build/source.d.ts +12 -0
- package/package.json +2 -2
- package/src/__benchmark__/cog.read.benchmark.ts +5 -0
- package/src/__test__/cog.read.test.ts +18 -1
- package/src/cog.tiff.image.ts +47 -22
- package/src/cog.tiff.ts +14 -1
- package/src/const/tiff.endian.ts +2 -1
- package/src/index.ts +1 -1
- package/src/read/tiff.gdal.ts +4 -4
- package/src/read/tiff.tag.factory.ts +26 -5
- package/src/read/tiff.tag.ts +3 -3
- package/src/source.ts +15 -0
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;
|
|
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":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,
|
|
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
|
-
/**
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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;
|
package/build/cog.tiff.image.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
/**
|
|
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
|
|
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
|
|
137
|
+
const locationTagId = geoTags[i + 1];
|
|
127
138
|
const offset = geoTags[i + 3];
|
|
128
|
-
if (
|
|
139
|
+
if (locationTagId === 0) {
|
|
129
140
|
this.tagsGeo.set(key, offset);
|
|
130
141
|
continue;
|
|
131
142
|
}
|
|
132
|
-
const tag = this.tags.get(
|
|
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 (
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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 (
|
|
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
|
package/build/cog.tiff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cog.tiff.js","sourceRoot":"","sources":["../src/cog.tiff.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cog.tiff.js","sourceRoot":"","sources":["../src/cog.tiff.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tiff.endian.js","sourceRoot":"","sources":["../../src/const/tiff.endian.ts"],"names":[],"mappings":"AAAA
|
|
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
|
|
19
|
-
* this class represents the optimizations that
|
|
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
|
|
24
|
+
* Has GDAL optimized this tiff
|
|
25
25
|
*/
|
|
26
26
|
get isCogOptimized(): boolean;
|
|
27
27
|
/**
|
|
28
|
-
* Has GDAL determined this
|
|
28
|
+
* Has GDAL determined this tiff is now broken
|
|
29
29
|
*/
|
|
30
30
|
get isBroken(): boolean;
|
|
31
31
|
/**
|
package/build/read/tiff.gdal.js
CHANGED
|
@@ -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
|
|
22
|
-
* this class represents the optimizations that
|
|
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
|
|
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
|
|
42
|
+
* Has GDAL determined this tiff is now broken
|
|
43
43
|
*/
|
|
44
44
|
get isBroken() {
|
|
45
45
|
return this.options.get(GhostOption.KnownIncompatibleEdition) === 'YES';
|
package/build/read/tiff.tag.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
36
|
-
/** Raw buffer of the values for lazy decoding,
|
|
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
|
|
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":"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,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,
|
|
1
|
+
{"version":3,"file":"tiff.tag.factory.js","sourceRoot":"","sources":["../../src/read/tiff.tag.factory.ts"],"names":[],"mappings":"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"}
|
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
|
|
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": "
|
|
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
|
});
|
package/src/cog.tiff.image.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
138
|
+
const locationTagId = geoTags[i + 1];
|
|
131
139
|
|
|
132
140
|
const offset = geoTags[i + 3];
|
|
133
141
|
|
|
134
|
-
if (
|
|
142
|
+
if (locationTagId === 0) {
|
|
135
143
|
this.tagsGeo.set(key, offset);
|
|
136
144
|
continue;
|
|
137
145
|
}
|
|
138
|
-
|
|
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 (
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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 (
|
|
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(
|
|
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
|
+
}
|
package/src/const/tiff.endian.ts
CHANGED
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';
|
package/src/read/tiff.gdal.ts
CHANGED
|
@@ -19,14 +19,14 @@ export enum GhostOptionTileLeader {
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
|
-
* GDAL has made a ghost set of options for
|
|
23
|
-
* this class represents the optimizations that
|
|
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
|
|
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
|
|
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:
|
|
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];
|
package/src/read/tiff.tag.ts
CHANGED
|
@@ -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
|
|
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
|
|
41
|
-
/** Raw buffer of the values for lazy decoding,
|
|
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
|
}
|