@basemaps/cli-raster 8.5.0 → 8.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/build/cogify/__test__/{extract.test.js → topo/extract.test.js} +8 -2
  2. package/build/cogify/__test__/topo/extract.test.js.map +1 -0
  3. package/build/cogify/__test__/topo/slug.test.d.ts +1 -0
  4. package/build/cogify/__test__/topo/slug.test.js +39 -0
  5. package/build/cogify/__test__/topo/slug.test.js.map +1 -0
  6. package/build/cogify/cli/__test__/cli.charts.test.d.ts +1 -0
  7. package/build/cogify/cli/__test__/cli.charts.test.js +131 -0
  8. package/build/cogify/cli/__test__/cli.charts.test.js.map +1 -0
  9. package/build/cogify/cli/cli.charts.d.ts +35 -0
  10. package/build/cogify/cli/cli.charts.js +303 -0
  11. package/build/cogify/cli/cli.charts.js.map +1 -0
  12. package/build/cogify/cli/cli.cog.js +2 -2
  13. package/build/cogify/cli/cli.cog.js.map +1 -1
  14. package/build/cogify/cli/cli.topo.d.ts +2 -2
  15. package/build/cogify/cli/cli.topo.js +16 -17
  16. package/build/cogify/cli/cli.topo.js.map +1 -1
  17. package/build/cogify/cli.d.ts +32 -0
  18. package/build/cogify/cli.js +2 -0
  19. package/build/cogify/cli.js.map +1 -1
  20. package/build/cogify/covering/covering.js +2 -2
  21. package/build/cogify/covering/covering.js.map +1 -1
  22. package/build/cogify/gdal/gdal.command.d.ts +7 -1
  23. package/build/cogify/gdal/gdal.command.js +27 -0
  24. package/build/cogify/gdal/gdal.command.js.map +1 -1
  25. package/build/cogify/gdal/gdal.runner.d.ts +1 -1
  26. package/build/cogify/gdal/ogr2ogr.command.d.ts +20 -0
  27. package/build/cogify/gdal/ogr2ogr.command.js +57 -0
  28. package/build/cogify/gdal/ogr2ogr.command.js.map +1 -0
  29. package/build/cogify/topo/extract.d.ts +2 -2
  30. package/build/cogify/topo/extract.js +63 -20
  31. package/build/cogify/topo/extract.js.map +1 -1
  32. package/build/cogify/topo/slug.d.ts +6 -4
  33. package/build/cogify/topo/slug.js +43 -8
  34. package/build/cogify/topo/slug.js.map +1 -1
  35. package/build/cogify/topo/stac.creation.d.ts +3 -2
  36. package/build/cogify/topo/stac.creation.js +5 -5
  37. package/build/cogify/topo/stac.creation.js.map +1 -1
  38. package/dist/index.cjs +5144 -1865
  39. package/package.json +6 -6
  40. package/build/cogify/__test__/extract.test.js.map +0 -1
  41. /package/build/cogify/__test__/{extract.test.d.ts → topo/extract.test.d.ts} +0 -0
@@ -1,8 +1,11 @@
1
1
  import { strictEqual, throws } from 'node:assert';
2
2
  import { describe, it } from 'node:test';
