@basemaps/cli-raster 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +70 -0
  3. package/build/bin.d.ts +1 -0
  4. package/build/bin.js +16 -0
  5. package/build/bin.js.map +1 -0
  6. package/build/cogify/__test__/covering.test.d.ts +1 -0
  7. package/build/cogify/__test__/covering.test.js +64 -0
  8. package/build/cogify/__test__/covering.test.js.map +1 -0
  9. package/build/cogify/__test__/extract.test.d.ts +1 -0
  10. package/build/cogify/__test__/extract.test.js +34 -0
  11. package/build/cogify/__test__/extract.test.js.map +1 -0
  12. package/build/cogify/cli/__test__/cli.cover.test.d.ts +1 -0
  13. package/build/cogify/cli/__test__/cli.cover.test.js +48 -0
  14. package/build/cogify/cli/__test__/cli.cover.test.js.map +1 -0
  15. package/build/cogify/cli/__test__/cli.topo.test.d.ts +1 -0
  16. package/build/cogify/cli/__test__/cli.topo.test.js +53 -0
  17. package/build/cogify/cli/__test__/cli.topo.test.js.map +1 -0
  18. package/build/cogify/cli/cli.cog.d.ts +55 -0
  19. package/build/cogify/cli/cli.cog.js +353 -0
  20. package/build/cogify/cli/cli.cog.js.map +1 -0
  21. package/build/cogify/cli/cli.cover.d.ts +30 -0
  22. package/build/cogify/cli/cli.cover.js +157 -0
  23. package/build/cogify/cli/cli.cover.js.map +1 -0
  24. package/build/cogify/cli/cli.topo.d.ts +50 -0
  25. package/build/cogify/cli/cli.topo.js +169 -0
  26. package/build/cogify/cli/cli.topo.js.map +1 -0
  27. package/build/cogify/cli/cli.validate.d.ts +15 -0
  28. package/build/cogify/cli/cli.validate.js +30 -0
  29. package/build/cogify/cli/cli.validate.js.map +1 -0
  30. package/build/cogify/cli.d.ts +121 -0
  31. package/build/cogify/cli.js +15 -0
  32. package/build/cogify/cli.js.map +1 -0
  33. package/build/cogify/covering/covering.d.ts +28 -0
  34. package/build/cogify/covering/covering.js +126 -0
  35. package/build/cogify/covering/covering.js.map +1 -0
  36. package/build/cogify/covering/cutline.d.ts +29 -0
  37. package/build/cogify/covering/cutline.js +109 -0
  38. package/build/cogify/covering/cutline.js.map +1 -0
  39. package/build/cogify/covering/tile.cover.d.ts +38 -0
  40. package/build/cogify/covering/tile.cover.js +198 -0
  41. package/build/cogify/covering/tile.cover.js.map +1 -0
  42. package/build/cogify/gdal/gdal.command.d.ts +27 -0
  43. package/build/cogify/gdal/gdal.command.js +175 -0
  44. package/build/cogify/gdal/gdal.command.js.map +1 -0
  45. package/build/cogify/gdal/gdal.runner.d.ts +42 -0
  46. package/build/cogify/gdal/gdal.runner.js +194 -0
  47. package/build/cogify/gdal/gdal.runner.js.map +1 -0
  48. package/build/cogify/stac.d.ts +138 -0
  49. package/build/cogify/stac.js +25 -0
  50. package/build/cogify/stac.js.map +1 -0
  51. package/build/cogify/topo/extract.d.ts +82 -0
  52. package/build/cogify/topo/extract.js +195 -0
  53. package/build/cogify/topo/extract.js.map +1 -0
  54. package/build/cogify/topo/slug.d.ts +10 -0
  55. package/build/cogify/topo/slug.js +18 -0
  56. package/build/cogify/topo/slug.js.map +1 -0
  57. package/build/cogify/topo/stac.creation.d.ts +47 -0
  58. package/build/cogify/topo/stac.creation.js +171 -0
  59. package/build/cogify/topo/stac.creation.js.map +1 -0
  60. package/build/download.d.ts +57 -0
  61. package/build/download.js +144 -0
  62. package/build/download.js.map +1 -0
  63. package/build/hash.stream.d.ts +20 -0
  64. package/build/hash.stream.js +62 -0
  65. package/build/hash.stream.js.map +1 -0
  66. package/build/index.d.ts +1 -0
  67. package/build/index.js +2 -0
  68. package/build/index.js.map +1 -0
  69. package/build/preset.d.ts +15 -0
  70. package/build/preset.js +66 -0
  71. package/build/preset.js.map +1 -0
  72. package/dist/index.cjs +85880 -0
  73. package/package.json +61 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Crown copyright (c), Toitū Te Whenua Land Information New Zealand on behalf of the New Zealand Government.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,70 @@
