@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.
- package/LICENSE +21 -0
- package/README.md +70 -0
- package/build/bin.d.ts +1 -0
- package/build/bin.js +16 -0
- package/build/bin.js.map +1 -0
- package/build/cogify/__test__/covering.test.d.ts +1 -0
- package/build/cogify/__test__/covering.test.js +64 -0
- package/build/cogify/__test__/covering.test.js.map +1 -0
- package/build/cogify/__test__/extract.test.d.ts +1 -0
- package/build/cogify/__test__/extract.test.js +34 -0
- package/build/cogify/__test__/extract.test.js.map +1 -0
- package/build/cogify/cli/__test__/cli.cover.test.d.ts +1 -0
- package/build/cogify/cli/__test__/cli.cover.test.js +48 -0
- package/build/cogify/cli/__test__/cli.cover.test.js.map +1 -0
- package/build/cogify/cli/__test__/cli.topo.test.d.ts +1 -0
- package/build/cogify/cli/__test__/cli.topo.test.js +53 -0
- package/build/cogify/cli/__test__/cli.topo.test.js.map +1 -0
- package/build/cogify/cli/cli.cog.d.ts +55 -0
- package/build/cogify/cli/cli.cog.js +353 -0
- package/build/cogify/cli/cli.cog.js.map +1 -0
- package/build/cogify/cli/cli.cover.d.ts +30 -0
- package/build/cogify/cli/cli.cover.js +157 -0
- package/build/cogify/cli/cli.cover.js.map +1 -0
- package/build/cogify/cli/cli.topo.d.ts +50 -0
- package/build/cogify/cli/cli.topo.js +169 -0
- package/build/cogify/cli/cli.topo.js.map +1 -0
- package/build/cogify/cli/cli.validate.d.ts +15 -0
- package/build/cogify/cli/cli.validate.js +30 -0
- package/build/cogify/cli/cli.validate.js.map +1 -0
- package/build/cogify/cli.d.ts +121 -0
- package/build/cogify/cli.js +15 -0
- package/build/cogify/cli.js.map +1 -0
- package/build/cogify/covering/covering.d.ts +28 -0
- package/build/cogify/covering/covering.js +126 -0
- package/build/cogify/covering/covering.js.map +1 -0
- package/build/cogify/covering/cutline.d.ts +29 -0
- package/build/cogify/covering/cutline.js +109 -0
- package/build/cogify/covering/cutline.js.map +1 -0
- package/build/cogify/covering/tile.cover.d.ts +38 -0
- package/build/cogify/covering/tile.cover.js +198 -0
- package/build/cogify/covering/tile.cover.js.map +1 -0
- package/build/cogify/gdal/gdal.command.d.ts +27 -0
- package/build/cogify/gdal/gdal.command.js +175 -0
- package/build/cogify/gdal/gdal.command.js.map +1 -0
- package/build/cogify/gdal/gdal.runner.d.ts +42 -0
- package/build/cogify/gdal/gdal.runner.js +194 -0
- package/build/cogify/gdal/gdal.runner.js.map +1 -0
- package/build/cogify/stac.d.ts +138 -0
- package/build/cogify/stac.js +25 -0
- package/build/cogify/stac.js.map +1 -0
- package/build/cogify/topo/extract.d.ts +82 -0
- package/build/cogify/topo/extract.js +195 -0
- package/build/cogify/topo/extract.js.map +1 -0
- package/build/cogify/topo/slug.d.ts +10 -0
- package/build/cogify/topo/slug.js +18 -0
- package/build/cogify/topo/slug.js.map +1 -0
- package/build/cogify/topo/stac.creation.d.ts +47 -0
- package/build/cogify/topo/stac.creation.js +171 -0
- package/build/cogify/topo/stac.creation.js.map +1 -0
- package/build/download.d.ts +57 -0
- package/build/download.js +144 -0
- package/build/download.js.map +1 -0
- package/build/hash.stream.d.ts +20 -0
- package/build/hash.stream.js +62 -0
- package/build/hash.stream.js.map +1 -0
- package/build/index.d.ts +1 -0
- package/build/index.js +2 -0
- package/build/index.js.map +1 -0
- package/build/preset.d.ts +15 -0
- package/build/preset.js +66 -0
- package/build/preset.js.map +1 -0
- package/dist/index.cjs +85880 -0
- 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
|
+

|
|
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
|
package/build/bin.js.map
ADDED
|
@@ -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>;
|