3
- import { extractMapCodeAndVersion } from '../topo/extract.js';
3
+ import { extractMapCodeAndVersion } from '../../topo/extract.js';
4
4
  describe('extractMapCodeAndVersion', () => {
5
5
  const FakeDomain = 's3://topographic/fake-domain';
6
+ /**
7
+ * valid tests
8
+ */
6
9
  const validFiles = [
7
10
  { input: `${FakeDomain}/MB07_GeoTifv1-00.tif`, expected: { mapCode: 'MB07', version: 'v1-00' } },
8
11
  { input: `${FakeDomain}/MB07_GRIDLESS_GeoTifv1-00.tif`, expected: { mapCode: 'MB07', version: 'v1-00' } },
@@ -17,7 +20,6 @@ describe('extractMapCodeAndVersion', () => {
17
20
  expected: { mapCode: 'AZ36ptsAZ35BA35BA36', version: 'v1-00' },
18
21
  },
19
22
  ];
20
- const invalidFiles = [`${FakeDomain}/MB07_GeoTif1-00.tif`, `${FakeDomain}/MB07_TIFF_600v1.tif`];
21
23
  it('should parse the correct MapSheet Names', () => {
22
24
  for (const file of validFiles) {
23
25
  const output = extractMapCodeAndVersion(new URL(file.input));
@@ -25,6 +27,10 @@ describe('extractMapCodeAndVersion', () => {
25
27
  strictEqual(output.version, file.expected.version, 'Version does not match');
26
28
  }
27
29
  });
30
+ /**
31
+ * invalid tests
32
+ */
33
+ const invalidFiles = [`${FakeDomain}/MB07_GeoTif1-00.tif`, `${FakeDomain}/MB07_TIFF_600v1.tif`];
28
34
  it('should not able to parse a version from file', () => {
29
35
  for (const file of invalidFiles) {
30
36
  throws(() => extractMapCodeAndVersion(new URL(file)), new Error(`Version not found in the file name: "${file}"`));
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.test.js","sourceRoot":"","sources":["../../../../src/cogify/__test__/topo/extract.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,MAAM,UAAU,GAAG,8BAA8B,CAAC;IAElD;;OAEG;IACH,MAAM,UAAU,GAAG;QACjB,EAAE,KAAK,EAAE,GAAG,UAAU,uBAAuB,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QAChG,EAAE,KAAK,EAAE,GAAG,UAAU,gCAAgC,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QACzG,EAAE,KAAK,EAAE,GAAG,UAAU,qBAAqB,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QAC9F,EAAE,KAAK,EAAE,GAAG,UAAU,yBAAyB,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QAClG;YACE,KAAK,EAAE,GAAG,UAAU,sCAAsC;YAC1D,QAAQ,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,OAAO,EAAE;SAC/D;QACD;YACE,KAAK,EAAE,GAAG,UAAU,sCAAsC;YAC1D,QAAQ,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,OAAO,EAAE;SAC/D;KACF,CAAC;IACF,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,wBAAwB,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7D,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;YAC9E,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH;;OAEG;IACH,MAAM,YAAY,GAAG,CAAC,GAAG,UAAU,sBAAsB,EAAE,GAAG,UAAU,sBAAsB,CAAC,CAAC;IAEhG,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,EAAE,CAAC,wBAAwB,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,wCAAwC,IAAI,GAAG,CAAC,CAAC,CAAC;QACpH,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,39 @@
1
+ import { strictEqual } from 'node:assert';
2
+ import { describe, it } from 'node:test';
3
+ import { Epsg } from '@basemaps/geo';
4
+ import { mapEpsgToSlug } from '../../topo/slug.js';
5
+ describe('mapEpsgToSlug', () => {
6
+ /**
7
+ * valid tests
8
+ */
9
+ const validParameters = [
10
+ { parameters: { mapSeries: 'topo25', epsgCode: 3788 }, expected: 'topo25-snares-islands' },
11
+ { parameters: { mapSeries: 'topo50', epsgCode: 5479 }, expected: 'topo50-antarctic' },
12
+ { parameters: { mapSeries: 'topo250', epsgCode: 2193 }, expected: 'topo250-new-zealand-mainland' },
13
+ ];
14
+ it('should return the expected slug values', () => {
15
+ for (const { parameters, expected } of validParameters) {
16
+ const { mapSeries, epsgCode } = parameters;
17
+ const epsg = Epsg.tryGet(epsgCode) ?? new Epsg(epsgCode);
18
+ const slug = mapEpsgToSlug(mapSeries, epsg);
19
+ strictEqual(slug, expected, 'Slug does not match');
20
+ }
21
+ });
22
+ /**
23
+ * invalid tests
24
+ */
25
+ const invalidParameters = [
26
+ { parameters: { mapSeries: 'topo25', epsgCode: 9999 } },
27
+ { parameters: { mapSeries: 'topo50', epsgCode: 9999 } },
28
+ { parameters: { mapSeries: 'topo250', epsgCode: 9999 } },
29
+ ];
30
+ it('should return null', () => {
31
+ for (const { parameters } of invalidParameters) {
32
+ const { mapSeries, epsgCode } = parameters;
33
+ const epsg = Epsg.tryGet(epsgCode) ?? new Epsg(epsgCode);
34
+ const slug = mapEpsgToSlug(mapSeries, epsg);
35
+ strictEqual(slug, null, 'Result is not null');
36
+ }
37
+ });
38
+ });
39
+ //# sourceMappingURL=slug.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slug.test.js","sourceRoot":"","sources":["../../../../src/cogify/__test__/topo/slug.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B;;OAEG;IACH,MAAM,eAAe,GAAG;QACtB,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,QAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,uBAAuB,EAAE;QACnG,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,QAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE;QAC9F,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,SAAkB,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,8BAA8B,EAAE;KAC5G,CAAC;IAEF,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,KAAK,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,eAAe,EAAE,CAAC;YACvD,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC;YAE3C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEzD,MAAM,IAAI,GAAG,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC5C,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH;;OAEG;IACH,MAAM,iBAAiB,GAAG;QACxB,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,QAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;QAChE,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,QAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;QAChE,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,SAAkB,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;KAClE,CAAC;IAEF,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,KAAK,MAAM,EAAE,UAAU,EAAE,IAAI,iBAAiB,EAAE,CAAC;YAC/C,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC;YAE3C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEzD,MAAM,IAAI,GAAG,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC5C,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,oBAAoB,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,131 @@
1
+ import assert from 'node:assert';
2
+ import { describe, it } from 'node:test';
3
+ import { geojsonToBbox } from '../cli.charts.js';
4
+ describe('geojsonToBbox', () => {
5
+ it('should calculate bbox for a Polygon', () => {
6
+ const geojson = {
7
+ type: 'FeatureCollection',
8
+ features: [
9
+ {
10
+ type: 'Feature',
11
+ properties: {},
12
+ geometry: {
13
+ type: 'Polygon',
14
+ coordinates: [
15
+ [
16
+ [0, 0],
17
+ [0, 10],
18
+ [10, 10],
19
+ [10, 0],
20
+ [0, 0],
21
+ ],
22
+ ],
23
+ },
24
+ },
25
+ ],
26
+ };
27
+ const bbox = geojsonToBbox(geojson);
28
+ assert.deepEqual(bbox, [0, 0, 10, 10]);
29
+ });
30
+ it('should calculate intersection of two Polygons', () => {
31
+ const geojson = {
32
+ type: 'FeatureCollection',
33
+ features: [
34
+ {
35
+ type: 'Feature',
36
+ properties: {},
37
+ geometry: {
38
+ type: 'Polygon',
39
+ coordinates: [
40
+ [
41
+ [0, 0],
42
+ [0, 10],
43
+ [10, 10],
44
+ [10, 0],
45
+ [0, 0],
46
+ ],
47
+ ],
48
+ },
49
+ },
50
+ {
51
+ type: 'Feature',
52
+ properties: {},
53
+ geometry: {
54
+ type: 'Polygon',
55
+ coordinates: [
56
+ [
57
+ [5, 5],
58
+ [5, 15],
59
+ [15, 15],
60
+ [15, 5],
61
+ [5, 5],
62
+ ],
63
+ ],
64
+ },
65
+ },
66
+ ],
67
+ };
68
+ const bbox = geojsonToBbox(geojson);
69
+ assert.deepEqual(bbox, [0, 0, 15, 15]);
70
+ });
71
+ it('should calculate bbox for a MultiPolygon', () => {
72
+ const geojson = {
73
+ type: 'FeatureCollection',
74
+ features: [
75
+ {
76
+ type: 'Feature',
77
+ properties: {},
78
+ geometry: {
79
+ type: 'MultiPolygon',
80
+ coordinates: [
81
+ [
82
+ [
83
+ [5, 5],
84
+ [5, 15],
85
+ [15, 15],
86
+ [15, 5],
87
+ [5, 5],
88
+ ],
89
+ ],
90
+ [
91
+ [
92
+ [0, 0],
93
+ [0, 10],
94
+ [10, 10],
95
+ [10, 0],
96
+ [0, 0],
97
+ ],
98
+ ],
99
+ ],
100
+ },
101
+ },
102
+ ],
103
+ };
104
+ const bbox = geojsonToBbox(geojson);
105
+ assert.deepEqual(bbox, [0, 0, 15, 15]);
106
+ });
107
+ it('should throw for unsupported geometry type', () => {
108
+ const geojson = {
109
+ type: 'FeatureCollection',
110
+ features: [
111
+ {
112
+ type: 'Feature',
113
+ properties: {},
114
+ geometry: {
115
+ type: 'Point',
116
+ coordinates: [0, 0],
117
+ },
118
+ },
119
+ ],
120
+ };
121
+ assert.throws(() => geojsonToBbox(geojson), /must contain Polygon or MultiPolygon/);
122
+ });
123
+ it('should throw if no features', () => {
124
+ const geojson = {
125
+ type: 'FeatureCollection',
126
+ features: [],
127
+ };
128
+ assert.throws(() => geojsonToBbox(geojson), /No union found in GeoJSON features/);
129
+ });
130
+ });
131
+ //# sourceMappingURL=cli.charts.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.charts.test.js","sourceRoot":"","sources":["../../../../src/cogify/cli/__test__/cli.charts.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { FeatureCollection } from 'geojson';
2
+ /**
3
+ * Process and standardize charts maps tiffs, and creating STAC collections and items.
4
+ *
5
+ * @param source: Location of the source files
6
+ * @example s3://linz-hydrographic-upload/charts/NChart1200/
7
+ *
8
+ * @param target: Location of the target path
9
+ */
10
+ export declare const ChartsCreationCommand: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
11
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
12
+ source: globalThis.URL | undefined;
13
+ target: globalThis.URL;
14
+ tileMatrix: string;
15
+ cutline: globalThis.URL;
16
+ backup: globalThis.URL;
17
+ bufferPixels: number;
18
+ paths: globalThis.URL[];
19
+ verbose: boolean;
20
+ extraVerbose: boolean;
21
+ }>>;
22
+ } & 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<{
23
+ source: globalThis.URL | undefined;
24
+ target: globalThis.URL;
25
+ tileMatrix: string;
26
+ cutline: globalThis.URL;
27
+ backup: globalThis.URL;
28
+ bufferPixels: number;
29
+ paths: globalThis.URL[];
30
+ verbose: boolean;
31
+ extraVerbose: boolean;
32
+ }, Promise<void>> & {
33
+ run(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<Promise<void>>>;
34
+ } & 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>;
35
+ export declare function geojsonToBbox(geojson: FeatureCollection): GeoJSON.BBox;
@@ -0,0 +1,303 @@
1
+ import { Bounds, EpsgCode, GoogleTms, Nztm2000QuadTms, TileMatrixSets } from '@basemaps/geo';
2
+ import { fsa, stringToUrlFolder, Tiff, urlToString } from '@basemaps/shared';
3
+ import { getLogger, logArguments, Url, UrlFolder } from '@basemaps/shared';
4
+ import { CliDate, CliId, CliInfo } from '@basemaps/shared/build/cli/info.js';
5
+ import { TiffTag, TiffTagGeo } from '@cogeotiff/core';
6
+ import { command, number, oneOf, option, optional, restPositionals } from 'cmd-ts';
7
+ import { mkdir, rm } from 'fs/promises';
8
+ import { tmpdir } from 'os';
9
+ import pLimit from 'p-limit';
10
+ import path from 'path';
11
+ import { URL } from 'url';
12
+ import { gdalBuildChartsCommand } from '../gdal/gdal.command.js';
13
+ import { GdalRunner } from '../gdal/gdal.runner.js';
14
+ import { bufferCutline, reprojectCutline, wrapCutline } from '../gdal/ogr2ogr.command.js';
15
+ /** Limit the creation of COGs to concurrency at the same time */
16
+ const Q = pLimit(10);
17
+ // ChartCode regex
18
+ const chartCodeRegex = /^[A-Z]{2}\d+-\d+$/;
19
+ // Prepare a temporary folder to store the gdal processed cutlines and tiffs
20
+ const tmpFolder = stringToUrlFolder(path.join(tmpdir(), CliId));
21
+ /**
22
+ * Process and standardize charts maps tiffs, and creating STAC collections and items.
23
+ *
24
+ * @param source: Location of the source files
25
+ * @example s3://linz-hydrographic-upload/charts/NChart1200/
26
+ *
27
+ * @param target: Location of the target path
28
+ */
29
+ export const ChartsCreationCommand = command({
30
+ name: 'cogify-charts',
31
+ version: CliInfo.version,
32
+ description: 'List input charts map files, cutting off the edges and creating standardized outputs.',
33
+ args: {
34
+ ...logArguments,
35
+ source: option({
36
+ type: optional(UrlFolder),
37
+ long: 'source',
38
+ description: 'Source location of the charts tiffs',
39
+ }),
40
+ target: option({
41
+ type: UrlFolder,
42
+ long: 'target',
43
+ description: 'Target location for the output files',
44
+ }),
45
+ tileMatrix: option({
46
+ type: oneOf([Nztm2000QuadTms.identifier, GoogleTms.identifier]),
47
+ long: 'tile-matrix',
48
+ description: `Output TileMatrix to use. Either: ${Nztm2000QuadTms.identifier}, or ${GoogleTms.identifier}.`,
49
+ defaultValue: () => GoogleTms.identifier,
50
+ defaultValueIsSerializable: true,
51
+ }),
52
+ cutline: option({
53
+ type: UrlFolder,
54
+ long: 'cutline',
55
+ defaultValue: () => new URL('s3://linz-hydrographic-upload/charts/RNCPANEL/'),
56
+ description: 'Location of the cutlines to cut tiffs, save the shp files for the cutlines.',
57
+ }),
58
+ backup: option({
59
+ type: UrlFolder,
60
+ long: 'backup',
61
+ defaultValue: () => new URL('s3://linz-hydrographic-upload/charts/CChart/'),
62
+ description: 'Location of the backup tiff files for get all the imagery metadata.',
63
+ }),
64
+ bufferPixels: option({
65
+ type: number,
66
+ long: 'buffer-pixels',
67
+ defaultValue: () => 10,
68
+ description: 'Number of pixels to buffer the cutlines.',
69
+ }),
70
+ paths: restPositionals({
71
+ type: Url,
72
+ description: 'Source paths for the charts tiffs',
73
+ }),
74
+ },
75
+ async handler(args) {
76
+ const logger = getLogger(this, args, 'cli-raster');
77
+ logger.info('Charts:Start');
78
+ const files = args.source ? await fsa.toArray(fsa.list(args.source)) : args.paths;
79
+ const tileMatrix = TileMatrixSets.find(args.tileMatrix);
80
+ if (tileMatrix == null)
81
+ throw new Error(`Tile matrix ${args.tileMatrix} is not supported`);
82
+ // Process and standardize charts maps tiffs
83
+ await mkdir(tmpFolder, { recursive: true });
84
+ const outputs = new Set();
85
+ const toProcess = files.map((file) => Q(async () => {
86
+ if (!file.href.endsWith('.tif'))
87
+ return;
88
+ const filename = file.pathname.split('/').pop();
89
+ if (filename == null) {
90
+ logger.warn({ file }, 'Filename not found in URL');
91
+ return;
92
+ }
93
+ const chartCode = filename?.split('.')[0];
94
+ if (chartCode == null || !chartCodeRegex.test(chartCode)) {
95
+ logger.warn({ file }, 'Chart code not found or invalid');
96
+ return;
97
+ }
98
+ // Download the source tiff file and cutline files
99
+ const sourceTiff = await downloadCharts(file, filename, logger);
100
+ const cutline = await downloadCutlines(new URL(args.cutline.href), chartCode, logger);
101
+ logger.info({ file: file.href, tileMatrix: tileMatrix.identifier, chartCode }, 'Charts:Processing');
102
+ const tiff = await new Tiff(fsa.source(file)).init();
103
+ const backUpUrl = new URL(filename, args.backup);
104
+ const metadata = await fetchMetadata(tiff, backUpUrl, logger);
105
+ // Prepare buffered cutline
106
+ const bufferedCutline = await prepareCutline(cutline, chartCode, tileMatrix, metadata.gsd, args.bufferPixels, logger);
107
+ // Create a STAC files for the chart map
108
+ const { item, collection } = await createStacFiles(chartCode, tileMatrix, metadata, cutline, bufferedCutline, logger);
109
+ // Create Cog for the chart map
110
+ logger.info({ file: file.href, chartCode, tileMatrix: tileMatrix.identifier }, 'Charts:GdalBuildCharts');
111
+ const cogFile = new URL(`${chartCode}-${tileMatrix.identifier}.tif`, tmpFolder);
112
+ await new GdalRunner(gdalBuildChartsCommand(cogFile, sourceTiff, bufferedCutline, tileMatrix)).run(logger);
113
+ // write the cog file to the target path
114
+ const targetPath = new URL(`${tileMatrix.projection.code}/${chartCode}/`, args.target);
115
+ logger.info({ file: file.href, target: targetPath.href }, 'Charts:Uploading');
116
+ if (targetPath.protocol === 'file:')
117
+ await mkdir(targetPath, { recursive: true });
118
+ const targetTiff = new URL(filename, targetPath);
119
+ await fsa.write(targetTiff, fsa.readStream(cogFile));
120
+ // Write the item and collection to the target path
121
+ const targetItem = new URL(`${chartCode}.json`, targetPath);
122
+ await fsa.write(targetItem, JSON.stringify(item, null, 2));
123
+ const targetCollection = new URL('collection.json', targetPath);
124
+ await fsa.write(targetCollection, JSON.stringify(collection, null, 2));
125
+ // Add the target files to the outputs
126
+ outputs.add(urlToString(targetPath));
127
+ await tiff.source.close?.();
128
+ }));
129
+ await Promise.all(toProcess);
130
+ await fsa.write(fsa.toUrl('/tmp/extract/output.json'), JSON.stringify(Array.from(outputs), null, 2));
131
+ logger.info({ outputCount: outputs.size, target: args.target.href }, 'Charts:Done');
132
+ await rm(tmpFolder, { recursive: true, force: true });
133
+ },
134
+ });
135
+ // Download Charts Tiff files into local folder for dgal to process
136
+ async function downloadCharts(file, filename, logger) {
137
+ logger.info({ file: file.href, filename }, 'Charts:DownloadTiff');
138
+ if ((await fsa.head(file)) == null)
139
+ throw new Error(`File does not exist: ${file.href}`);
140
+ const sourceTiff = new URL(filename, tmpFolder);
141
+ await fsa.write(sourceTiff, fsa.readStream(file));
142
+ return sourceTiff;
143
+ }
144
+ // Download Charts Cutlines into local folder for gdal to process
145
+ async function downloadCutlines(cutline, chartCode, logger) {
146
+ logger.info({ cutline: cutline.href, chartCode }, 'Charts:DownloadCutline');
147
+ const formats = ['shp', 'shx', 'dbf', 'prj'];
148
+ for (const format of formats) {
149
+ const cutlineFile = new URL(`${chartCode}.${format}`, tmpFolder);
150
+ const cutlineUrl = new URL(`${cutline.href}${chartCode}.${format}`);
151
+ if ((await fsa.head(cutlineUrl)) == null) {
152
+ logger.warn({ cutline: cutlineUrl.href }, 'Charts:Cutline does not exist');
153
+ continue;
154
+ }
155
+ await fsa.write(cutlineFile, fsa.readStream(cutlineUrl));
156
+ }
157
+ return new URL(`${chartCode}.shp`, tmpFolder);
158
+ }
159
+ /**
160
+ * Prepare the cutline for charts mapsheets by wrapping, reprojecting, and buffering it to remove edge artifacts.
161
+ */
162
+ async function prepareCutline(cutline, chartCode, tileMatrix, gsd, bufferPixels, logger) {
163
+ // Wrap the cutline to multipolygon if it crosses the Prime Meridian
164
+ logger.info({ cutline: cutline.href, chartCode }, 'Charts:WrapCutline');
165
+ const wrappedCutline = new URL(`${chartCode}-wrapped.shp`, tmpFolder);
166
+ await new GdalRunner(wrapCutline(wrappedCutline, cutline)).run(logger);
167
+ // Reproject the cutline to the target tile matrix
168
+ logger.info({ cutline: cutline.href, chartCode, tileMatrix: tileMatrix.identifier }, 'Charts:ReprojectCutline');
169
+ const reprojectedCutline = new URL(`${chartCode}-${tileMatrix.identifier}.shp`, tmpFolder);
170
+ await new GdalRunner(reprojectCutline(reprojectedCutline, wrappedCutline, tileMatrix)).run(logger);
171
+ // Buffer the cutline
172
+ logger.info({ cutline: cutline.href, chartCode, gsd, bufferPixels }, 'Charts:BufferCutline');
173
+ const bufferedCutline = new URL(`${chartCode}-buffered.geojson`, tmpFolder);
174
+ await new GdalRunner(bufferCutline(bufferedCutline, reprojectedCutline, `${chartCode}-${tileMatrix.identifier}`, gsd, bufferPixels)).run(logger);
175
+ return bufferedCutline;
176
+ }
177
+ /**
178
+ * Fetch the Ground Sample Distance (GSD) and Bounding Box (BBOX) from the TIFF file.
179
+ * Some of charts mapsheets do not have the GSD in the original TIFF metadata.(NChart1200 folder)
180
+ * But the GSD is always the same for the same chart code tiff files from other folders (CChart).
181
+ * If the GSD is not found, it attempts to fetch it from a backup location.
182
+ */
183
+ async function fetchMetadata(tiff, backUpUrl, logger) {
184
+ logger.info({ file: tiff.source.url }, 'Charts:FetchImageryMetadata');
185
+ const source = tiff.source.url;
186
+ const size = tiff.images[0].size;
187
+ const epsg = tiff.images[0].epsg ?? tiff.images[0].valueGeo(TiffTagGeo.GeodeticCRSGeoKey) ?? EpsgCode.Wgs84;
188
+ try {
189
+ const gsd = tiff.images[0].resolution[0];
190
+ return { source, gsd, epsg, size };
191
+ }
192
+ catch (error) {
193
+ logger.warn({ file: tiff.source.url }, 'Tag not found try to fetch from back up folder');
194
+ const exist = await fsa.head(backUpUrl);
195
+ if (!exist)
196
+ throw new Error(`No back up file to extract metadata: ${backUpUrl.href}`);
197
+ const backUpTiff = await new Tiff(fsa.source(backUpUrl)).init();
198
+ const backUpTag = await backUpTiff.images[0].fetch(TiffTag.ModelPixelScale);
199
+ if (backUpTag == null)
200
+ throw new Error(`ModelPixelScale tag not found in ${backUpUrl.href}`);
201
+ await backUpTiff.source.close?.();
202
+ return {
203
+ source: tiff.source.url,
204
+ gsd: backUpTag[0],
205
+ epsg,
206
+ size: tiff.images[0].size,
207
+ };
208
+ }
209
+ }
210
+ export function geojsonToBbox(geojson) {
211
+ let union = null;
212
+ for (const feature of geojson.features) {
213
+ let bounds;
214
+ if (feature.geometry.type === 'Polygon') {
215
+ bounds = Bounds.fromMultiPolygon([feature.geometry.coordinates]);
216
+ }
217
+ else if (feature.geometry.type === 'MultiPolygon') {
218
+ bounds = Bounds.fromMultiPolygon(feature.geometry.coordinates);
219
+ }
220
+ else {
221
+ throw new Error('GeoJSON must contain Polygon or MultiPolygon geometries');
222
+ }
223
+ if (union == null) {
224
+ union = bounds;
225
+ }
226
+ else {
227
+ union = union.union(bounds);
228
+ }
229
+ }
230
+ if (union == null)
231
+ throw new Error('No union found in GeoJSON features');
232
+ return union.toBbox();
233
+ }
234
+ async function createStacFiles(chartCode, tileMatrix, metadata, sourceCutline, bufferedCutline, logger) {
235
+ // Create stac item
236
+ logger.info({ chartCode }, 'Charts:CreateStacItem');
237
+ const geojson = await fsa.readJson(bufferedCutline);
238
+ const item = {
239
+ id: `${CliId}/${chartCode}`,
240
+ type: 'Feature',
241
+ collection: CliId,
242
+ stac_version: '1.0.0-beta.2',
243
+ stac_extensions: [],
244
+ geometry: geojson.features[0].geometry,
245
+ bbox: geojsonToBbox(geojson),
246
+ links: [
247
+ { href: `./${chartCode}.json`, rel: 'self' },
248
+ { href: './collection.json', rel: 'collection' },
249
+ { href: './collection.json', rel: 'parent' },
250
+ {
251
+ href: urlToString(metadata.source),
252
+ rel: 'linz_basemaps:source',
253
+ type: 'image/tiff; application=geotiff;',
254
+ 'linz_basemaps:source_height': metadata.size.height,
255
+ 'linz_basemaps:source_width': metadata.size.width,
256
+ },
257
+ {
258
+ href: urlToString(sourceCutline),
259
+ rel: 'linz_basemaps:cutline',
260
+ },
261
+ ],
262
+ properties: {
263
+ datetime: CliDate,
264
+ 'proj:epsg': tileMatrix.projection.code,
265
+ 'linz_basemaps:options': {
266
+ tileMatrix: tileMatrix.identifier,
267
+ sourceEpsg: metadata.epsg,
268
+ },
269
+ 'linz_basemaps:generated': {
270
+ package: CliInfo.package,
271
+ hash: CliInfo.hash,
272
+ version: CliInfo.version,
273
+ datetime: CliDate,
274
+ },
275
+ },
276
+ assets: {},
277
+ };
278
+ // Create stac collection
279
+ logger.info({ chartCode }, 'Charts:CreateStacCollection');
280
+ const collection = {
281
+ id: CliId,
282
+ type: 'Collection',
283
+ stac_version: '1.0.0',
284
+ stac_extensions: [],
285
+ license: 'CC-BY-4.0',
286
+ title: `New Zealand Charts Mapsheets - ${chartCode}`,
287
+ description: `New Zealand Charts Mapsheets - ${chartCode} - ${tileMatrix.identifier}`,
288
+ extent: {
289
+ spatial: { bbox: [item.bbox] },
290
+ temporal: { interval: [[CliDate, null]] },
291
+ },
292
+ links: [
293
+ { rel: 'self', href: './collection.json', type: 'application/json' },
294
+ {
295
+ href: `./${item.id}.json`,
296
+ rel: 'item',
297
+ type: 'application/json',
298
+ },
299
+ ],
300
+ };
301
+ return { item, collection };
302
+ }
303
+ //# sourceMappingURL=cli.charts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.charts.js","sourceRoot":"","sources":["../../../src/cogify/cli/cli.charts.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { isEmptyTiff } from '@basemaps/config-loader';
2
- import { Projection, ProjectionLoader, TileId, TileMatrixSets } from '@basemaps/geo';
2
+ import { Projection, ProjectionLoader, TileId, TileMatrixSets, TmsLoader } from '@basemaps/geo';
3
3
  import { fsa, stringToUrlFolder, Tiff } from '@basemaps/shared';
4
4
  import { getLogger, logArguments, Url, UrlArrayJsonFile } from '@basemaps/shared';
5
5
  import { CliId, CliInfo } from '@basemaps/shared/build/cli/info.js';
@@ -124,7 +124,7 @@ export const BasemapsCogifyCreateCommand = command({
124
124
  // Location to where the tiff should be stored
125
125
  const tiffPath = new URL(tileId + '.tiff', url);
126
126
  const itemStacPath = new URL(tileId + '.json', url);
127
- const tileMatrix = TileMatrixSets.find(options.tileMatrix);
127
+ const tileMatrix = TileMatrixSets.find(options.tileMatrix) ?? (await TmsLoader.load(options.sourceEpsg));
128
128
  if (tileMatrix == null)
129
129
  throw new Error('Failed to find tileMatrix: ' + options.tileMatrix);
130
130
  const sourceFiles = getSources(item.links);