@basemaps/cli 6.21.1 → 6.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/build/cli/cogify/__test__/action.batch.test.js +11 -1
- package/build/cli/cogify/action.batch.d.ts +9 -1
- package/build/cli/cogify/action.batch.d.ts.map +1 -1
- package/build/cli/cogify/action.batch.js +13 -2
- package/build/cli/util.d.ts +1 -1
- package/build/cli/util.d.ts.map +1 -1
- package/build/cli/util.js +2 -1
- package/build/cog/__test__/projection.loader.test.d.ts +2 -0
- package/build/cog/__test__/projection.loader.test.d.ts.map +1 -0
- package/build/cog/__test__/projection.loader.test.js +26 -0
- package/build/cog/builder.d.ts.map +1 -1
- package/build/cog/builder.js +3 -0
- package/build/cog/cog.stac.job.d.ts.map +1 -1
- package/build/cog/cog.stac.job.js +5 -1
- package/build/cog/projection.loader.d.ts +13 -0
- package/build/cog/projection.loader.d.ts.map +1 -0
- package/build/cog/projection.loader.js +27 -0
- package/package.json +5 -4
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,39 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [6.23.0](https://github.com/linz/basemaps/compare/v6.22.1...v6.23.0) (2022-04-04)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **shared:** load projections from the internet when not defined locally ([#2132](https://github.com/linz/basemaps/issues/2132)) ([85ac59f](https://github.com/linz/basemaps/commit/85ac59f771c3233f163a0223459faece46073847))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## [6.22.1](https://github.com/linz/basemaps/compare/v6.22.0...v6.22.1) (2022-03-23)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* **cli:** allow unicode job names ([#2126](https://github.com/linz/basemaps/issues/2126)) ([bab5cef](https://github.com/linz/basemaps/commit/bab5cefdc8365cb52bf687230a078ea599c359ce))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
# [6.22.0](https://github.com/linz/basemaps/compare/v6.21.1...v6.22.0) (2022-03-20)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
### Features
|
|
32
|
+
|
|
33
|
+
* **cli:** support multiple invalidations for cloudfront ([#2120](https://github.com/linz/basemaps/issues/2120)) ([764fdeb](https://github.com/linz/basemaps/commit/764fdebaf7624c7761cede3a24c2184105bff9e2))
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
6
39
|
## [6.21.1](https://github.com/linz/basemaps/compare/v6.21.0...v6.21.1) (2022-03-17)
|
|
7
40
|
|
|
8
41
|
**Note:** Version bump only for package @basemaps/cli
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import o from 'ospec';
|
|
2
|
-
import { extractResolutionFromName } from '../action.batch.js';
|
|
2
|
+
import { ActionBatchJob, extractResolutionFromName } from '../action.batch.js';
|
|
3
3
|
o.spec('action.batch', () => {
|
|
4
4
|
o('extractResolutionFromName', () => {
|
|
5
5
|
o(extractResolutionFromName('2013')).equals(-1);
|
|
@@ -10,4 +10,14 @@ o.spec('action.batch', () => {
|
|
|
10
10
|
o(extractResolutionFromName('wellington_urban_2017_1.00m')).equals(1000);
|
|
11
11
|
o(extractResolutionFromName('wellington_urban_2017_0.025m')).equals(25);
|
|
12
12
|
});
|
|
13
|
+
o('should create valid jobNames', () => {
|
|
14
|
+
const fakeJob = { id: '01FHRPYJ5FV1XAARZAC4T4K6MC', name: 'geographx_nz_texture_shade_2012_8-0m' };
|
|
15
|
+
o(ActionBatchJob.id(fakeJob, '0')).equals('01FHRPYJ5FV1XAARZAC4T4K6MC-9af5e139bbb3e502-0');
|
|
16
|
+
fakeJob.name = 'ōtorohanga_urban_2021_0.1m_RGB';
|
|
17
|
+
o(ActionBatchJob.id(fakeJob, '0')).equals('01FHRPYJ5FV1XAARZAC4T4K6MC-5294acface81c107-0');
|
|
18
|
+
});
|
|
19
|
+
o('should truncate job names to 128 characters', () => {
|
|
20
|
+
const fakeJob = { id: '01FHRPYJ5FV1XAARZAC4T4K6MC', name: 'geographx_nz_texture_shade_2012_8-0m' };
|
|
21
|
+
o(ActionBatchJob.id(fakeJob, 'this is a really long file name it should over flow 128 characters so it should be truncated at some point.tiff')).equals('01FHRPYJ5FV1XAARZAC4T4K6MC-9af5e139bbb3e502-this is a really long file name it should over flow 128 characters so it should be t');
|
|
22
|
+
});
|
|
13
23
|
});
|
|
@@ -14,7 +14,15 @@ export declare class ActionBatchJob extends CommandLineAction {
|
|
|
14
14
|
private commit?;
|
|
15
15
|
private oneCog?;
|
|
16
16
|
constructor();
|
|
17
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Create a id for a job
|
|
19
|
+
*
|
|
20
|
+
* This needs to be within `[a-Z_-]` upto 128 characters log
|
|
21
|
+
* @param job job to process
|
|
22
|
+
* @param fileName output filename
|
|
23
|
+
* @returns job id
|
|
24
|
+
*/
|
|
25
|
+
static id(job: CogJob, fileName: string): string;
|
|
18
26
|
static batchOne(jobPath: string, job: CogJob, batch: Batch, name: string, isCommit: boolean): Promise<{
|
|
19
27
|
jobName: string;
|
|
20
28
|
jobId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.batch.d.ts","sourceRoot":"","sources":["../../../src/cli/cogify/action.batch.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,OAAO,EAAc,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAwD,MAAM,4BAA4B,CAAC;AACrH,OAAO,KAAK,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"action.batch.d.ts","sourceRoot":"","sources":["../../../src/cli/cogify/action.batch.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,OAAO,EAAc,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAwD,MAAM,4BAA4B,CAAC;AACrH,OAAO,KAAK,MAAM,0BAA0B,CAAC;AAG7C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAS5C;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI9D;AAED,qBAAa,cAAe,SAAQ,iBAAiB;IACnD,OAAO,CAAC,GAAG,CAAC,CAA6B;IACzC,OAAO,CAAC,MAAM,CAAC,CAA2B;IAC1C,OAAO,CAAC,MAAM,CAAC,CAA6B;;IAU5C;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;WAMnC,QAAQ,CACnB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IA6B9D;;;OAGG;WACU,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAqBrE,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;WAanB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,qBAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAyD9G,SAAS,CAAC,kBAAkB,IAAI,IAAI;CAqBrC"}
|
|
@@ -2,6 +2,7 @@ import { TileMatrixSet } from '@basemaps/geo';
|
|
|
2
2
|
import { Env, fsa, LogConfig, Projection } from '@basemaps/shared';
|
|
3
3
|
import { CommandLineAction } from '@rushstack/ts-command-line';
|
|
4
4
|
import Batch from 'aws-sdk/clients/batch.js';
|
|
5
|
+
import { createHash } from 'crypto';
|
|
5
6
|
import { CogStacJob } from '../../cog/cog.stac.job.js';
|
|
6
7
|
const JobQueue = 'CogBatchJobQueue';
|
|
7
8
|
const JobDefinition = 'CogBatchJob';
|
|
@@ -28,8 +29,18 @@ export class ActionBatchJob extends CommandLineAction {
|
|
|
28
29
|
documentation: 'Submit a list of cogs to a AWS Batch queue to be process',
|
|
29
30
|
});
|
|
30
31
|
}
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
/**
|
|
33
|
+
* Create a id for a job
|
|
34
|
+
*
|
|
35
|
+
* This needs to be within `[a-Z_-]` upto 128 characters log
|
|
36
|
+
* @param job job to process
|
|
37
|
+
* @param fileName output filename
|
|
38
|
+
* @returns job id
|
|
39
|
+
*/
|
|
40
|
+
static id(job, fileName) {
|
|
41
|
+
// Job names are uncontrolled so hash the name and grab a small slice to use as a identifier
|
|
42
|
+
const jobName = createHash('sha256').update(job.name).digest('hex').slice(0, 16);
|
|
43
|
+
return `${job.id}-${jobName}-${fileName}`.slice(0, 128);
|
|
33
44
|
}
|
|
34
45
|
static async batchOne(jobPath, job, batch, name, isCommit) {
|
|
35
46
|
const jobName = ActionBatchJob.id(job, name);
|
package/build/cli/util.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Invalidate the cloudfront distribution cache when updating imagery sets
|
|
3
3
|
*/
|
|
4
|
-
export declare function invalidateCache(path: string, commit?: boolean): Promise<void>;
|
|
4
|
+
export declare function invalidateCache(path: string | string[], commit?: boolean): Promise<void>;
|
|
5
5
|
export declare const HashKey = "linz-hash";
|
|
6
6
|
export declare function getHash(Bucket: string, Key: string): Promise<string | null>;
|
|
7
7
|
export declare function getStaticBucket(): Promise<string | null>;
|
package/build/cli/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/cli/util.ts"],"names":[],"mappings":"AAkBA;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/cli/util.ts"],"names":[],"mappings":"AAkBA;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,MAAM,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B5F;AAED,eAAO,MAAM,OAAO,cAAc,CAAC;AAEnC,wBAAsB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQjF;AAOD,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQ9D;AAMD;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC,CA6BlB"}
|
package/build/cli/util.js
CHANGED
|
@@ -31,12 +31,13 @@ export async function invalidateCache(path, commit = false) {
|
|
|
31
31
|
return;
|
|
32
32
|
}
|
|
33
33
|
LogConfig.get().info({ path, cfId: cf.Id }, 'Invalidating');
|
|
34
|
+
const Items = Array.isArray(path) ? path : [path];
|
|
34
35
|
if (commit) {
|
|
35
36
|
await cloudFront
|
|
36
37
|
.createInvalidation({
|
|
37
38
|
DistributionId: cf.Id,
|
|
38
39
|
InvalidationBatch: {
|
|
39
|
-
Paths: { Quantity:
|
|
40
|
+
Paths: { Quantity: Items.length, Items },
|
|
40
41
|
CallerReference: `${CliId}-${InvalidationId++}`,
|
|
41
42
|
},
|
|
42
43
|
})
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projection.loader.test.d.ts","sourceRoot":"","sources":["../../../src/cog/__test__/projection.loader.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import o from 'ospec';
|
|
2
|
+
import { ProjectionLoader } from '../projection.loader.js';
|
|
3
|
+
import sinon from 'sinon';
|
|
4
|
+
import { Nztm2000 } from '@basemaps/shared/build/proj/nztm2000.js';
|
|
5
|
+
import { Epsg } from '@basemaps/geo';
|
|
6
|
+
import { Projection } from '@basemaps/shared';
|
|
7
|
+
o.spec('ProjectionLoader', () => {
|
|
8
|
+
const sandbox = sinon.createSandbox();
|
|
9
|
+
o.afterEach(() => sandbox.restore());
|
|
10
|
+
o('should not load if already loaded', async () => {
|
|
11
|
+
const fetchStub = sandbox.stub(ProjectionLoader, '_fetch');
|
|
12
|
+
const res = await ProjectionLoader.load(2193);
|
|
13
|
+
o(fetchStub.callCount).equals(0);
|
|
14
|
+
o(res.code).equals(2193);
|
|
15
|
+
});
|
|
16
|
+
o('should fetch data from the internet', async () => {
|
|
17
|
+
const fetchStub = sandbox
|
|
18
|
+
.stub(ProjectionLoader, '_fetch')
|
|
19
|
+
.resolves({ ok: true, text: () => Promise.resolve(Nztm2000) });
|
|
20
|
+
const res = await ProjectionLoader.load(3790);
|
|
21
|
+
o(fetchStub.callCount).equals(1);
|
|
22
|
+
o(res.code).equals(3790);
|
|
23
|
+
o(Epsg.get(3790)).equals(res);
|
|
24
|
+
o(Projection.get(3790).epsg).equals(res);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/cog/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAyC,OAAO,EAAc,MAAM,kBAAkB,CAAC;AAC9F,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAuB,MAAM,iBAAiB,CAAC;AAG/D,OAAe,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGhD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/cog/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAyC,OAAO,EAAc,MAAM,kBAAkB,CAAC;AAC9F,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAuB,MAAM,iBAAiB,CAAC;AAG/D,OAAe,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGhD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEhE,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAC3C,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,WAAW,aAAa,CAAC;AAEtC;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAO/D;AAED,qBAAa,UAAU;IACrB,CAAC,EAAE,aAAa,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,aAAa,CAAC;IACzB,OAAO,CAAC,EAAE,IAAI,CAAC;IAGf,kBAAkB,cAAqB;IAEvC;;OAEG;gBACS,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,IAAI;IAO1F;;;OAGG;IACG,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IAoF7D,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAuBnC;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAaxC,wFAAwF;YAC1E,WAAW;IA2BzB;;;;OAIG;IACG,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAajF"}
|
package/build/cog/builder.js
CHANGED
|
@@ -6,6 +6,7 @@ import { existsSync, mkdirSync } from 'fs';
|
|
|
6
6
|
import pLimit from 'p-limit';
|
|
7
7
|
import * as path from 'path';
|
|
8
8
|
import { basename } from 'path';
|
|
9
|
+
import { ProjectionLoader } from './projection.loader.js';
|
|
9
10
|
export const InvalidProjectionCode = 32767;
|
|
10
11
|
export const CacheVersion = 'v3'; // bump this number to invalidate the cache
|
|
11
12
|
export const CacheFolder = './.cache';
|
|
@@ -179,6 +180,8 @@ export class CogBuilder {
|
|
|
179
180
|
*/
|
|
180
181
|
async build(tiffs, cutline) {
|
|
181
182
|
const metadata = await this.getMetadata(tiffs);
|
|
183
|
+
// Ensure that the projection definition is loaded
|
|
184
|
+
await ProjectionLoader.load(metadata.projection);
|
|
182
185
|
const files = cutline.optimizeCovering(metadata);
|
|
183
186
|
let union = null;
|
|
184
187
|
for (const bounds of files) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cog.stac.job.d.ts","sourceRoot":"","sources":["../../src/cog/cog.stac.job.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,IAAI,EAKJ,aAAa,EAEd,MAAM,eAAe,CAAC;AACvB,OAAO,EAEL,UAAU,EACV,cAAc,EAKf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAA8C,MAAM,iBAAiB,CAAC;AAE3F,OAAO,EAA0B,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"cog.stac.job.d.ts","sourceRoot":"","sources":["../../src/cog/cog.stac.job.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,IAAI,EAKJ,aAAa,EAEd,MAAM,eAAe,CAAC;AACvB,OAAO,EAEL,UAAU,EACV,cAAc,EAKf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAA8C,MAAM,iBAAiB,CAAC;AAE3F,OAAO,EAA0B,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAG1F,OAAO,EACL,kBAAkB,EAClB,MAAM,EACN,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC,MAAM,WAAW,kBAAkB;IACjC,oBAAoB;IACpB,cAAc,EAAE,UAAU,GAAG,cAAc,CAAC;IAE5C,oBAAoB;IACpB,cAAc,EAAE,UAAU,CAAC;IAE3B,6CAA6C;IAC7C,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IAEF,UAAU,EAAE,aAAa,CAAC;IAE1B,QAAQ,CAAC,EAAE;QACT,sBAAsB;QACtB,EAAE,CAAC,EAAE,MAAM,CAAC;QAEZ;;;WAGG;QACH,OAAO,CAAC,EAAE,MAAM,CAAC;QAEjB;;;WAGG;QACH,WAAW,CAAC,EAAE,MAAM,CAAC;QAErB;;WAEG;QACH,UAAU,CAAC,EAAE,IAAI,CAAC;QAElB;;;WAGG;QACH,UAAU,CAAC,EAAE,wBAAwB,CAAC;KACvC,CAAC;IAEF;;;OAGG;IACH,KAAK,EAAE,OAAO,CAAC;IAEf,0FAA0F;IAC1F,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,gCAAgC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,mCAAmC;IACnC,GAAG,EAAE,kBAAkB,CAAC;IACxB,oDAAoD;IACpD,WAAW,EAAE,YAAY,CAAC;IAC1B,qCAAqC;IACrC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,UAAW,YAAW,MAAM;IACvC,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,CAAC,eAAe,CAAC,CAGtB;IAEF;;;;SAIK;WACQ,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAMvD;;;;SAIK;WACQ,MAAM,CAAC,EAClB,EAAE,EACF,WAAW,EACX,QAAQ,EACR,GAAG,EACH,WAAW,EACX,QAAQ,GACT,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;IAoM3C;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,GAAG,wBAAwB;gBAS9D,IAAI,EAAE,UAAU;IAI5B,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,WAAW,IAAI,MAAM,GAAG,SAAS,CAEpC;IAED,IAAI,MAAM,IAAI,mBAAmB,CAEhC;IAED,IAAI,MAAM,IAAI,mBAAmB,CAEhC;IAED,IAAI,UAAU,IAAI,aAAa,CAO9B;IAED,IAAI,UAAU,IAAI,MAAM,CAMvB;IAED;;;;OAIG;IACH,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM;CAOjC"}
|
|
@@ -3,6 +3,7 @@ import { extractYearRangeFromName, Projection, fsa, titleizeImageryName, Composi
|
|
|
3
3
|
import { toFeatureCollection, toFeatureMultiPolygon } from '@linzjs/geojson';
|
|
4
4
|
import { CliInfo } from '../cli/base.cli.js';
|
|
5
5
|
import { GdalCogBuilderDefaults } from '../gdal/gdal.config.js';
|
|
6
|
+
import { ProjectionLoader } from './projection.loader.js';
|
|
6
7
|
import { CogStacItemExtensions, CogStacKeywords } from './stac.js';
|
|
7
8
|
export const MaxConcurrencyDefault = 50;
|
|
8
9
|
/**
|
|
@@ -18,7 +19,9 @@ export class CogStacJob {
|
|
|
18
19
|
* @param jobpath where to load the job.json from
|
|
19
20
|
*/
|
|
20
21
|
static async load(jobpath) {
|
|
21
|
-
|
|
22
|
+
const job = new CogStacJob(await fsa.readJson(jobpath));
|
|
23
|
+
await ProjectionLoader.load(job.source.epsg);
|
|
24
|
+
return job;
|
|
22
25
|
}
|
|
23
26
|
/**
|
|
24
27
|
* Create job.json, collection.json, source.geojson, covering.geojson, cutlint.geojson.gz and
|
|
@@ -72,6 +75,7 @@ export class CogStacJob {
|
|
|
72
75
|
if (description == null) {
|
|
73
76
|
description = 'No description';
|
|
74
77
|
}
|
|
78
|
+
await ProjectionLoader.load(metadata.projection);
|
|
75
79
|
const job = new CogStacJob({
|
|
76
80
|
id,
|
|
77
81
|
name: imageryName,
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Epsg } from '@basemaps/geo';
|
|
2
|
+
import fetch from 'node-fetch';
|
|
3
|
+
export declare class ProjectionLoader {
|
|
4
|
+
static _fetch: typeof fetch;
|
|
5
|
+
/**
|
|
6
|
+
* Ensure that a projection EPSG code is avialable for use in Proj4js
|
|
7
|
+
*
|
|
8
|
+
* If its not already loaded, lookup definition from spatialreference.org
|
|
9
|
+
* @param code
|
|
10
|
+
*/
|
|
11
|
+
static load(code: number): Promise<Epsg>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=projection.loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projection.loader.d.ts","sourceRoot":"","sources":["../../src/cog/projection.loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,qBAAa,gBAAgB;IAE3B,MAAM,CAAC,MAAM,eAAS;IAEtB;;;;;OAKG;WACU,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAc/C"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Epsg } from '@basemaps/geo';
|
|
2
|
+
import { Projection } from '@basemaps/shared';
|
|
3
|
+
import fetch from 'node-fetch';
|
|
4
|
+
export class ProjectionLoader {
|
|
5
|
+
/**
|
|
6
|
+
* Ensure that a projection EPSG code is avialable for use in Proj4js
|
|
7
|
+
*
|
|
8
|
+
* If its not already loaded, lookup definition from spatialreference.org
|
|
9
|
+
* @param code
|
|
10
|
+
*/
|
|
11
|
+
static async load(code) {
|
|
12
|
+
if (Projection.tryGet(code) != null)
|
|
13
|
+
return Epsg.get(code);
|
|
14
|
+
const url = `https://spatialreference.org/ref/epsg/${code}/ogcwkt/`;
|
|
15
|
+
const res = await this._fetch(url);
|
|
16
|
+
if (!res.ok)
|
|
17
|
+
throw new Error('Failed to load projection information for:' + code);
|
|
18
|
+
let epsg = Epsg.tryGet(code);
|
|
19
|
+
if (epsg == null)
|
|
20
|
+
epsg = new Epsg(code);
|
|
21
|
+
const text = await res.text();
|
|
22
|
+
Projection.define(epsg, text);
|
|
23
|
+
return epsg;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// Exposed for testing
|
|
27
|
+
ProjectionLoader._fetch = fetch;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@basemaps/cli",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.23.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -39,12 +39,13 @@
|
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"@basemaps/config": "^6.21.1",
|
|
41
41
|
"@basemaps/geo": "^6.21.1",
|
|
42
|
-
"@basemaps/shared": "^6.
|
|
42
|
+
"@basemaps/shared": "^6.23.0",
|
|
43
43
|
"@chunkd/fs": "^8.1.0",
|
|
44
|
-
"@cogeotiff/core": "^
|
|
44
|
+
"@cogeotiff/core": "^7.0.0",
|
|
45
45
|
"@linzjs/geojson": "^6.21.1",
|
|
46
46
|
"@rushstack/ts-command-line": "^4.3.13",
|
|
47
47
|
"ansi-colors": "^4.1.1",
|
|
48
|
+
"node-fetch": "^3.2.3",
|
|
48
49
|
"p-limit": "^4.0.0",
|
|
49
50
|
"pretty-json-log": "^1.0.0",
|
|
50
51
|
"zod": "^3.2.0"
|
|
@@ -59,5 +60,5 @@
|
|
|
59
60
|
"files": [
|
|
60
61
|
"build/"
|
|
61
62
|
],
|
|
62
|
-
"gitHead": "
|
|
63
|
+
"gitHead": "5c956ba1b1f87c1712fcc4f9d4afc20e7a427285"
|
|
63
64
|
}
|