@cogeotiff/cli 7.2.0 → 8.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/CHANGELOG.md +7 -490
  2. package/README.md +26 -34
  3. package/bin/cogeotiff.js +1 -2
  4. package/build/action.util.d.ts +2 -8
  5. package/build/action.util.js +7 -18
  6. package/build/action.util.js.map +1 -0
  7. package/build/bin.d.ts +1 -0
  8. package/build/bin.js +13 -0
  9. package/build/bin.js.map +1 -0
  10. package/build/cli.table.d.ts +0 -1
  11. package/build/cli.table.js +9 -4
  12. package/build/cli.table.js.map +1 -0
  13. package/build/commands/dump.d.ts +27 -0
  14. package/build/commands/dump.js +132 -0
  15. package/build/commands/dump.js.map +1 -0
  16. package/build/commands/info.d.ts +19 -0
  17. package/build/commands/info.js +185 -0
  18. package/build/commands/info.js.map +1 -0
  19. package/build/common.d.ts +16 -0
  20. package/build/common.js +19 -0
  21. package/build/common.js.map +1 -0
  22. package/build/fs.d.ts +6 -0
  23. package/build/fs.js +17 -0
  24. package/build/fs.js.map +1 -0
  25. package/build/index.d.ts +57 -2
  26. package/build/index.js +11 -8
  27. package/build/index.js.map +1 -0
  28. package/build/log.d.ts +11 -0
  29. package/build/log.js +37 -0
  30. package/build/log.js.map +1 -0
  31. package/build/util.bytes.d.ts +0 -1
  32. package/build/util.bytes.js +1 -1
  33. package/build/util.bytes.js.map +1 -0
  34. package/build/util.tile.d.ts +2 -3
  35. package/build/util.tile.js +20 -18
  36. package/build/util.tile.js.map +1 -0
  37. package/package.json +37 -37
  38. package/src/action.util.ts +22 -37
  39. package/src/bin.ts +14 -0
  40. package/src/cli.table.ts +27 -27
  41. package/src/commands/dump.ts +156 -0
  42. package/src/commands/info.ts +199 -0
  43. package/src/common.ts +20 -0
  44. package/src/fs.ts +18 -0
  45. package/src/index.ts +10 -7
  46. package/src/log.ts +43 -0
  47. package/src/util.bytes.ts +6 -6
  48. package/src/util.tile.ts +33 -33
  49. package/tsconfig.json +8 -10
  50. package/build/action.dump.tile.d.ts +0 -24
  51. package/build/action.dump.tile.d.ts.map +0 -1
  52. package/build/action.dump.tile.js +0 -194
  53. package/build/action.info.d.ts +0 -10
  54. package/build/action.info.d.ts.map +0 -1
  55. package/build/action.info.js +0 -183
  56. package/build/action.tile.d.ts +0 -9
  57. package/build/action.tile.d.ts.map +0 -1
  58. package/build/action.tile.js +0 -64
  59. package/build/action.util.d.ts.map +0 -1
  60. package/build/cli.cog.info.d.ts +0 -9
  61. package/build/cli.cog.info.d.ts.map +0 -1
  62. package/build/cli.cog.info.js +0 -42
  63. package/build/cli.log.d.ts +0 -3
  64. package/build/cli.log.d.ts.map +0 -1
  65. package/build/cli.log.js +0 -4
  66. package/build/cli.table.d.ts.map +0 -1
  67. package/build/index.d.ts.map +0 -1
  68. package/build/util.bytes.d.ts.map +0 -1
  69. package/build/util.tile.d.ts.map +0 -1
  70. package/src/action.dump.tile.ts +0 -240
  71. package/src/action.info.ts +0 -205
  72. package/src/action.tile.ts +0 -76
  73. package/src/cli.cog.info.ts +0 -45
  74. package/src/cli.log.ts +0 -4