1
+ # @basemaps/cli-raster
2
+
3
+ CLI to retile imagery into a [Cloud Optimised Geotiffs (COG)](https://www.cogeo.org/) aligned to a [TileMatrix](https://www.ogc.org/standard/tms/)
4
+
5
+ ## Why ?
6
+
7
+ LINZ gets most of it's imagery delivered as tiles in [NZTM2000](https://www.linz.govt.nz/guidance/geodetic-system/coordinate-systems-used-new-zealand/projections/new-zealand-transverse-mercator-2000-nztm2000) the imagery is tiled as rectangles against a tile grid such as the [1:5k](https://data.linz.govt.nz/layer/104691-nz-15k-tile-index/) or [1:1k](https://data.linz.govt.nz/layer/104692-nz-11k-tile-index/).
8
+
9
+ These grids are not designed for use in XYZ tiles services in [WebMercator/EPSG:3857](https://epsg.io/3857), If the tiles were converted directly to WebMercator there would be significant overlap between multiple source imagery tiffs and a output WebMercator tile. This would cause large overheads for basemaps to render tiles as it would need to fetch data from all of the tiffs inside of the output tile.
10
+
11
+ ![NZTM Tile Index vs WebMercator](./static/nztm-tile-index.png)
12
+ Above is an example of a web mercator zoom 11 tile (Red outline) and the number `1:5k` tiles required to render (Shaded black) it
13
+
14
+ This package contains the logic to process input imagery into a output Tile Matrix to create optimised COGs for web mapping purposes.
15
+
16
+ The output COGS perfectly align to a output tile, greatly increasing XYZ tile service performance.
17
+
18
+ ### Process
19
+
20
+ To convert imagery to optimized COG, a output tile cover is created, this covers the source imagery in tiles from the output tile matrix.
21
+
22
+ ```
23
+ cogify cover --tile-matrix WebMercatorQuad s3://linz-imagery/.../porirua_2020_0.1m --target ./output
24
+ ```
25
+
26
+ The metadata for the optimized COGS is written into the output folder where the COG creation step can use [GDAL](https://github.com/gdal/gdal) to create the output tiff.
27
+
28
+
29
+ ```
30
+ cogify create ./output/WebMercatorQuad/porirua_2020_0.1m/01GY8W69EJEMAKKXNHYMRF7DCY/14-16150-10245.json
31
+ ```
32
+
33
+ The output COG can be validated to ensure it matches the tile exactly.
34
+
35
+ ```
36
+ cogify validate --tile-matrix WebMercatorQuad ./output/WebMercatorQuad/porirua_2020_0.1m/01GY8W69EJEMAKKXNHYMRF7DCY/14-16150-10245.tiff
37
+ ```
38
+
39
+ ## Usage
40
+
41
+
42
+ Install `cogify` using `npm`
43
+ ```
44
+ npm install -g @basemaps/cli-raster
45
+ ```
46
+
47
+
48
+ ```
49
+ $ cogify --help
50
+
51
+ - cover - Create a covering configuration from a collection from source imagery
52
+ - create - Create a COG from a covering configuration
53
+ ```
54
+
55
+
56
+ ### Covering
57
+
58
+ Create a tile covering for WebMeractorQuad from source imagery located in s3 and outputs the resulting configuration files into `./output/:projection/:imageryName/:id/collection.json`
59
+
60
+ ```
61
+ cogify cover --tile-matrix WebMercatorQuad s3://linz-imagery/new-zealand/north-island_2023_0.5m/rgb/2193/ --target ./output
62
+ ```
63
+
64
+ ### Create
65
+
66
+ Create the first COG from the list
67
+ ```
68
+ cogify create ./output/3857/north-island_2023_0.5m/:id/14-16150-10245.json
69
+ ```
70
+
package/build/bin.d.ts ADDED
@@ -0,0 +1 @@
1
+ export {};
package/build/bin.js ADDED
@@ -0,0 +1,16 @@
1
+ Error.stackTraceLimit = 100;
2
+ import { Fqdn, fsa, LogConfig } from '@basemaps/shared';
3
+ import { run } from 'cmd-ts';
4
+ import { CogifyCli } from './cogify/cli.js';
5
+ // Force Fully qualified domain names to reduce DNS lookups
6
+ Fqdn.isForcedFqdn = true;
7
+ // remove the source caching / chunking as it is not needed for cogify, cogify only reads tiffs once so caching the result is not helpful
8
+ fsa.middleware = fsa.middleware.filter((f) => f.name !== 'source:chunk');
9
+ fsa.middleware = fsa.middleware.filter((f) => f.name !== 'source:cache');
10
+ run(CogifyCli, process.argv.slice(2)).catch((err) => {
11
+ const logger = LogConfig.get();
12
+ logger.fatal({ err }, 'Command:Failed');
13
+ // Give the logger some time to flush before exiting
14
+ setTimeout(() => process.exit(1), 25);
15
+ });
16
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"AAAA,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC;AAE5B,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,2DAA2D;AAC3D,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AAEzB,yIAAyI;AACzI,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;AACzE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;AAEzE,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAClD,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC;IAC/B,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAExC,oDAAoD;IACpD,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,64 @@
1
+ import assert from 'node:assert';
2
+ import { describe, it } from 'node:test';
3
+ import { GoogleTms, QuadKey } from '@basemaps/geo';
4
+ import { gsdToMeter } from '../cli/cli.cover.js';
5
+ import { addChildren, addSurrounding } from '../covering/covering.js';
6
+ describe('getChildren', () => {
7
+ it('should get children', () => {
8
+ assert.deepEqual(addChildren({ z: 0, x: 0, y: 0 }), [
9
+ { z: 1, x: 0, y: 0 },
10
+ { z: 1, x: 1, y: 0 },
11
+ { z: 1, x: 0, y: 1 },
12
+ { z: 1, x: 1, y: 1 },
13
+ ]);
14
+ });
15
+ ['', '3', '310', '013', '3100123', '3103123231312301'].map((qk) => {
16
+ it('should match QuadKey: ' + qk, () => {
17
+ const tileChildren = addChildren(QuadKey.toTile(qk));
18
+ const qkChildren = QuadKey.children(qk).map((qk) => QuadKey.toTile(qk));
19
+ assert.deepEqual(tileChildren, qkChildren);
20
+ });
21
+ });
22
+ });
23
+ describe('SurroundingTiles', () => {
24
+ it('should not have surrounding tiles at z0', () => {
25
+ const todo = addSurrounding({ z: 0, x: 0, y: 0 }, GoogleTms);
26
+ assert.deepEqual(todo, []);
27
+ });
28
+ it('should add all surrounding tiles', () => {
29
+ assert.deepEqual(addSurrounding({ z: 2, x: 1, y: 1 }, GoogleTms), [
30
+ { z: 2, x: 1, y: 0 },
31
+ { z: 2, x: 2, y: 1 },
32
+ { z: 2, x: 1, y: 2 },
33
+ { z: 2, x: 0, y: 1 },
34
+ ]);
35
+ });
36
+ it('should wrap at matrix extent', () => {
37
+ // Top left tile
38
+ assert.deepEqual(addSurrounding({ z: 2, x: 0, y: 0 }, GoogleTms), [
39
+ { z: 2, x: 0, y: 3 }, // North - Wrapping North to South
40
+ { z: 2, x: 1, y: 0 }, // East
41
+ { z: 2, x: 0, y: 1 }, // South
42
+ { z: 2, x: 3, y: 0 }, // West - Wrapping West to East
43
+ ]);
44
+ // Bottom right tile
45
+ assert.deepEqual(addSurrounding({ z: 2, x: 3, y: 3 }, GoogleTms), [
46
+ { z: 2, x: 3, y: 2 }, // North
47
+ { z: 2, x: 0, y: 3 }, // East -- Wrapping East to West
48
+ { z: 2, x: 3, y: 0 }, // South -- Wrapping South to NOrth
49
+ { z: 2, x: 2, y: 3 }, // West
50
+ ]);
51
+ });
52
+ describe('gsdToMeter', () => {
53
+ it('Should convert gsd to correct meter', () => {
54
+ assert.equal(gsdToMeter(1), 1);
55
+ assert.equal(gsdToMeter(305.223), 305);
56
+ assert.equal(gsdToMeter(8.01), 8);
57
+ assert.equal(gsdToMeter(0.1), 0.1);
58
+ assert.equal(gsdToMeter(0.1001), 0.1);
59
+ assert.equal(gsdToMeter(0.2005), 0.201);
60
+ assert.equal(gsdToMeter(0.0005), 0.001);
61
+ });
62
+ });
63
+ });
64
+ //# sourceMappingURL=covering.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"covering.test.js","sourceRoot":"","sources":["../../../src/cogify/__test__/covering.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,34 @@
1
+ import { strictEqual, throws } from 'node:assert';
2
+ import { describe, it } from 'node:test';
3
+ import { extractMapCodeAndVersion } from '../topo/extract.js';
4
+ describe('extractMapCodeAndVersion', () => {
5
+ const FakeDomain = 's3://topographic/fake-domain';
6
+ const validFiles = [
7
+ { input: `${FakeDomain}/MB07_GeoTifv1-00.tif`, expected: { mapCode: 'MB07', version: 'v1-00' } },
8
+ { input: `${FakeDomain}/MB07_GRIDLESS_GeoTifv1-00.tif`, expected: { mapCode: 'MB07', version: 'v1-00' } },
9
+ { input: `${FakeDomain}/MB07_TIFFv1-00.tif`, expected: { mapCode: 'MB07', version: 'v1-00' } },
10
+ { input: `${FakeDomain}/MB07_TIFF_600v1-00.tif`, expected: { mapCode: 'MB07', version: 'v1-00' } },
11
+ {
12
+ input: `${FakeDomain}/AX32ptsAX31AY31AY32_GeoTifv1-00.tif`,
13
+ expected: { mapCode: 'AX32ptsAX31AY31AY32', version: 'v1-00' },
14
+ },
15
+ {
16
+ input: `${FakeDomain}/AZ36ptsAZ35BA35BA36_GeoTifv1-00.tif`,
17
+ expected: { mapCode: 'AZ36ptsAZ35BA35BA36', version: 'v1-00' },
18
+ },
19
+ ];
20
+ const invalidFiles = [`${FakeDomain}/MB07_GeoTif1-00.tif`, `${FakeDomain}/MB07_TIFF_600v1.tif`];
21
+ it('should parse the correct MapSheet Names', () => {
22
+ for (const file of validFiles) {
23
+ const output = extractMapCodeAndVersion(new URL(file.input));
24
+ strictEqual(output.mapCode, file.expected.mapCode, 'Map code does not match');
25
+ strictEqual(output.version, file.expected.version, 'Version does not match');
26
+ }
27
+ });
28
+ it('should not able to parse a version from file', () => {
29
+ for (const file of invalidFiles) {
30
+ throws(() => extractMapCodeAndVersion(new URL(file)), new Error(`Version not found in the file name: "${file}"`));
31
+ }
32
+ });
33
+ });
34
+ //# sourceMappingURL=extract.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.test.js","sourceRoot":"","sources":["../../../src/cogify/__test__/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,oBAAoB,CAAC;AAE9D,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,MAAM,UAAU,GAAG,8BAA8B,CAAC;IAClD,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,MAAM,YAAY,GAAG,CAAC,GAAG,UAAU,sBAAsB,EAAE,GAAG,UAAU,sBAAsB,CAAC,CAAC;IAEhG,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,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,48 @@
1
+ import assert from 'node:assert';
2
+ import { beforeEach, describe, it } from 'node:test';
3
+ import { fsa, FsMemory, LogConfig } from '@basemaps/shared';
4
+ import { TestTiff } from '@basemaps/test';
5
+ import { BasemapsCogifyCoverCommand } from '../cli.cover.js';
6
+ describe('cli.cover', () => {
7
+ const fsMemory = new FsMemory();
8
+ beforeEach(async () => {
9
+ LogConfig.get().level = 'silent';
10
+ fsa.register('memory://', fsMemory);
11
+ fsMemory.files.clear();
12
+ await fsa.write(new URL('memory://source/google.tiff'), fsa.readStream(TestTiff.Google));
13
+ });
14
+ const baseArgs = {
15
+ paths: [new URL('memory://source/')],
16
+ target: new URL('memory://target/'),
17
+ preset: 'webp',
18
+ tileMatrix: 'WebMercatorQuad',
19
+ cutline: undefined,
20
+ cutlineBlend: 20,
21
+ baseZoomOffset: undefined,
22
+ verbose: false,
23
+ extraVerbose: false,
24
+ requireStacCollection: false,
25
+ background: undefined,
26
+ };
27
+ it('should generate a covering', async () => {
28
+ const ret = await BasemapsCogifyCoverCommand.handler({ ...baseArgs }).catch((e) => String(e));
29
+ assert.equal(ret, undefined); // no errors returned
30
+ const files = [...fsMemory.files.keys()];
31
+ const collectionJsonPath = files.find((f) => f.endsWith('collection.json') && f.startsWith('memory://target/'));
32
+ assert.ok(collectionJsonPath);
33
+ const collectionJson = JSON.parse(String(fsMemory.files.get(collectionJsonPath)?.buffer ?? '{}'));
34
+ assert.equal(collectionJson['description'], 'Missing source STAC');
35
+ });
36
+ it('should error if no collection.json is found', async () => {
37
+ const ret = await BasemapsCogifyCoverCommand.handler({
38
+ ...baseArgs,
39
+ paths: [new URL('memory://source/')],
40
+ target: new URL('memory://target/'),
41
+ preset: 'webp',
42
+ requireStacCollection: true,
43
+ tileMatrix: 'WebMercatorQuad',
44
+ }).catch((e) => String(e));
45
+ assert.equal(ret, 'Error: No collection.json found with imagery: memory://source/');
46
+ });
47
+ });
48
+ //# sourceMappingURL=cli.cover.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.cover.test.js","sourceRoot":"","sources":["../../../../src/cogify/cli/__test__/cli.cover.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,53 @@
1
+ import assert from 'node:assert';
2
+ import { beforeEach, describe, it } from 'node:test';
3
+ import { fsa, FsMemory, LogConfig } from '@basemaps/shared';
4
+ import { TestTiff } from '@basemaps/test';
5
+ import { TopoStacCreationCommand } from '../cli.topo.js';
6
+ describe('cli.topo', () => {
7
+ const fsMemory = new FsMemory();
8
+ beforeEach(async () => {
9
+ LogConfig.get().level = 'silent';
10
+ fsa.register('memory://', fsMemory);
11
+ fsMemory.files.clear();
12
+ await fsa.write(new URL('memory://source/CJ10_GRIDLESS_GeoTifv1-00.tif'), fsa.readStream(TestTiff.Nztm2000));
13
+ await fsa.write(new URL('memory://source/CJ10_GRIDLESS_GeoTifv1-01.tif'), fsa.readStream(TestTiff.Nztm2000));
14
+ });
15
+ const baseArgs = {
16
+ paths: [new URL('memory://source/')],
17
+ target: new URL('memory://target/'),
18
+ mapSeries: 'topo50',
19
+ latestOnly: false,
20
+ title: undefined,
21
+ output: undefined,
22
+ // extra logging arguments
23
+ verbose: false,
24
+ extraVerbose: false,
25
+ };
26
+ it('should generate a covering', async () => {
27
+ const ret = await TopoStacCreationCommand.handler({ ...baseArgs }).catch((e) => String(e));
28
+ assert.equal(ret, undefined); // no errors returned
29
+ const files = [...fsMemory.files.keys()];
30
+ files.sort();
31
+ assert.deepEqual(files, [
32
+ 'memory://source/CJ10_GRIDLESS_GeoTifv1-00.tif',
33
+ 'memory://source/CJ10_GRIDLESS_GeoTifv1-01.tif',
34
+ 'memory://target/topo50/gridless_600dpi/2193/CJ10_v1-00.json',
35
+ 'memory://target/topo50/gridless_600dpi/2193/CJ10_v1-01.json',
36
+ 'memory://target/topo50/gridless_600dpi/2193/collection.json',
37
+ 'memory://target/topo50_latest/gridless_600dpi/2193/CJ10.json',
38
+ 'memory://target/topo50_latest/gridless_600dpi/2193/collection.json',
39
+ ]);
40
+ const collectionJson = await fsa.readJson(new URL('memory://target/topo50/gridless_600dpi/2193/collection.json'));
41
+ assert.equal(collectionJson['description'], 'Topographic maps of New Zealand');
42
+ assert.equal(collectionJson['linz:slug'], 'topo50-new-zealand-mainland');
43
+ assert.equal(collectionJson['linz:region'], 'new-zealand');
44
+ const latestItemUrl = new URL('memory://target/topo50_latest/gridless_600dpi/2193/CJ10.json');
45
+ const latestVersion = await fsa.readJson(latestItemUrl);
46
+ // Latest file should be derived_from the source file
47
+ const derived = latestVersion.links.filter((f) => f.rel === 'derived_from');
48
+ assert.equal(derived.length, 1);
49
+ const derivedFile = new URL(derived[0].href, latestItemUrl);
50
+ assert.equal(derivedFile.href, 'memory://target/topo50/gridless_600dpi/2193/CJ10_v1-01.json');
51
+ });
52
+ });
53
+ //# sourceMappingURL=cli.topo.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.topo.test.js","sourceRoot":"","sources":["../../../../src/cogify/cli/__test__/cli.topo.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import { TileMatrixSet } from '@basemaps/geo';
2
+ import { LogType } from '@basemaps/shared';
3
+ import { StacCollection } from 'stac-ts';
4
+ import { CutlineOptimizer } from '../covering/cutline.js';
5
+ import { CogifyCreationOptions, CogifyStacItem } from '../stac.js';
6
+ export interface CogItem {
7
+ url: URL;
8
+ item: CogifyStacItem;
9
+ collection: StacCollection;
10
+ }
11
+ export declare const BasemapsCogifyCreateCommand: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
12
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
13
+ path: URL[];
14
+ force: boolean;
15
+ concurrency: number;
16
+ docker: boolean;
17
+ fromFile: URL[] | undefined;
18
+ verbose: boolean;
19
+ extraVerbose: boolean;
20
+ }>>;
21
+ } & 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<{
22
+ path: URL[];
23
+ force: boolean;
24
+ concurrency: number;
25
+ docker: boolean;
26
+ fromFile: URL[] | undefined;
27
+ verbose: boolean;
28
+ extraVerbose: boolean;
29
+ }, Promise<void>> & {
30
+ run(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<Promise<void>>>;
31
+ } & 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>;
32
+ export interface CogCreationContext {
33
+ /** TileId for the file name */
34
+ tileId: string;
35
+ /** COG Creation options */
36
+ options: CogifyCreationOptions;
37
+ /** Location to store all the temporary files */
38
+ tempFolder: URL;
39
+ /** List of source tiffs paths needed for the cog */
40
+ sourceFiles: URL[];
41
+ /** Optional cutline to cut the imagery too */
42
+ cutline: CutlineOptimizer;
43
+ /** Optional Source imagery size for topo raster trim pixel */
44
+ size?: {
45
+ width: number;
46
+ height: number;
47
+ };
48
+ /** Optional logger */
49
+ logger?: LogType;
50
+ }
51
+ /**
52
+ * Very basic checking for the output tiff to ensure it was uploaded ok
53
+ * Just open it as a COG and ensure the metadata looks about right
54
+ */
55
+ export declare function validateOutputTiff(url: URL, tileMatrix: TileMatrixSet | undefined, logger: LogType): Promise<void>;