@basemaps/lambda-tiler 7.11.0 → 7.12.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 +17 -0
- package/build/index.js +9 -4
- package/build/index.js.map +1 -1
- package/build/routes/__tests__/link.test.d.ts +1 -0
- package/build/routes/__tests__/link.test.js +82 -0
- package/build/routes/__tests__/link.test.js.map +1 -0
- package/build/routes/__tests__/tile.style.json.attribution.test.d.ts +1 -0
- package/build/routes/__tests__/tile.style.json.attribution.test.js +172 -0
- package/build/routes/__tests__/tile.style.json.attribution.test.js.map +1 -0
- package/build/routes/attribution.d.ts +19 -1
- package/build/routes/attribution.js +38 -3
- package/build/routes/attribution.js.map +1 -1
- package/build/routes/link.d.ts +17 -0
- package/build/routes/link.js +42 -0
- package/build/routes/link.js.map +1 -0
- package/build/routes/tile.style.json.d.ts +2 -2
- package/build/routes/tile.style.json.js +12 -4
- package/build/routes/tile.style.json.js.map +1 -1
- package/package.json +9 -9
- package/src/index.ts +10 -4
- package/src/routes/__tests__/link.test.ts +114 -0
- package/src/routes/__tests__/tile.style.json.attribution.test.ts +224 -0
- package/src/routes/attribution.ts +50 -5
- package/src/routes/link.ts +55 -0
- package/src/routes/tile.style.json.ts +15 -4
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,23 @@
|
|
|
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
|
+
# [7.12.0](https://github.com/linz/basemaps/compare/v7.11.1...v7.12.0) (2024-11-14)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **lambda-tiler:** correctly log fetch requests ([#3359](https://github.com/linz/basemaps/issues/3359)) ([9fa3681](https://github.com/linz/basemaps/commit/9fa3681acc2ce25037c5d6e0326255aad9815b7d))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
* **lambda-tiler:** update imagery layer attributions to show licensor details BM-897 ([#3357](https://github.com/linz/basemaps/issues/3357)) ([e702c7e](https://github.com/linz/basemaps/commit/e702c7e53d28aaa8db9d624acab048f8ec3a2309))
|
|
17
|
+
* **server:** add redirect route to pre-zoomed tileset BM-1076 ([#3354](https://github.com/linz/basemaps/issues/3354)) ([5b207de](https://github.com/linz/basemaps/commit/5b207de92b76e0d445a41ef8e1e9b9b91e5363c6))
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
6
23
|
# [7.11.0](https://github.com/linz/basemaps/compare/v7.10.0...v7.11.0) (2024-09-29)
|
|
7
24
|
|
|
8
25
|
|
package/build/index.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { FsaCache, FsaLog, LogConfig } from '@basemaps/shared';
|
|
1
|
+
import { FsaCache, FsaLog, LogConfig, LogStorage } from '@basemaps/shared';
|
|
2
2
|
import { LambdaHttpResponse, lf } from '@linzjs/lambda';
|
|
3
3
|
import { tileAttributionGet } from './routes/attribution.js';
|
|
4
4
|
import { configImageryGet, configTileSetGet } from './routes/config.js';
|
|
5
5
|
import { fontGet, fontList } from './routes/fonts.js';
|
|
6
6
|
import { healthGet } from './routes/health.js';
|
|
7
7
|
import { imageryGet } from './routes/imagery.js';
|
|
8
|
+
import { linkGet } from './routes/link.js';
|
|
8
9
|
import { pingGet } from './routes/ping.js';
|
|
9
10
|
import { previewIndexGet } from './routes/preview.index.js';
|
|
10
11
|
import { tilePreviewGet } from './routes/preview.js';
|
|
@@ -29,20 +30,22 @@ function randomTrace(req) {
|
|
|
29
30
|
// 1% trace
|
|
30
31
|
if (rand < 0.01)
|
|
31
32
|
req.log.level = 'trace';
|
|
32
|
-
//
|
|
33
|
-
else if (rand < 0.
|
|
33
|
+
// 25% debug
|
|
34
|
+
else if (rand < 0.25)
|
|
34
35
|
req.log.level = 'debug';
|
|
35
36
|
// everything else info
|
|
36
37
|
else
|
|
37
38
|
req.log.level = 'info';
|
|
38
39
|
}
|
|
39
40
|
handler.router.hook('request', (req) => {
|
|
41
|
+
LogStorage.enterWith({ log: req.log });
|
|
40
42
|
FsaLog.reset();
|
|
41
43
|
randomTrace(req);
|
|
42
44
|
req.set('name', 'LambdaTiler');
|
|
43
45
|
});
|
|
44
46
|
handler.router.hook('response', (req, res) => {
|
|
45
|
-
req.set('
|
|
47
|
+
req.set('fetchCount', FsaLog.count);
|
|
48
|
+
req.set('fetches', FsaLog.requests);
|
|
46
49
|
req.set('cacheSize', FsaCache.size);
|
|
47
50
|
// Force access-control-allow-origin to everything
|
|
48
51
|
res.header('access-control-allow-origin', '*');
|
|
@@ -84,6 +87,8 @@ handler.router.get('/v1/preview/:tileSet/:tileMatrix/:z/:lon/:lat', tilePreviewG
|
|
|
84
87
|
handler.router.get('/v1/preview/:tileSet/:tileMatrix/:z/:lon/:lat/:outputType', tilePreviewGet);
|
|
85
88
|
handler.router.get('/v1/@:location', previewIndexGet);
|
|
86
89
|
handler.router.get('/@:location', previewIndexGet);
|
|
90
|
+
// Link
|
|
91
|
+
handler.router.get('/v1/link/:tileSet', linkGet);
|
|
87
92
|
// Attribution
|
|
88
93
|
handler.router.get('/v1/tiles/:tileSet/:tileMatrix/attribution.json', tileAttributionGet);
|
|
89
94
|
handler.router.get('/v1/attribution/:tileSet/:tileMatrix/summary.json', tileAttributionGet);
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { strictEqual } from 'node:assert';
|
|
2
|
+
import { afterEach, describe, it } from 'node:test';
|
|
3
|
+
import { ConfigProviderMemory } from '@basemaps/config';
|
|
4
|
+
import { Epsg } from '@basemaps/geo';
|
|
5
|
+
import { FakeData, Imagery3857 } from '../../__tests__/config.data.js';
|
|
6
|
+
import { mockRequest } from '../../__tests__/xyz.util.js';
|
|
7
|
+
import { handler } from '../../index.js';
|
|
8
|
+
import { ConfigLoader } from '../../util/config.loader.js';
|
|
9
|
+
describe('/v1/link/:tileSet', () => {
|
|
10
|
+
const FakeTileSetName = 'tileset';
|
|
11
|
+
const config = new ConfigProviderMemory();
|
|
12
|
+
afterEach(() => {
|
|
13
|
+
config.objects.clear();
|
|
14
|
+
});
|
|
15
|
+
/**
|
|
16
|
+
* 3xx status responses
|
|
17
|
+
*/
|
|
18
|
+
// tileset found, is raster type, has one layer, has '3857' entry, imagery found > 302 response
|
|
19
|
+
it('success: redirect to pre-zoomed imagery', async (t) => {
|
|
20
|
+
t.mock.method(ConfigLoader, 'getDefaultConfig', () => Promise.resolve(config));
|
|
21
|
+
config.put(FakeData.tileSetRaster(FakeTileSetName));
|
|
22
|
+
config.put(Imagery3857);
|
|
23
|
+
const req = mockRequest(`/v1/link/${FakeTileSetName}`);
|
|
24
|
+
const res = await handler.router.handle(req);
|
|
25
|
+
strictEqual(res.status, 302);
|
|
26
|
+
strictEqual(res.statusDescription, 'Redirect to pre-zoomed imagery');
|
|
27
|
+
});
|
|
28
|
+
/**
|
|
29
|
+
* 4xx status responses
|
|
30
|
+
*/
|
|
31
|
+
// tileset not found > 404 response
|
|
32
|
+
it('failure: tileset not found', async (t) => {
|
|
33
|
+
t.mock.method(ConfigLoader, 'getDefaultConfig', () => Promise.resolve(config));
|
|
34
|
+
const req = mockRequest(`/v1/link/${FakeTileSetName}`);
|
|
35
|
+
const res = await handler.router.handle(req);
|
|
36
|
+
strictEqual(res.status, 404);
|
|
37
|
+
strictEqual(res.statusDescription, 'Tileset not found');
|
|
38
|
+
});
|
|
39
|
+
// tileset found, not raster type > 400 response
|
|
40
|
+
it('failure: tileset must be raster type', async (t) => {
|
|
41
|
+
t.mock.method(ConfigLoader, 'getDefaultConfig', () => Promise.resolve(config));
|
|
42
|
+
config.put(FakeData.tileSetVector(FakeTileSetName));
|
|
43
|
+
const req = mockRequest(`/v1/link/${FakeTileSetName}`);
|
|
44
|
+
const res = await handler.router.handle(req);
|
|
45
|
+
strictEqual(res.status, 400);
|
|
46
|
+
strictEqual(res.statusDescription, 'Tileset must be raster type');
|
|
47
|
+
});
|
|
48
|
+
// tileset found, is raster type, has more than one layer > 400 response
|
|
49
|
+
it('failure: too many layers', async (t) => {
|
|
50
|
+
t.mock.method(ConfigLoader, 'getDefaultConfig', () => Promise.resolve(config));
|
|
51
|
+
const tileSet = FakeData.tileSetRaster(FakeTileSetName);
|
|
52
|
+
// add another layer
|
|
53
|
+
tileSet.layers.push(tileSet.layers[0]);
|
|
54
|
+
config.put(tileSet);
|
|
55
|
+
const req = mockRequest(`/v1/link/${FakeTileSetName}`);
|
|
56
|
+
const res = await handler.router.handle(req);
|
|
57
|
+
strictEqual(res.status, 400);
|
|
58
|
+
strictEqual(res.statusDescription, 'Too many layers');
|
|
59
|
+
});
|
|
60
|
+
// tileset found, is raster type, has one layer, no '3857' entry > 400 response
|
|
61
|
+
it("failure: no imagery for '3857' projection", async (t) => {
|
|
62
|
+
t.mock.method(ConfigLoader, 'getDefaultConfig', () => Promise.resolve(config));
|
|
63
|
+
const tileSet = FakeData.tileSetRaster(FakeTileSetName);
|
|
64
|
+
// delete '3857' entry
|
|
65
|
+
delete tileSet.layers[0][Epsg.Google.code];
|
|
66
|
+
config.put(tileSet);
|
|
67
|
+
const req = mockRequest(`/v1/link/${FakeTileSetName}`);
|
|
68
|
+
const res = await handler.router.handle(req);
|
|
69
|
+
strictEqual(res.status, 400);
|
|
70
|
+
strictEqual(res.statusDescription, "No imagery for '3857' projection");
|
|
71
|
+
});
|
|
72
|
+
// tileset found, is raster type, has one layer, has '3857' entry, imagery not found > 400 response
|
|
73
|
+
it('failure: imagery not found', async (t) => {
|
|
74
|
+
t.mock.method(ConfigLoader, 'getDefaultConfig', () => Promise.resolve(config));
|
|
75
|
+
config.put(FakeData.tileSetRaster(FakeTileSetName));
|
|
76
|
+
const req = mockRequest(`/v1/link/${FakeTileSetName}`);
|
|
77
|
+
const res = await handler.router.handle(req);
|
|
78
|
+
strictEqual(res.status, 400);
|
|
79
|
+
strictEqual(res.statusDescription, 'Imagery not found');
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
//# sourceMappingURL=link.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.test.js","sourceRoot":"","sources":["../../../src/routes/__tests__/link.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import assert, { strictEqual } from 'node:assert';
|
|
2
|
+
import { afterEach, before, describe, it } from 'node:test';
|
|
3
|
+
import { copyright, createLicensorAttribution } from '@basemaps/attribution/build/utils.js';
|
|
4
|
+
import { ConfigProviderMemory } from '@basemaps/config';
|
|
5
|
+
import { Env } from '@basemaps/shared';
|
|
6
|
+
import { FakeData, Imagery3857 } from '../../__tests__/config.data.js';
|
|
7
|
+
import { Api, mockRequest } from '../../__tests__/xyz.util.js';
|
|
8
|
+
import { handler } from '../../index.js';
|
|
9
|
+
import { ConfigLoader } from '../../util/config.loader.js';
|
|
10
|
+
const defaultAttribution = `${copyright} LINZ`;
|
|
11
|
+
describe('/v1/styles', () => {
|
|
12
|
+
const host = 'https://tiles.test';
|
|
13
|
+
const config = new ConfigProviderMemory();
|
|
14
|
+
const FakeTileSetName = 'tileset';
|
|
15
|
+
const FakeLicensor1 = {
|
|
16
|
+
name: 'L1',
|
|
17
|
+
roles: ['licensor'],
|
|
18
|
+
};
|
|
19
|
+
const FakeLicensor2 = {
|
|
20
|
+
name: 'L2',
|
|
21
|
+
roles: ['licensor'],
|
|
22
|
+
};
|
|
23
|
+
before(() => {
|
|
24
|
+
process.env[Env.PublicUrlBase] = host;
|
|
25
|
+
});
|
|
26
|
+
afterEach(() => {
|
|
27
|
+
config.objects.clear();
|
|
28
|
+
});
|
|
29
|
+
// tileset exists, imagery not found
|
|
30
|
+
it('default: imagery not found', async (t) => {
|
|
31
|
+
t.mock.method(ConfigLoader, 'getDefaultConfig', () => Promise.resolve(config));
|
|
32
|
+
// insert
|
|
33
|
+
config.put(FakeData.tileSetRaster(FakeTileSetName));
|
|
34
|
+
// request
|
|
35
|
+
const req = mockRequest(`/v1/styles/${FakeTileSetName}.json`, 'get', Api.header);
|
|
36
|
+
const res = await handler.router.handle(req);
|
|
37
|
+
strictEqual(res.status, 200);
|
|
38
|
+
// extract
|
|
39
|
+
const body = Buffer.from(res.body, 'base64').toString();
|
|
40
|
+
const json = JSON.parse(body);
|
|
41
|
+
const source = Object.values(json.sources)[0];
|
|
42
|
+
assert(source != null);
|
|
43
|
+
assert(source.attribution != null);
|
|
44
|
+
// verify
|
|
45
|
+
strictEqual(source.attribution, defaultAttribution);
|
|
46
|
+
});
|
|
47
|
+
// tileset exists, imagery found, more than one layer
|
|
48
|
+
it('default: too many layers', async (t) => {
|
|
49
|
+
t.mock.method(ConfigLoader, 'getDefaultConfig', () => Promise.resolve(config));
|
|
50
|
+
// insert
|
|
51
|
+
const tileset = FakeData.tileSetRaster(FakeTileSetName);
|
|
52
|
+
assert(tileset.layers[0] != null);
|
|
53
|
+
tileset.layers.push(tileset.layers[0]);
|
|
54
|
+
assert(tileset.layers.length > 1);
|
|
55
|
+
config.put(tileset);
|
|
56
|
+
config.put(Imagery3857);
|
|
57
|
+
// request
|
|
58
|
+
const req = mockRequest(`/v1/styles/${FakeTileSetName}.json`, 'get', Api.header);
|
|
59
|
+
const res = await handler.router.handle(req);
|
|
60
|
+
strictEqual(res.status, 200);
|
|
61
|
+
// extract
|
|
62
|
+
const body = Buffer.from(res.body, 'base64').toString();
|
|
63
|
+
const json = JSON.parse(body);
|
|
64
|
+
const source = Object.values(json.sources)[0];
|
|
65
|
+
assert(source != null);
|
|
66
|
+
assert(source.attribution != null);
|
|
67
|
+
// verify
|
|
68
|
+
strictEqual(source.attribution, defaultAttribution);
|
|
69
|
+
});
|
|
70
|
+
// tileset exists, imagery found, one layer, no providers
|
|
71
|
+
it('default: no providers', async (t) => {
|
|
72
|
+
t.mock.method(ConfigLoader, 'getDefaultConfig', () => Promise.resolve(config));
|
|
73
|
+
// insert
|
|
74
|
+
const tileset = FakeData.tileSetRaster(FakeTileSetName);
|
|
75
|
+
assert(tileset.layers[0] != null);
|
|
76
|
+
assert(tileset.layers.length === 1);
|
|
77
|
+
const imagery = Imagery3857;
|
|
78
|
+
assert(imagery.providers == null);
|
|
79
|
+
config.put(tileset);
|
|
80
|
+
config.put(imagery);
|
|
81
|
+
// request
|
|
82
|
+
const req = mockRequest(`/v1/styles/${FakeTileSetName}.json`, 'get', Api.header);
|
|
83
|
+
const res = await handler.router.handle(req);
|
|
84
|
+
strictEqual(res.status, 200);
|
|
85
|
+
// extract
|
|
86
|
+
const body = Buffer.from(res.body, 'base64').toString();
|
|
87
|
+
const json = JSON.parse(body);
|
|
88
|
+
const source = Object.values(json.sources)[0];
|
|
89
|
+
assert(source != null);
|
|
90
|
+
assert(source.attribution != null);
|
|
91
|
+
// verify
|
|
92
|
+
strictEqual(source.attribution, defaultAttribution);
|
|
93
|
+
});
|
|
94
|
+
// tileset exists, imagery found, one layer, has providers, no licensors
|
|
95
|
+
it('default: no licensors', async (t) => {
|
|
96
|
+
t.mock.method(ConfigLoader, 'getDefaultConfig', () => Promise.resolve(config));
|
|
97
|
+
// insert
|
|
98
|
+
const tileset = FakeData.tileSetRaster(FakeTileSetName);
|
|
99
|
+
assert(tileset.layers[0] != null);
|
|
100
|
+
assert(tileset.layers.length === 1);
|
|
101
|
+
const imagery = Imagery3857;
|
|
102
|
+
imagery.providers = [];
|
|
103
|
+
assert(imagery.providers != null);
|
|
104
|
+
config.put(tileset);
|
|
105
|
+
config.put(imagery);
|
|
106
|
+
// request
|
|
107
|
+
const req = mockRequest(`/v1/styles/${FakeTileSetName}.json`, 'get', Api.header);
|
|
108
|
+
const res = await handler.router.handle(req);
|
|
109
|
+
strictEqual(res.status, 200);
|
|
110
|
+
// extract
|
|
111
|
+
const body = Buffer.from(res.body, 'base64').toString();
|
|
112
|
+
const json = JSON.parse(body);
|
|
113
|
+
const source = Object.values(json.sources)[0];
|
|
114
|
+
assert(source != null);
|
|
115
|
+
assert(source.attribution != null);
|
|
116
|
+
// verify
|
|
117
|
+
strictEqual(source.attribution, defaultAttribution);
|
|
118
|
+
});
|
|
119
|
+
// tileset exists, imagery found, one layer, has providers, one licensor
|
|
120
|
+
it('custom: one licensor', async (t) => {
|
|
121
|
+
t.mock.method(ConfigLoader, 'getDefaultConfig', () => Promise.resolve(config));
|
|
122
|
+
// insert
|
|
123
|
+
const tileset = FakeData.tileSetRaster(FakeTileSetName);
|
|
124
|
+
assert(tileset.layers[0] != null);
|
|
125
|
+
assert(tileset.layers.length === 1);
|
|
126
|
+
const imagery = Imagery3857;
|
|
127
|
+
imagery.providers = [FakeLicensor1];
|
|
128
|
+
assert(imagery.providers != null);
|
|
129
|
+
config.put(tileset);
|
|
130
|
+
config.put(imagery);
|
|
131
|
+
// request
|
|
132
|
+
const req = mockRequest(`/v1/styles/${FakeTileSetName}.json`, 'get', Api.header);
|
|
133
|
+
const res = await handler.router.handle(req);
|
|
134
|
+
strictEqual(res.status, 200);
|
|
135
|
+
// extract
|
|
136
|
+
const body = Buffer.from(res.body, 'base64').toString();
|
|
137
|
+
const json = JSON.parse(body);
|
|
138
|
+
const source = Object.values(json.sources)[0];
|
|
139
|
+
assert(source != null);
|
|
140
|
+
assert(source.attribution != null);
|
|
141
|
+
// verify
|
|
142
|
+
strictEqual(source.attribution, `${copyright} ${FakeLicensor1.name}`);
|
|
143
|
+
strictEqual(source.attribution, createLicensorAttribution([FakeLicensor1]));
|
|
144
|
+
});
|
|
145
|
+
// tileset exists, imagery found, one layer, has providers, two licensors
|
|
146
|
+
it('custom: two licensors', async (t) => {
|
|
147
|
+
t.mock.method(ConfigLoader, 'getDefaultConfig', () => Promise.resolve(config));
|
|
148
|
+
// insert
|
|
149
|
+
const tileset = FakeData.tileSetRaster(FakeTileSetName);
|
|
150
|
+
assert(tileset.layers[0] != null);
|
|
151
|
+
assert(tileset.layers.length === 1);
|
|
152
|
+
const imagery = Imagery3857;
|
|
153
|
+
imagery.providers = [FakeLicensor1, FakeLicensor2];
|
|
154
|
+
assert(imagery.providers != null);
|
|
155
|
+
config.put(tileset);
|
|
156
|
+
config.put(imagery);
|
|
157
|
+
// request
|
|
158
|
+
const req = mockRequest(`/v1/styles/${FakeTileSetName}.json`, 'get', Api.header);
|
|
159
|
+
const res = await handler.router.handle(req);
|
|
160
|
+
strictEqual(res.status, 200);
|
|
161
|
+
// extract
|
|
162
|
+
const body = Buffer.from(res.body, 'base64').toString();
|
|
163
|
+
const json = JSON.parse(body);
|
|
164
|
+
const source = Object.values(json.sources)[0];
|
|
165
|
+
assert(source != null);
|
|
166
|
+
assert(source.attribution != null);
|
|
167
|
+
// verify
|
|
168
|
+
strictEqual(source.attribution, `${copyright} ${FakeLicensor1.name}, ${FakeLicensor2.name}`);
|
|
169
|
+
strictEqual(source.attribution, createLicensorAttribution([FakeLicensor1, FakeLicensor2]));
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
//# sourceMappingURL=tile.style.json.attribution.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tile.style.json.attribution.test.js","sourceRoot":"","sources":["../../../src/routes/__tests__/tile.style.json.attribution.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BasemapsConfigProvider, ConfigTileSet } from '@basemaps/config';
|
|
2
|
+
import { Epsg, NamedBounds, Projection } from '@basemaps/geo';
|
|
2
3
|
import { BBox, MultiPolygon } from '@linzjs/geojson';
|
|
3
4
|
import { LambdaHttpRequest, LambdaHttpResponse } from '@linzjs/lambda';
|
|
4
5
|
/**
|
|
@@ -26,3 +27,20 @@ export interface TileAttributionGet {
|
|
|
26
27
|
* Create a LambdaHttpResponse for a attribution request
|
|
27
28
|
*/
|
|
28
29
|
export declare function tileAttributionGet(req: LambdaHttpRequest<TileAttributionGet>): Promise<LambdaHttpResponse>;
|
|
30
|
+
/**
|
|
31
|
+
* Construct a licensor attribution for a given tileSet.
|
|
32
|
+
*
|
|
33
|
+
* @param provider The BasemapsConfigProvider object.
|
|
34
|
+
* @param tileSet The tileset from which to build the attribution.
|
|
35
|
+
* @param projection The projection to consider.
|
|
36
|
+
*
|
|
37
|
+
* @returns A default attribution, if the tileset has more than one layer or no such imagery for the given projection exists.
|
|
38
|
+
* Otherwise, a copyright string comprising the names of the tileset's licensors.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* "CC BY 4.0 LINZ"
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* "CC BY 4.0 Nelson City Council, Tasman District Council, Waka Kotahi"
|
|
45
|
+
*/
|
|
46
|
+
export declare function createTileSetAttribution(provider: BasemapsConfigProvider, tileSet: ConfigTileSet, projection: Epsg): Promise<string>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createLicensorAttribution } from '@basemaps/attribution/build/utils.js';
|
|
1
2
|
import { getAllImagery, TileSetType } from '@basemaps/config';
|
|
2
3
|
import { Bounds, GoogleTms, Projection, Stac, TileMatrixSet, } from '@basemaps/geo';
|
|
3
4
|
import { extractYearRangeFromName, extractYearRangeFromTitle } from '@basemaps/shared';
|
|
@@ -69,7 +70,8 @@ async function tileSetAttribution(req, tileSet, tileMatrix) {
|
|
|
69
70
|
const config = await ConfigLoader.load(req);
|
|
70
71
|
const imagery = await getAllImagery(config, tileSet.layers, [tileMatrix.projection]);
|
|
71
72
|
const host = await config.Provider.get(config.Provider.id('linz'));
|
|
72
|
-
for (
|
|
73
|
+
for (let i = 0; i < tileSet.layers.length; i++) {
|
|
74
|
+
const layer = tileSet.layers[i];
|
|
73
75
|
const imgId = layer[proj.epsg.code];
|
|
74
76
|
if (imgId == null)
|
|
75
77
|
continue;
|
|
@@ -110,7 +112,7 @@ async function tileSetAttribution(req, tileSet, tileMatrix) {
|
|
|
110
112
|
stac_version: Stac.Version,
|
|
111
113
|
license: Stac.License,
|
|
112
114
|
id: im.id,
|
|
113
|
-
providers: getHost(host),
|
|
115
|
+
providers: im.providers ?? getHost(host),
|
|
114
116
|
title,
|
|
115
117
|
description: 'No description',
|
|
116
118
|
extent,
|
|
@@ -118,7 +120,7 @@ async function tileSetAttribution(req, tileSet, tileMatrix) {
|
|
|
118
120
|
summaries: {
|
|
119
121
|
'linz:category': im.category,
|
|
120
122
|
'linz:zoom': { min: zoomMin, max: zoomMax },
|
|
121
|
-
'linz:priority': [1000 +
|
|
123
|
+
'linz:priority': [1000 + i],
|
|
122
124
|
},
|
|
123
125
|
});
|
|
124
126
|
}
|
|
@@ -162,4 +164,37 @@ export async function tileAttributionGet(req) {
|
|
|
162
164
|
response.json(attributions);
|
|
163
165
|
return response;
|
|
164
166
|
}
|
|
167
|
+
/**
|
|
168
|
+
* Construct a licensor attribution for a given tileSet.
|
|
169
|
+
*
|
|
170
|
+
* @param provider The BasemapsConfigProvider object.
|
|
171
|
+
* @param tileSet The tileset from which to build the attribution.
|
|
172
|
+
* @param projection The projection to consider.
|
|
173
|
+
*
|
|
174
|
+
* @returns A default attribution, if the tileset has more than one layer or no such imagery for the given projection exists.
|
|
175
|
+
* Otherwise, a copyright string comprising the names of the tileset's licensors.
|
|
176
|
+
*
|
|
177
|
+
* @example
|
|
178
|
+
* "CC BY 4.0 LINZ"
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* "CC BY 4.0 Nelson City Council, Tasman District Council, Waka Kotahi"
|
|
182
|
+
*/
|
|
183
|
+
export async function createTileSetAttribution(provider, tileSet, projection) {
|
|
184
|
+
// ensure the tileset has exactly one layer
|
|
185
|
+
if (tileSet.layers.length > 1 || tileSet.layers[0] == null) {
|
|
186
|
+
return createLicensorAttribution();
|
|
187
|
+
}
|
|
188
|
+
// ensure imagery exist for the given projection
|
|
189
|
+
const imgId = tileSet.layers[0][projection.code];
|
|
190
|
+
if (imgId == null)
|
|
191
|
+
return '';
|
|
192
|
+
// attempt to load the imagery
|
|
193
|
+
const imagery = await provider.Imagery.get(imgId);
|
|
194
|
+
if (imagery?.providers == null) {
|
|
195
|
+
return createLicensorAttribution();
|
|
196
|
+
}
|
|
197
|
+
// return a licensor attribution string
|
|
198
|
+
return createLicensorAttribution(imagery.providers);
|
|
199
|
+
}
|
|
165
200
|
//# sourceMappingURL=attribution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attribution.js","sourceRoot":"","sources":["../../src/routes/attribution.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"attribution.js","sourceRoot":"","sources":["../../src/routes/attribution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { LambdaHttpRequest, LambdaHttpResponse } from '@linzjs/lambda';
|
|
2
|
+
export interface LinkGet {
|
|
3
|
+
Params: {
|
|
4
|
+
tileSet: string;
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Redirect the client to a Basemaps URL that is already zoomed to the extent of the tileset's imagery.
|
|
9
|
+
*
|
|
10
|
+
* /v1/link/:tileSet
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* '/v1/link/ashburton-2023-0.1m'
|
|
14
|
+
*
|
|
15
|
+
* @returns on success, 302 redirect response. on failure, 4xx status code response.
|
|
16
|
+
*/
|
|
17
|
+
export declare function linkGet(req: LambdaHttpRequest<LinkGet>): Promise<LambdaHttpResponse>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { TileSetType } from '@basemaps/config';
|
|
2
|
+
import { Epsg } from '@basemaps/geo';
|
|
3
|
+
import { getPreviewUrl } from '@basemaps/shared';
|
|
4
|
+
import { LambdaHttpResponse } from '@linzjs/lambda';
|
|
5
|
+
import { ConfigLoader } from '../util/config.loader.js';
|
|
6
|
+
/**
|
|
7
|
+
* Redirect the client to a Basemaps URL that is already zoomed to the extent of the tileset's imagery.
|
|
8
|
+
*
|
|
9
|
+
* /v1/link/:tileSet
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* '/v1/link/ashburton-2023-0.1m'
|
|
13
|
+
*
|
|
14
|
+
* @returns on success, 302 redirect response. on failure, 4xx status code response.
|
|
15
|
+
*/
|
|
16
|
+
export async function linkGet(req) {
|
|
17
|
+
const config = await ConfigLoader.load(req);
|
|
18
|
+
// get tileset
|
|
19
|
+
req.timer.start('tileset:load');
|
|
20
|
+
const tileSet = await config.TileSet.get(req.params.tileSet);
|
|
21
|
+
req.timer.end('tileset:load');
|
|
22
|
+
if (tileSet == null)
|
|
23
|
+
return new LambdaHttpResponse(404, 'Tileset not found');
|
|
24
|
+
if (tileSet.type !== TileSetType.Raster)
|
|
25
|
+
return new LambdaHttpResponse(400, 'Tileset must be raster type');
|
|
26
|
+
// TODO: add support for 'aerial' and 'elevation' multi-layer tilesets
|
|
27
|
+
if (tileSet.layers.length !== 1)
|
|
28
|
+
return new LambdaHttpResponse(400, 'Too many layers');
|
|
29
|
+
// get imagery
|
|
30
|
+
const imageryId = tileSet.layers[0][Epsg.Google.code];
|
|
31
|
+
if (imageryId === undefined)
|
|
32
|
+
return new LambdaHttpResponse(400, "No imagery for '3857' projection");
|
|
33
|
+
const imagery = await config.Imagery.get(imageryId);
|
|
34
|
+
if (imagery == null)
|
|
35
|
+
return new LambdaHttpResponse(400, 'Imagery not found');
|
|
36
|
+
// do redirect
|
|
37
|
+
const url = getPreviewUrl({ imagery });
|
|
38
|
+
return new LambdaHttpResponse(302, 'Redirect to pre-zoomed imagery', {
|
|
39
|
+
location: `/${url.slug}?i=${url.name}`,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/routes/link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAqB,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEvE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAQxD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAA+B;IAC3D,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5C,cAAc;IAEd,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7D,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAE9B,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,IAAI,kBAAkB,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IAE7E,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,MAAM;QAAE,OAAO,IAAI,kBAAkB,CAAC,GAAG,EAAE,6BAA6B,CAAC,CAAC;IAE3G,sEAAsE;IACtE,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IAEvF,cAAc;IAEd,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtD,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,IAAI,kBAAkB,CAAC,GAAG,EAAE,kCAAkC,CAAC,CAAC;IAEpG,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACpD,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,IAAI,kBAAkB,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IAE7E,cAAc;IAEd,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAEvC,OAAO,IAAI,kBAAkB,CAAC,GAAG,EAAE,gCAAgC,EAAE;QACnE,QAAQ,EAAE,IAAI,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,EAAE;KACvC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ConfigTileSetRaster, StyleJson } from '@basemaps/config';
|
|
1
|
+
import { BasemapsConfigProvider, ConfigTileSetRaster, StyleJson } from '@basemaps/config';
|
|
2
2
|
import { TileMatrixSet } from '@basemaps/geo';
|
|
3
3
|
import { LambdaHttpRequest, LambdaHttpResponse } from '@linzjs/lambda';
|
|
4
4
|
/**
|
|
@@ -40,7 +40,7 @@ export interface StyleConfig {
|
|
|
40
40
|
* Generate a StyleJSON from a tileset
|
|
41
41
|
* @returns
|
|
42
42
|
*/
|
|
43
|
-
export declare function tileSetToStyle(req: LambdaHttpRequest<StyleGet>, tileSet: ConfigTileSetRaster, tileMatrix: TileMatrixSet, apiKey: string): StyleJson
|
|
43
|
+
export declare function tileSetToStyle(req: LambdaHttpRequest<StyleGet>, config: BasemapsConfigProvider, tileSet: ConfigTileSetRaster, tileMatrix: TileMatrixSet, apiKey: string): Promise<StyleJson>;
|
|
44
44
|
/**
|
|
45
45
|
* generate a style from a tile set which has a output
|
|
46
46
|
*/
|