@@ -1,16 +1,21 @@
1
1
  export class CliTable {
2
2
  constructor() {
3
- this.fields = [];
3
+ Object.defineProperty(this, "fields", {
4
+ enumerable: true,
5
+ configurable: true,
6
+ writable: true,
7
+ value: []
8
+ });
4
9
  }
5
10
  add(fields) {
6
11
  this.fields.push(fields);
7
12
  }
8
13
  print(data, rowPadding = '') {
9
- const fields = this.fields.filter((f) => data.every((d) => { var _a, _b; return (_b = (_a = f.enabled) === null || _a === void 0 ? void 0 : _a.call(f, d)) !== null && _b !== void 0 ? _b : true; }));
14
+ const fields = this.fields.filter((f) => data.every((d) => f.enabled?.(d) ?? true));
10
15
  const rows = data.map((d, index) => {
11
16
  const row = fields.map((f) => {
12
17
  const str = f.get(d, index);
13
- return (str !== null && str !== void 0 ? str : '').padEnd(f.width);
18
+ return (str ?? '').padEnd(f.width);
14
19
  });
15
20
  return rowPadding + row.join('\t');
16
21
  });
@@ -18,4 +23,4 @@ export class CliTable {
18
23
  return rows;
19
24
  }
20
25
  }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLnRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFjQSxNQUFNLE9BQU8sUUFBUTtJQUFyQjtRQUNJLFdBQU0sR0FBc0IsRUFBRSxDQUFDO0lBa0JuQyxDQUFDO0lBakJHLEdBQUcsQ0FBQyxNQUF1QjtRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQVMsRUFBRSxVQUFVLEdBQUcsRUFBRTtRQUM1QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLGVBQUMsT0FBQSxNQUFBLE1BQUEsQ0FBQyxDQUFDLE9BQU8sa0RBQUcsQ0FBQyxDQUFDLG1DQUFJLElBQUksQ0FBQSxFQUFBLENBQUMsQ0FBQyxDQUFDO1FBQ3BGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDL0IsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUN6QixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDNUIsT0FBTyxDQUFDLEdBQUcsYUFBSCxHQUFHLGNBQUgsR0FBRyxHQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLFVBQVUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDaEYsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW50ZXJmYWNlIENsaVRhYmxlSW5mbzxUPiB7XG4gICAgLyoqIEhlYWRlciBmb3IgdGhlIHRhYmxlICovXG4gICAgbmFtZTogc3RyaW5nO1xuICAgIC8qKiBQYWQgdGhlIGZpZWxkIG91dCB0byB0aGlzIHdpZHRoICovXG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICAvKiogR2V0IHRoZSBmaWVsZCB2YWx1ZSAqL1xuICAgIGdldDogKG9iajogVCwgaW5kZXg/OiBudW1iZXIpID0+IHN0cmluZyB8IG51bGw7XG4gICAgLyoqXG4gICAgICogSXMgdGhpcyBmaWVsZCBlbmFibGVkLFxuICAgICAqIEZpZWxkcyBhcmUgb25seSBlbmFibGVkIGlmIGV2ZXJ5IGRhdGEgcmVjb3JkIHJldHVybnMgdHJ1ZSBmb3IgZW5hYmxlZFxuICAgICAqL1xuICAgIGVuYWJsZWQ/OiAob2JqOiBUKSA9PiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgQ2xpVGFibGU8VD4ge1xuICAgIGZpZWxkczogQ2xpVGFibGVJbmZvPFQ+W10gPSBbXTtcbiAgICBhZGQoZmllbGRzOiBDbGlUYWJsZUluZm88VD4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWVsZHMucHVzaChmaWVsZHMpO1xuICAgIH1cblxuICAgIHByaW50KGRhdGE6IFRbXSwgcm93UGFkZGluZyA9ICcnKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmZpZWxkcy5maWx0ZXIoKGYpID0+IGRhdGEuZXZlcnkoKGQpID0+IGYuZW5hYmxlZD8uKGQpID8/IHRydWUpKTtcbiAgICAgICAgY29uc3Qgcm93cyA9IGRhdGEubWFwKChkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gZmllbGRzLm1hcCgoZikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0ciA9IGYuZ2V0KGQsIGluZGV4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHN0ciA/PyAnJykucGFkRW5kKGYud2lkdGgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcm93UGFkZGluZyArIHJvdy5qb2luKCdcXHQnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcm93cy51bnNoaWZ0KHJvd1BhZGRpbmcgKyBmaWVsZHMubWFwKChmKSA9PiBmLm5hbWUucGFkRW5kKGYud2lkdGgpKS5qb2luKCdcXHQnKSk7XG4gICAgICAgIHJldHVybiByb3dzO1xuICAgIH1cbn1cbiJdfQ==
26
+ //# sourceMappingURL=cli.table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.table.js","sourceRoot":"","sources":["../src/cli.table.ts"],"names":[],"mappings":"AAcA,MAAM,OAAO,QAAQ;IAArB;QACE;;;;mBAA4B,EAAE;WAAC;IAkBjC,CAAC;IAjBC,GAAG,CAAC,MAAuB;QACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,IAAS,EAAE,UAAU,GAAG,EAAE;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QACpF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;YACjC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC3B,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC5B,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;YACH,OAAO,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAChF,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,27 @@
1
+ export interface GeoJsonPolygon {
2
+ type: 'Feature';
3
+ geometry: {
4
+ type: 'Polygon';
5
+ coordinates: [[[number, number], [number, number], [number, number], [number, number], [number, number]]];
6
+ };
7
+ properties: Record<string, unknown>;
8
+ }
9
+ export declare const commandDump: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
10
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
11
+ path: URL | undefined;
12
+ image: number;
13
+ output: URL | undefined;
14
+ paths: URL[];
15
+ verbose: boolean;
16
+ extraVerbose: boolean;
17
+ }>>;
18
+ } & import("cmd-ts/dist/cjs/helpdoc.js").PrintHelp & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/helpdoc.js").Named & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned> & import("cmd-ts/dist/cjs/argparser.js").Register & import("cmd-ts/dist/cjs/runner.js").Handling<{
19
+ path: URL | undefined;
20
+ image: number;
21
+ output: URL | undefined;
22
+ paths: URL[];
23
+ verbose: boolean;
24
+ extraVerbose: boolean;
25
+ }, Promise<void>> & {
26
+ run(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<Promise<void>>>;
27
+ } & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned & import("cmd-ts/dist/cjs/helpdoc.js").Descriptive & import("cmd-ts/dist/cjs/helpdoc.js").Aliased>;
@@ -0,0 +1,132 @@
1
+ import { fsa } from '@chunkd/fs';
2
+ import { CogTiff, TiffMimeType } from '@cogeotiff/core';
3
+ import { command, number, option, optional, restPositionals } from 'cmd-ts';
4
+ import { promises as fs } from 'node:fs';
5
+ import { basename } from 'node:path';
6
+ import { pathToFileURL } from 'node:url';
7
+ import pLimit from 'p-limit';
8
+ import { DefaultArgs, Url } from '../common.js';
9
+ import { ensureS3fs, setupLogger } from '../log.js';
10
+ import { getTileName, writeTile } from '../util.tile.js';
11
+ const TileQueue = pLimit(5);
12
+ function makePolygon(xMin, yMin, xMax, yMax) {
13
+ return {
14
+ type: 'Feature',
15
+ properties: {},
16
+ geometry: {
17
+ type: 'Polygon',
18
+ coordinates: [
19
+ [
20
+ [xMin, yMin],
21
+ [xMin, yMax],
22
+ [xMax, yMax],
23
+ [xMax, yMin],
24
+ [xMin, yMin],
25
+ ],
26
+ ],
27
+ },
28
+ };
29
+ }
30
+ export const commandDump = command({
31
+ name: 'dump',
32
+ args: {
33
+ ...DefaultArgs,
34
+ path: option({ short: 'f', long: 'file', type: optional(Url) }),
35
+ image: option({ short: 'i', long: 'image', description: 'Image Id to dump (starting from 0)', type: number }),
36
+ output: option({ short: 'o', long: 'output', type: optional(Url) }),
37
+ paths: restPositionals({ type: Url, description: 'Files to process' }),
38
+ },
39
+ async handler(args) {
40
+ const cwd = pathToFileURL(process.cwd() + '/');
41
+ const logger = setupLogger(args);
42
+ for (const path of [args.path, ...args.paths]) {
43
+ if (path == null)
44
+ continue;
45
+ if (path.protocol === 's3:')
46
+ await ensureS3fs();
47
+ const source = fsa.source(path);
48
+ const tiff = await new CogTiff(source).init();
49
+ const img = tiff.images[args.image];
50
+ if (!img.isTiled())
51
+ throw Error(`Tiff: ${path.href} file is not tiled.`);
52
+ const output = new URL(`${basename(path.href)}-i${args.image}/`, args.output ?? cwd);
53
+ await fs.mkdir(output, { recursive: true });
54
+ await dumpTiles(tiff, output, args.image, logger);
55
+ await dumpBounds(tiff, output, args.image);
56
+ }
57
+ },
58
+ });
59
+ async function dumpBounds(tiff, target, index) {
60
+ const img = tiff.images[index];
61
+ if (!img.isTiled() || !img.isGeoLocated)
62
+ return;
63
+ const features = [];
64
+ const featureCollection = {
65
+ type: 'FeatureCollection',
66
+ features,
67
+ };
68
+ const tileCount = img.tileCount;
69
+ const tileInfo = img.tileSize;
70
+ const tileSize = img.size;
71
+ const firstImage = tiff.images[0];
72
+ if (firstImage.epsg !== 4326) {
73
+ featureCollection['crs'] = {
74
+ type: 'name',
75
+ properties: { name: `epsg:${firstImage.epsg}` },
76
+ };
77
+ }
78
+ firstImage.compression;
79
+ const firstTileSize = firstImage.size;
80
+ const origin = firstImage.origin;
81
+ const resolution = firstImage.resolution;
82
+ const xScale = (resolution[0] * firstTileSize.width) / tileSize.width;
83
+ const yScale = (resolution[1] * firstTileSize.height) / tileSize.height;
84
+ for (let y = 0; y < tileCount.y; y++) {
85
+ const yMax = origin[1] + y * tileInfo.height * yScale;
86
+ const yMin = yMax + tileInfo.height * yScale;
87
+ for (let x = 0; x < tileCount.x; x++) {
88
+ const xMin = origin[0] + x * tileInfo.width * xScale;
89
+ const xMax = xMin + tileInfo.width * xScale;
90
+ const poly = makePolygon(xMin, yMin, xMax, yMax);
91
+ poly.properties = { tile: getTileName(firstImage.compression ?? TiffMimeType.None, index, x, y) };
92
+ features.push(poly);
93
+ }
94
+ }
95
+ await fs.writeFile(new URL(`i${index}.bounds.geojson`, target), JSON.stringify(featureCollection, null, 2));
96
+ }
97
+ async function dumpTiles(tiff, target, index, logger) {
98
+ const promises = [];
99
+ const img = tiff.images[index];
100
+ if (!img.isTiled())
101
+ return 0;
102
+ logger.info('Tiff:Info', { source: tiff.source.url, ...img.tileSize, ...img.tileCount });
103
+ const { tileCount, tileSize } = img;
104
+ const html = ['<html>'];
105
+ const styles = `<style>.c { min-width: ${tileSize.width}px; min-height: ${tileSize.height}px; outline: 1px #ff00fff0 }</style>`;
106
+ html.push(styles);
107
+ for (let y = 0; y < tileCount.y; y++) {
108
+ for (let x = 0; x < tileCount.x; x++) {
109
+ const promise = TileQueue(() => writeTile(tiff, x, y, index, target, logger));
110
+ promises.push(promise);
111
+ }
112
+ }
113
+ const result = await Promise.all(promises);
114
+ let i = 0;
115
+ for (let y = 0; y < tileCount.y; y++) {
116
+ html.push('\t<div style="display:flex;">');
117
+ for (let x = 0; x < tileCount.x; x++) {
118
+ const fileName = result[i];
119
+ if (fileName == null) {
120
+ html.push(`\t\t<div class="c"></div>`);
121
+ continue;
122
+ }
123
+ html.push(`\t\t<img class="c" src="./${fileName}" >`);
124
+ i++;
125
+ }
126
+ html.push('\t</div>');
127
+ }
128
+ html.push('</html>');
129
+ await fs.writeFile(new URL('index.html', target), html.join('\n'));
130
+ return promises.length;
131
+ }
132
+ //# sourceMappingURL=dump.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dump.js","sourceRoot":"","sources":["../../src/commands/dump.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export declare const commandInfo: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
2
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
3
+ path: URL | undefined;
4
+ tags: boolean;
5
+ offsets: boolean;
6
+ paths: URL[];
7
+ verbose: boolean;
8
+ extraVerbose: boolean;
9
+ }>>;
10
+ } & import("cmd-ts/dist/cjs/helpdoc.js").PrintHelp & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/helpdoc.js").Named & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned> & import("cmd-ts/dist/cjs/argparser.js").Register & import("cmd-ts/dist/cjs/runner.js").Handling<{
11
+ path: URL | undefined;
12
+ tags: boolean;
13
+ offsets: boolean;
14
+ paths: URL[];
15
+ verbose: boolean;
16
+ extraVerbose: boolean;
17
+ }, Promise<void>> & {
18
+ run(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<Promise<void>>>;
19
+ } & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned & import("cmd-ts/dist/cjs/helpdoc.js").Descriptive & import("cmd-ts/dist/cjs/helpdoc.js").Aliased>;
@@ -0,0 +1,185 @@
1
+ import { fsa } from '@chunkd/fs';
2
+ import { CogTiff, TiffTagGeo, TiffTagId, TiffTagValueType, TiffVersion, toHex } from '@cogeotiff/core';
3
+ import c from 'ansi-colors';
4
+ import { command, flag, option, optional, restPositionals } from 'cmd-ts';
5
+ import { ActionUtil } from '../action.util.js';
6
+ import { CliTable } from '../cli.table.js';
7
+ import { DefaultArgs, Url } from '../common.js';
8
+ import { FetchLog } from '../fs.js';
9
+ import { ensureS3fs, setupLogger } from '../log.js';
10
+ import { toByteSizeString } from '../util.bytes.js';
11
+ function round(num) {
12
+ const opt = 10 ** 4;
13
+ return Math.floor(num * opt) / opt;
14
+ }
15
+ export const commandInfo = command({
16
+ name: 'info',
17
+ args: {
18
+ ...DefaultArgs,
19
+ path: option({ short: 'f', long: 'file', type: optional(Url) }),
20
+ tags: flag({ short: 't', long: 'tags', description: 'Dump tiff Tags' }),
21
+ offsets: flag({ short: 'o', long: 'offsets', description: 'Load byte offsets too' }),
22
+ paths: restPositionals({ type: Url, description: 'Files to process' }),
23
+ },
24
+ async handler(args) {
25
+ const logger = setupLogger(args);
26
+ const paths = [...args.paths, args.path].filter((f) => f != null);
27
+ for (const path of paths) {
28
+ if (path.protocol === 's3:')
29
+ await ensureS3fs();
30
+ logger.debug('Tiff:load', { path: path?.href });
31
+ FetchLog.reset();
32
+ const source = fsa.source(path);
33
+ const tiff = await new CogTiff(source).init();
34
+ const header = [
35
+ { key: 'Tiff type', value: `${TiffVersion[tiff.version]} (v${String(tiff.version)})` },
36
+ {
37
+ key: 'Bytes read',
38
+ value: `${toByteSizeString(FetchLog.bytesRead)} (${FetchLog.fetches.length} Chunk${FetchLog.fetches.length === 1 ? '' : 's'})`,
39
+ },
40
+ ];
41
+ const firstImage = tiff.images[0];
42
+ const isGeoLocated = firstImage.isGeoLocated;
43
+ const images = [
44
+ { key: 'Compression', value: firstImage.compression },
45
+ isGeoLocated ? { key: 'Origin', value: firstImage.origin.map(round).join(', ') } : null,
46
+ isGeoLocated ? { key: 'Resolution', value: firstImage.resolution.map(round).join(', ') } : null,
47
+ isGeoLocated ? { key: 'BoundingBox', value: firstImage.bbox.map(round).join(', ') } : null,
48
+ firstImage.epsg ? { key: 'EPSG', value: `EPSG:${firstImage.epsg} (https://epsg.io/${firstImage.epsg})` } : null,
49
+ { key: 'Images', value: '\n' + TiffImageInfoTable.print(tiff.images, '\t').join('\n') },
50
+ ];
51
+ const ghostOptions = [...(tiff.options?.options.entries() ?? [])];
52
+ const gdalMetadata = parseGdalMetadata(firstImage);
53
+ const gdal = [
54
+ {
55
+ key: 'COG optimized',
56
+ value: String(tiff.options?.isCogOptimized),
57
+ enabled: tiff.options?.isCogOptimized === true,
58
+ },
59
+ { key: 'COG broken', value: String(tiff.options?.isBroken), enabled: tiff.options?.isBroken === true },
60
+ {
61
+ key: 'Ghost Options',
62
+ value: '\n' + ghostOptions.map((c) => `\t\t${c[0]} = ${c[1]}`).join('\n'),
63
+ enabled: ghostOptions.length > 0,
64
+ },
65
+ {
66
+ key: 'Metadata',
67
+ value: '\n' + gdalMetadata?.map((c) => `\t\t${c}`).join('\n'),
68
+ enabled: gdalMetadata != null,
69
+ },
70
+ ];
71
+ const result = [
72
+ { keys: header },
73
+ { title: 'Images', keys: images },
74
+ { title: 'GDAL', keys: gdal, enabled: gdal.filter((g) => g.enabled == null || g.enabled).length > 0 },
75
+ ];
76
+ if (args.tags) {
77
+ for (const img of tiff.images) {
78
+ const tiffTags = [...img.tags.values()];
79
+ // Load the first 25 values of offset arrays
80
+ if (args.offsets) {
81
+ for (const tag of tiffTags) {
82
+ if (tag.type !== 'offset')
83
+ continue;
84
+ // for (let i = 0; i < Math.min(tag.count, 100); i++) tag.getValueAt(i);
85
+ }
86
+ }
87
+ result.push({
88
+ title: `Image: ${img.id} - Tiff tags`,
89
+ keys: tiffTags.map(formatTag),
90
+ });
91
+ await img.loadGeoTiffTags();
92
+ if (img.tagsGeo.size > 0) {
93
+ const tiffTagsGeo = [...img.tagsGeo.entries()];
94
+ const keys = tiffTagsGeo.map(([key, value]) => formatGeoTag(key, value));
95
+ if (keys.length > 0) {
96
+ result.push({ title: `Image: ${img.id} - Geo Tiff tags`, keys });
97
+ }
98
+ }
99
+ }
100
+ }
101
+ const msg = ActionUtil.formatResult(`\n${c.bold('COG File Info')} - ${c.bold(path.href)}`, result);
102
+ console.log(msg.join('\n'));
103
+ await source.close?.();
104
+ }
105
+ },
106
+ });
107
+ const TiffImageInfoTable = new CliTable();
108
+ TiffImageInfoTable.add({ name: 'Id', width: 4, get: (_i, index) => String(index) });
109
+ TiffImageInfoTable.add({ name: 'Size', width: 20, get: (i) => `${i.size.width}x${i.size.height}` });
110
+ TiffImageInfoTable.add({
111
+ name: 'Tile Size',
112
+ width: 20,
113
+ get: (i) => `${i.tileSize.width}x${i.tileSize.height}`,
114
+ enabled: (i) => i.isTiled(),
115
+ });
116
+ TiffImageInfoTable.add({
117
+ name: 'Tile Count',
118
+ width: 20,
119
+ get: (i) => `${i.tileCount.x}x${i.tileCount.y} (${i.tileCount.x * i.tileCount.y})`,
120
+ enabled: (i) => i.isTiled(),
121
+ });
122
+ TiffImageInfoTable.add({
123
+ name: 'Strip Count',
124
+ width: 20,
125
+ get: (i) => `${i.tags.get(TiffTagId.StripOffsets)?.count}`,
126
+ enabled: (i) => !i.isTiled(),
127
+ });
128
+ TiffImageInfoTable.add({
129
+ name: 'Resolution',
130
+ width: 20,
131
+ get: (i) => `${round(i.resolution[0])}`,
132
+ enabled: (i) => i.isGeoLocated,
133
+ });
134
+ // Show compression only if it varies between images
135
+ TiffImageInfoTable.add({
136
+ name: 'Compression',
137
+ width: 20,
138
+ get: (i) => i.compression,
139
+ enabled: (i) => {
140
+ const formats = new Set();
141
+ i.tiff.images.forEach((f) => formats.add(f.compression));
142
+ return formats.size > 1;
143
+ },
144
+ });
145
+ /**
146
+ * Parse out the GDAL Metadata to be more friendly to read
147
+ *
148
+ * TODO using a XML Parser will make this even better
149
+ * @param img
150
+ */
151
+ function parseGdalMetadata(img) {
152
+ const metadata = img.value(TiffTagId.GdalMetadata);
153
+ if (typeof metadata !== 'string')
154
+ return null;
155
+ if (!metadata.startsWith('<GDALMetadata>'))
156
+ return null;
157
+ return metadata
158
+ .replace('<GDALMetadata>\n', '')
159
+ .replace('</GDALMetadata>\n', '')
160
+ .replace('\n\x00', '')
161
+ .split('\n')
162
+ .map((c) => c.trim());
163
+ }
164
+ function formatTag(tag) {
165
+ const tagName = TiffTagId[tag.id];
166
+ const tagDebug = `(${TiffTagValueType[tag.dataType]}${tag.count > 1 ? ' x' + tag.count : ''}`;
167
+ const key = `${c.dim(toHex(tag.id)).padEnd(7, ' ')} ${String(tagName)} ${c.dim(tagDebug)})`.padEnd(50, ' ');
168
+ if (Array.isArray(tag.value))
169
+ return { key, value: JSON.stringify(tag.value.slice(0, 250)) };
170
+ let tagString = JSON.stringify(tag.value) ?? c.dim('null');
171
+ if (tagString.length > 256)
172
+ tagString = tagString.slice(0, 250) + '...';
173
+ return { key, value: tagString };
174
+ }
175
+ function formatGeoTag(tagId, value) {
176
+ const tagName = TiffTagGeo[tagId];
177
+ const key = `${c.dim(toHex(tagId)).padEnd(7, ' ')} ${String(tagName).padEnd(30)}`;
178
+ if (Array.isArray(value))
179
+ return { key, value: JSON.stringify(value.slice(0, 250)) };
180
+ let tagString = JSON.stringify(value) ?? c.dim('null');
181
+ if (tagString.length > 256)
182
+ tagString = tagString.slice(0, 250) + '...';
183
+ return { key, value: tagString };
184
+ }
185
+ //# sourceMappingURL=info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { Type } from 'cmd-ts';
2
+ export declare const verbose: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
3
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<boolean>>;
4
+ } & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/argparser.js").Register & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive>;
5
+ export declare const extraVerbose: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
6
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<boolean>>;
7
+ } & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/argparser.js").Register & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive>;
8
+ export declare const DefaultArgs: {
9
+ verbose: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
10
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<boolean>>;
11
+ } & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/argparser.js").Register & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive>;
12
+ extraVerbose: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
13
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<boolean>>;
14
+ } & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/argparser.js").Register & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive>;
15
+ };
16
+ export declare const Url: Type<string, URL>;
@@ -0,0 +1,19 @@
1
+ import { flag } from 'cmd-ts';
2
+ import { pathToFileURL } from 'url';
3
+ export const verbose = flag({ long: 'verbose', description: 'Verbose logging', short: 'v' });
4
+ export const extraVerbose = flag({ long: 'extra-verbose', description: 'Extra verbose logging', short: 'V' });
5
+ export const DefaultArgs = {
6
+ verbose,
7
+ extraVerbose,
8
+ };
9
+ export const Url = {
10
+ async from(s) {
11
+ try {
12
+ return new URL(s);
13
+ }
14
+ catch (e) {
15
+ return pathToFileURL(s);
16
+ }
17
+ },
18
+ };
19
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,IAAI,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AAC7F,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,uBAAuB,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AAE9G,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,OAAO;IACP,YAAY;CACb,CAAC;AAEF,MAAM,CAAC,MAAM,GAAG,GAAsB;IACpC,KAAK,CAAC,IAAI,CAAC,CAAS;QAClB,IAAI;YACF,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;SACnB;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC;SACzB;IACH,CAAC;CACF,CAAC"}
package/build/fs.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ import { SourceMiddleware, SourceRequest } from '@chunkd/source';
2
+ export declare const FetchLog: SourceMiddleware & {
3
+ reset(): void;
4
+ fetches: SourceRequest[];
5
+ bytesRead: number;
6
+ };
package/build/fs.js ADDED
@@ -0,0 +1,17 @@
1
+ import { logger } from './log.js';
2
+ export const FetchLog = {
3
+ name: 'source:log',
4
+ fetch(req, next) {
5
+ this.fetches.push(req);
6
+ this.bytesRead += req.length ?? 0;
7
+ logger.info('Tiff:fetch', { href: req.source.url.href, offset: req.offset, length: req.length });
8
+ return next(req);
9
+ },
10
+ reset() {
11
+ this.fetches = [];
12
+ this.bytesRead = 0;
13
+ },
14
+ fetches: [],
15
+ bytesRead: 0,
16
+ };
17
+ //# sourceMappingURL=fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,CAAC,MAAM,QAAQ,GAAsF;IACzG,IAAI,EAAE,YAAY;IAClB,KAAK,CAAC,GAAkB,EAAE,IAAoB;QAC5C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACjG,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IACD,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,EAAE,EAAE;IACX,SAAS,EAAE,CAAC;CACb,CAAC"}
package/build/index.d.ts CHANGED
@@ -1,2 +1,57 @@
1
- import 'source-map-support/register.js';
2
- //# sourceMappingURL=index.d.ts.map
1
+ export declare const cmd: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
2
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
3
+ command: "info";
4
+ args: {
5
+ path: URL | undefined;
6
+ tags: boolean;
7
+ offsets: boolean;
8
+ paths: URL[];
9
+ verbose: boolean;
10
+ extraVerbose: boolean;
11
+ };
12
+ } | {
13
+ command: "dump";
14
+ args: {
15
+ path: URL | undefined;
16
+ image: number;
17
+ output: URL | undefined;
18
+ paths: URL[];
19
+ verbose: boolean;
20
+ extraVerbose: boolean;
21
+ };
22
+ }>>;
23
+ } & import("cmd-ts/dist/cjs/helpdoc.js").Named & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive & import("cmd-ts/dist/cjs/helpdoc.js").Versioned> & import("cmd-ts/dist/cjs/helpdoc.js").PrintHelp & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned> & import("cmd-ts/dist/cjs/argparser.js").Register & import("cmd-ts/dist/cjs/runner.js").Handling<{
24
+ command: "info";
25
+ args: {
26
+ path: URL | undefined;
27
+ tags: boolean;
28
+ offsets: boolean;
29
+ paths: URL[];
30
+ verbose: boolean;
31
+ extraVerbose: boolean;
32
+ };
33
+ } | {
34
+ command: "dump";
35
+ args: {
36
+ path: URL | undefined;
37
+ image: number;
38
+ output: URL | undefined;
39
+ paths: URL[];
40
+ verbose: boolean;
41
+ extraVerbose: boolean;
42
+ };
43
+ }, {
44
+ command: "info";
45
+ value: Promise<void>;
46
+ } | {
47
+ command: "dump";
48
+ value: Promise<void>;
49
+ }> & {
50
+ run(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
51
+ command: "info";
52
+ value: Promise<void>;
53
+ } | {
54
+ command: "dump";
55
+ value: Promise<void>;
56
+ }>>;
57
+ };
package/build/index.js CHANGED
@@ -1,9 +1,12 @@
1
- import 'source-map-support/register.js';
2
- import { CogInfoCommandLine } from './cli.cog.info.js';
3
- import { logger } from './cli.log.js';
4
- const cogInfo = new CogInfoCommandLine();
5
- cogInfo.executeWithoutErrorHandling().catch((error) => {
6
- logger.fatal({ error }, 'Failed to run');
7
- process.exit(1);
1
+ import { subcommands } from 'cmd-ts';
2
+ import { commandInfo } from './commands/info.js';
3
+ import { commandDump } from './commands/dump.js';
4
+ export const cmd = subcommands({
5
+ name: 'cogeotiff',
6
+ description: 'COG utilities',
7
+ cmds: {
8
+ info: commandInfo,
9
+ dump: commandDump,
10
+ },
8
11
  });
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXRDLE1BQU0sT0FBTyxHQUF1QixJQUFJLGtCQUFrQixFQUFFLENBQUM7QUFDN0QsT0FBTyxDQUFDLDJCQUEyQixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDbEQsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3NvdXJjZS1tYXAtc3VwcG9ydC9yZWdpc3Rlci5qcyc7XG5pbXBvcnQgeyBDb2dJbmZvQ29tbWFuZExpbmUgfSBmcm9tICcuL2NsaS5jb2cuaW5mby5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2NsaS5sb2cuanMnO1xuXG5jb25zdCBjb2dJbmZvOiBDb2dJbmZvQ29tbWFuZExpbmUgPSBuZXcgQ29nSW5mb0NvbW1hbmRMaW5lKCk7XG5jb2dJbmZvLmV4ZWN1dGVXaXRob3V0RXJyb3JIYW5kbGluZygpLmNhdGNoKChlcnJvcikgPT4ge1xuICAgIGxvZ2dlci5mYXRhbCh7IGVycm9yIH0sICdGYWlsZWQgdG8gcnVuJyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xufSk7XG4iXX0=
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,MAAM,GAAG,GAAG,WAAW,CAAC;IAC7B,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,eAAe;IAC5B,IAAI,EAAE;QACJ,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,WAAW;KAClB;CACF,CAAC,CAAC"}
package/build/log.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ import { SourceCache, SourceChunk } from '@chunkd/middleware';
2
+ import { log } from '@linzjs/tracing';
3
+ export declare const sourceCache: SourceCache;
4
+ export declare const sourceChunk: SourceChunk;
5
+ export declare function setupLogger(cfg: {
6
+ verbose?: boolean;
7
+ extraVerbose?: boolean;
8
+ }): typeof log;
9
+ export declare const logger: import("@linzjs/tracing/build/src/ot.log.js").OtLogger;
10
+ /** S3 client adds approx 300ms to the cli startup time, so only register it if needed */
11
+ export declare function ensureS3fs(): Promise<void>;