@basemaps/cli-vector 8.0.0 → 8.2.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/build/bin.js +2 -2
- package/build/cli/cli.analyse.d.ts +34 -0
- package/build/cli/cli.analyse.js +152 -0
- package/build/cli/cli.analyse.js.map +1 -0
- package/build/cli/cli.create.d.ts +39 -0
- package/build/cli/cli.create.js +207 -0
- package/build/cli/cli.create.js.map +1 -0
- package/build/cli/cli.extract.d.ts +8 -17
- package/build/cli/cli.extract.js +43 -33
- package/build/cli/cli.extract.js.map +1 -1
- package/build/cli/cli.join.d.ts +44 -0
- package/build/cli/cli.join.js +149 -0
- package/build/cli/cli.join.js.map +1 -0
- package/build/extract.js.map +1 -0
- package/build/generalization/generalization.d.ts +9 -0
- package/build/generalization/generalization.js +159 -0
- package/build/generalization/generalization.js.map +1 -0
- package/build/generalization/simplify.d.ts +2 -0
- package/build/generalization/simplify.js +80 -0
- package/build/generalization/simplify.js.map +1 -0
- package/build/index.d.ts +83 -5
- package/build/index.js +7 -1
- package/build/index.js.map +1 -1
- package/build/modify/consts.d.ts +1 -0
- package/build/modify/consts.js +23 -0
- package/build/modify/consts.js.map +1 -0
- package/build/modify/layers/__test__/contours.test.d.ts +1 -0
- package/build/modify/layers/__test__/contours.test.js +59 -0
- package/build/modify/layers/__test__/contours.test.js.map +1 -0
- package/build/modify/layers/contours.d.ts +28 -0
- package/build/modify/layers/contours.js +90 -0
- package/build/modify/layers/contours.js.map +1 -0
- package/build/modify/layers/place_labels.d.ts +18 -0
- package/build/modify/layers/place_labels.js +122 -0
- package/build/modify/layers/place_labels.js.map +1 -0
- package/build/modify/layers/pois.d.ts +11 -0
- package/build/modify/layers/pois.js +27 -0
- package/build/modify/layers/pois.js.map +1 -0
- package/build/modify/layers/public_transport.d.ts +12 -0
- package/build/modify/layers/public_transport.js +53 -0
- package/build/modify/layers/public_transport.js.map +1 -0
- package/build/modify/layers/street_labels.d.ts +12 -0
- package/build/modify/layers/street_labels.js +34 -0
- package/build/modify/layers/street_labels.js.map +1 -0
- package/build/modify/layers/streets.d.ts +12 -0
- package/build/modify/layers/streets.js +72 -0
- package/build/modify/layers/streets.js.map +1 -0
- package/build/modify/layers/water_polygons.d.ts +13 -0
- package/build/modify/layers/water_polygons.js +85 -0
- package/build/modify/layers/water_polygons.js.map +1 -0
- package/build/modify/modify.d.ts +11 -0
- package/build/modify/modify.js +48 -0
- package/build/modify/modify.js.map +1 -0
- package/build/modify/parser.d.ts +47 -0
- package/build/modify/parser.js +24 -0
- package/build/modify/parser.js.map +1 -0
- package/build/modify/schema.d.ts +17 -0
- package/build/modify/schema.js +2 -0
- package/build/modify/schema.js.map +1 -0
- package/build/modify/shared.d.ts +4 -0
- package/build/modify/shared.js +38 -0
- package/build/modify/shared.js.map +1 -0
- package/build/schema-loader/parser.d.ts +8 -0
- package/build/schema-loader/parser.js +1 -0
- package/build/schema-loader/parser.js.map +1 -1
- package/build/schema-loader/schema.d.ts +19 -5
- package/build/schema-loader/schema.loader.js +10 -5
- package/build/schema-loader/schema.loader.js.map +1 -1
- package/build/stac.d.ts +41 -0
- package/build/stac.js +185 -0
- package/build/stac.js.map +1 -0
- package/build/transform/covt.d.ts +5 -0
- package/build/transform/covt.js +23 -0
- package/build/transform/covt.js.map +1 -0
- package/build/transform/mbtiles.to.ttiles.d.ts +14 -0
- package/build/transform/mbtiles.to.ttiles.js +60 -0
- package/build/transform/mbtiles.to.ttiles.js.map +1 -0
- package/build/transform/ogr2ogr.d.ts +7 -0
- package/build/transform/ogr2ogr.js +20 -0
- package/build/transform/ogr2ogr.js.map +1 -0
- package/build/transform/tippecanoe.d.ts +14 -0
- package/build/transform/tippecanoe.js +68 -0
- package/build/transform/tippecanoe.js.map +1 -0
- package/build/types/VectorGeoFeature.d.ts +9 -0
- package/build/types/VectorGeoFeature.js +2 -0
- package/build/types/VectorGeoFeature.js.map +1 -0
- package/build/util.d.ts +35 -0
- package/build/util.js +43 -0
- package/build/util.js.map +1 -0
- package/dist/index.cjs +20753 -9551
- package/package.json +23 -8
- package/build/extract/extract.js.map +0 -1
- /package/build/{extract/extract.d.ts → extract.d.ts} +0 -0
- /package/build/{extract/extract.js → extract.js} +0 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { handleRoadFeature } from '../shared.js';
|
|
2
|
+
/**
|
|
3
|
+
* Processes a 'street_labels' layer feature.
|
|
4
|
+
*
|
|
5
|
+
* @param feature - the feature to process
|
|
6
|
+
* @param options - the layer's options
|
|
7
|
+
* @param logger - a logger instance
|
|
8
|
+
* @returns the processed feature
|
|
9
|
+
*/
|
|
10
|
+
export function handleLayerStreetLabels(feature, options, logger) {
|
|
11
|
+
logger.trace({}, 'HandleStreetLabels:Start');
|
|
12
|
+
const kind = options.layer.tags['kind'];
|
|
13
|
+
switch (kind) {
|
|
14
|
+
case 'road':
|
|
15
|
+
feature = handleKindRoad(feature, options, logger);
|
|
16
|
+
break;
|
|
17
|
+
}
|
|
18
|
+
logger.trace({}, 'HandleStreetLabels:End');
|
|
19
|
+
return feature;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Processes a 'street_labels' layer feature with a 'kind' value of 'road'.
|
|
23
|
+
*
|
|
24
|
+
* @param feature - the feature to process
|
|
25
|
+
* @param logger - a logger instance
|
|
26
|
+
* @returns the processed feature
|
|
27
|
+
*/
|
|
28
|
+
function handleKindRoad(feature, options, logger) {
|
|
29
|
+
logger.trace({}, 'HandleKindRoad:Start');
|
|
30
|
+
feature = handleRoadFeature(feature, options, logger);
|
|
31
|
+
logger.trace({}, 'HandleKindRoad:End');
|
|
32
|
+
return feature;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=street_labels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"street_labels.js","sourceRoot":"","sources":["../../../src/modify/layers/street_labels.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAyB,EACzB,OAA8B,EAC9B,MAAe;IAEf,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,0BAA0B,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAExC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM;YACT,OAAO,GAAG,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YACnD,MAAM;IACV,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,wBAAwB,CAAC,CAAC;IAC3C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,OAAyB,EAAE,OAA8B,EAAE,MAAe;IAChG,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,sBAAsB,CAAC,CAAC;IACzC,OAAO,GAAG,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAEtD,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC;IACvC,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { LogType } from '@basemaps/shared';
|
|
2
|
+
import { VectorCreationOptions } from '../../stac.js';
|
|
3
|
+
import { VectorGeoFeature } from '../../types/VectorGeoFeature.js';
|
|
4
|
+
/**
|
|
5
|
+
* Processes a 'streets' layer feature.
|
|
6
|
+
*
|
|
7
|
+
* @param feature - the feature to process
|
|
8
|
+
* @param options - the layer's options
|
|
9
|
+
* @param logger - a logger instance
|
|
10
|
+
* @returns the processed feature
|
|
11
|
+
*/
|
|
12
|
+
export declare function handleLayerStreets(feature: VectorGeoFeature, options: VectorCreationOptions, logger: LogType): VectorGeoFeature;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { handleRoadFeature } from '../shared.js';
|
|
2
|
+
/**
|
|
3
|
+
* Processes a 'streets' layer feature.
|
|
4
|
+
*
|
|
5
|
+
* @param feature - the feature to process
|
|
6
|
+
* @param options - the layer's options
|
|
7
|
+
* @param logger - a logger instance
|
|
8
|
+
* @returns the processed feature
|
|
9
|
+
*/
|
|
10
|
+
export function handleLayerStreets(feature, options, logger) {
|
|
11
|
+
logger.trace({}, 'HandleStreets:Start');
|
|
12
|
+
feature = structuredClone(feature);
|
|
13
|
+
const kind = options.layer.tags['kind'];
|
|
14
|
+
switch (kind) {
|
|
15
|
+
case 'road':
|
|
16
|
+
feature = handleKindRoad(feature, options, logger);
|
|
17
|
+
break;
|
|
18
|
+
case 'track':
|
|
19
|
+
feature = handleKindTrack(feature, logger);
|
|
20
|
+
break;
|
|
21
|
+
}
|
|
22
|
+
Object.entries(feature.properties).forEach(([key, value]) => {
|
|
23
|
+
// Update bridge and tunnel to boolean
|
|
24
|
+
if (value === 'true') {
|
|
25
|
+
feature.properties[key] = true;
|
|
26
|
+
}
|
|
27
|
+
else if (value === 'false') {
|
|
28
|
+
feature.properties[key] = false;
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
logger.trace({}, 'HandleStreets:End');
|
|
32
|
+
return feature;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Processes a 'streets' layer feature with a 'kind' value of 'road'.
|
|
36
|
+
*
|
|
37
|
+
* @param feature - the feature to process
|
|
38
|
+
* @param logger - a logger instance
|
|
39
|
+
* @returns the processed feature
|
|
40
|
+
*/
|
|
41
|
+
function handleKindRoad(feature, options, logger) {
|
|
42
|
+
logger.trace({}, 'HandleKindRoad:Start');
|
|
43
|
+
feature = handleRoadFeature(feature, options, logger);
|
|
44
|
+
logger.trace({}, 'HandleKindRoad:End');
|
|
45
|
+
return feature;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Processes a 'streets' layer feature with a 'kind' value of 'track'.
|
|
49
|
+
*
|
|
50
|
+
* @param feature - the feature to process
|
|
51
|
+
* @param logger - a logger instance
|
|
52
|
+
* @returns the processed feature
|
|
53
|
+
*/
|
|
54
|
+
function handleKindTrack(feature, logger) {
|
|
55
|
+
logger.trace({}, 'HandleKindTrack:Start');
|
|
56
|
+
feature = structuredClone(feature);
|
|
57
|
+
// calculate the 'subclass' property
|
|
58
|
+
let subclass = feature.properties['track_use'];
|
|
59
|
+
const trackType = feature.properties['track_type'];
|
|
60
|
+
if (trackType != null)
|
|
61
|
+
subclass += `_${trackType}`;
|
|
62
|
+
const status = feature.properties['status'];
|
|
63
|
+
if (status != null)
|
|
64
|
+
subclass += `_${status}`;
|
|
65
|
+
// append/override tags
|
|
66
|
+
feature.properties['subclass'] = subclass;
|
|
67
|
+
logger.trace({ subclass }, 'new/overidden tags');
|
|
68
|
+
// return feature
|
|
69
|
+
logger.trace({}, 'HandleKindTrack:End');
|
|
70
|
+
return feature;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=streets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streets.js","sourceRoot":"","sources":["../../../src/modify/layers/streets.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAyB,EACzB,OAA8B,EAC9B,MAAe;IAEf,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,qBAAqB,CAAC,CAAC;IACxC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAExC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM;YACT,OAAO,GAAG,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YACnD,MAAM;QACR,KAAK,OAAO;YACV,OAAO,GAAG,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC3C,MAAM;IACV,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC1D,sCAAsC;QACtC,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YACrB,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACjC,CAAC;aAAM,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YAC7B,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAClC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC;IACtC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,OAAyB,EAAE,OAA8B,EAAE,MAAe;IAChG,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,sBAAsB,CAAC,CAAC;IACzC,OAAO,GAAG,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAEtD,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC;IACvC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,OAAyB,EAAE,MAAe;IACjE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,uBAAuB,CAAC,CAAC;IAC1C,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAEnC,oCAAoC;IACpC,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAE/C,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IACnD,IAAI,SAAS,IAAI,IAAI;QAAE,QAAQ,IAAI,IAAI,SAAS,EAAE,CAAC;IAEnD,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,MAAM,IAAI,IAAI;QAAE,QAAQ,IAAI,IAAI,MAAM,EAAE,CAAC;IAE7C,uBAAuB;IACvB,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;IAC1C,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,EAAE,oBAAoB,CAAC,CAAC;IAEjD,iBAAiB;IACjB,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,qBAAqB,CAAC,CAAC;IACxC,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { LogType } from '@basemaps/shared';
|
|
2
|
+
import { VectorCreationOptions } from '../../stac.js';
|
|
3
|
+
import { VectorGeoFeature } from '../../types/VectorGeoFeature.js';
|
|
4
|
+
export declare const LargeLakeSize = 4000000;
|
|
5
|
+
/**
|
|
6
|
+
* Processes a 'water_polygons' layer feature.
|
|
7
|
+
*
|
|
8
|
+
* @param feature - the feature to process
|
|
9
|
+
* @param options - the layer's options
|
|
10
|
+
* @param logger - a logger instance
|
|
11
|
+
* @returns the processed feature
|
|
12
|
+
*/
|
|
13
|
+
export declare function handleLayerWaterPolygons(feature: VectorGeoFeature, options: VectorCreationOptions, logger: LogType): VectorGeoFeature;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { Area } from '@linzjs/geojson';
|
|
2
|
+
export const LargeLakeSize = 4_000_000;
|
|
3
|
+
/**
|
|
4
|
+
* Processes a 'water_polygons' layer feature.
|
|
5
|
+
*
|
|
6
|
+
* @param feature - the feature to process
|
|
7
|
+
* @param options - the layer's options
|
|
8
|
+
* @param logger - a logger instance
|
|
9
|
+
* @returns the processed feature
|
|
10
|
+
*/
|
|
11
|
+
export function handleLayerWaterPolygons(feature, options, logger) {
|
|
12
|
+
logger.trace({}, 'HandleWaterPolygons:Start');
|
|
13
|
+
feature = structuredClone(feature);
|
|
14
|
+
const kind = options.layer.tags['kind'];
|
|
15
|
+
switch (kind) {
|
|
16
|
+
case 'water':
|
|
17
|
+
feature = handleKindWater(feature, logger);
|
|
18
|
+
break;
|
|
19
|
+
case 'river':
|
|
20
|
+
feature = handleKindRiver(feature, options, logger);
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
const orientatn = feature.properties['orientatn'];
|
|
24
|
+
if (orientatn != null) {
|
|
25
|
+
const direction = orientatn;
|
|
26
|
+
feature.properties['direction'] = direction;
|
|
27
|
+
logger.trace({ direction }, 'new/overidden tags');
|
|
28
|
+
}
|
|
29
|
+
logger.trace({}, 'HandleWaterPolygons:End');
|
|
30
|
+
return feature;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Processes a 'water_polygons' layer feature with a 'kind' value of 'water'.
|
|
34
|
+
*
|
|
35
|
+
* @param feature - the feature to process
|
|
36
|
+
* @param logger - a logger instance
|
|
37
|
+
* @returns the processed feature
|
|
38
|
+
*/
|
|
39
|
+
function handleKindWater(feature, logger) {
|
|
40
|
+
logger.trace({}, 'HandleKindWater:Start');
|
|
41
|
+
feature = structuredClone(feature);
|
|
42
|
+
const name = feature.properties['name'];
|
|
43
|
+
if (name == null) {
|
|
44
|
+
// inherit the lake's name from the feature's 'grp_name' property
|
|
45
|
+
const grpName = feature.properties['grp_name'];
|
|
46
|
+
feature.properties['name'] = grpName;
|
|
47
|
+
logger.trace({ name: grpName }, 'new/overidden tags');
|
|
48
|
+
}
|
|
49
|
+
// determine if the lake is large
|
|
50
|
+
let area = 0;
|
|
51
|
+
if (feature.geometry.type === 'MultiPolygon') {
|
|
52
|
+
area = Area.multiPolygon(feature.geometry.coordinates);
|
|
53
|
+
}
|
|
54
|
+
else if (feature.geometry.type === 'Polygon') {
|
|
55
|
+
// for a single polygon, we can use the Area.polygon method directly
|
|
56
|
+
area = Area.polygon(feature.geometry.coordinates);
|
|
57
|
+
}
|
|
58
|
+
const minzoom = area >= LargeLakeSize ? 1 : 9;
|
|
59
|
+
feature.tippecanoe.minzoom = minzoom;
|
|
60
|
+
logger.trace({ minzoom }, 'overidden styles');
|
|
61
|
+
logger.trace({}, 'HandleKindWater:End');
|
|
62
|
+
return feature;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Processes a 'water_polygons' layer feature with a 'kind' value of 'river'.
|
|
66
|
+
*
|
|
67
|
+
* @param feature - the feature to process
|
|
68
|
+
* @param logger - a logger instance
|
|
69
|
+
* @returns the processed feature
|
|
70
|
+
*/
|
|
71
|
+
function handleKindRiver(feature, options, logger) {
|
|
72
|
+
logger.trace({}, 'HandleKindRiver:Start');
|
|
73
|
+
feature = structuredClone(feature);
|
|
74
|
+
if (options.layer.style.minZoom < 11) {
|
|
75
|
+
const name = feature.properties['name'];
|
|
76
|
+
if (name === '') {
|
|
77
|
+
const minzoom = 11;
|
|
78
|
+
feature.tippecanoe.minzoom = minzoom;
|
|
79
|
+
logger.trace({ minzoom }, 'overidden styles');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
logger.trace({}, 'HandleKindRiver:End');
|
|
83
|
+
return feature;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=water_polygons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"water_polygons.js","sourceRoot":"","sources":["../../../src/modify/layers/water_polygons.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { LogType } from '@basemaps/shared';
|
|
2
|
+
import { VectorCreationOptions } from '../stac.js';
|
|
3
|
+
import { VectorGeoFeature } from '../types/VectorGeoFeature.js';
|
|
4
|
+
/**
|
|
5
|
+
* special tag function to check if the name to decide whether to do special tags
|
|
6
|
+
* Include like place_labels, pois(for building poi), contours, public_transport, street_labels/streets, water_lines/water_polygons
|
|
7
|
+
*
|
|
8
|
+
* For a given feature and the Shortbread layer to which we've assigned it, we may need to adjust the feature's metadata (i.e. properties) so that we can distinguish it from others in the same layer.
|
|
9
|
+
* Such distinctions include marking road-type features based on whether they describe motorway, primary, or secondary roads, so we can style each set differently.
|
|
10
|
+
*/
|
|
11
|
+
export declare function modifyFeature(feature: VectorGeoFeature, options: VectorCreationOptions, logger: LogType): VectorGeoFeature | null;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { handleLayerContours } from './layers/contours.js';
|
|
2
|
+
import { handleLayerPlaceLabels } from './layers/place_labels.js';
|
|
3
|
+
import { handleLayerPois } from './layers/pois.js';
|
|
4
|
+
import { handleLayerPublicTransport } from './layers/public_transport.js';
|
|
5
|
+
import { handleLayerStreetLabels } from './layers/street_labels.js';
|
|
6
|
+
import { handleLayerStreets } from './layers/streets.js';
|
|
7
|
+
import { handleLayerWaterPolygons } from './layers/water_polygons.js';
|
|
8
|
+
/**
|
|
9
|
+
* special tag function to check if the name to decide whether to do special tags
|
|
10
|
+
* Include like place_labels, pois(for building poi), contours, public_transport, street_labels/streets, water_lines/water_polygons
|
|
11
|
+
*
|
|
12
|
+
* For a given feature and the Shortbread layer to which we've assigned it, we may need to adjust the feature's metadata (i.e. properties) so that we can distinguish it from others in the same layer.
|
|
13
|
+
* Such distinctions include marking road-type features based on whether they describe motorway, primary, or secondary roads, so we can style each set differently.
|
|
14
|
+
*/
|
|
15
|
+
export function modifyFeature(feature, options, logger) {
|
|
16
|
+
const id = options.layer.id; // lds dataset id
|
|
17
|
+
const layerName = options.name; // shortbread layer
|
|
18
|
+
logger.trace({ id, layerName }, 'ModifyFeature:Start');
|
|
19
|
+
let modifiedFeature;
|
|
20
|
+
switch (layerName) {
|
|
21
|
+
case 'contours':
|
|
22
|
+
modifiedFeature = handleLayerContours(feature, options, logger);
|
|
23
|
+
break;
|
|
24
|
+
case 'place_labels':
|
|
25
|
+
modifiedFeature = handleLayerPlaceLabels(feature, logger);
|
|
26
|
+
break;
|
|
27
|
+
case 'pois':
|
|
28
|
+
modifiedFeature = handleLayerPois(feature, logger);
|
|
29
|
+
break;
|
|
30
|
+
case 'public_transport':
|
|
31
|
+
modifiedFeature = handleLayerPublicTransport(feature, options, logger);
|
|
32
|
+
break;
|
|
33
|
+
case 'street_labels':
|
|
34
|
+
modifiedFeature = handleLayerStreetLabels(feature, options, logger);
|
|
35
|
+
break;
|
|
36
|
+
case 'streets':
|
|
37
|
+
modifiedFeature = handleLayerStreets(feature, options, logger);
|
|
38
|
+
break;
|
|
39
|
+
case 'water_polygons':
|
|
40
|
+
modifiedFeature = handleLayerWaterPolygons(feature, options, logger);
|
|
41
|
+
break;
|
|
42
|
+
default:
|
|
43
|
+
modifiedFeature = structuredClone(feature);
|
|
44
|
+
}
|
|
45
|
+
logger.trace({ id, layerName }, 'ModifyFeature:End');
|
|
46
|
+
return modifiedFeature;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=modify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modify.js","sourceRoot":"","sources":["../../src/modify/modify.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAyB,EACzB,OAA8B,EAC9B,MAAe;IAEf,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,iBAAiB;IAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,mBAAmB;IAEnD,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,qBAAqB,CAAC,CAAC;IACvD,IAAI,eAAwC,CAAC;IAE7C,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,UAAU;YACb,eAAe,GAAG,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YAChE,MAAM;QACR,KAAK,cAAc;YACjB,eAAe,GAAG,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC1D,MAAM;QACR,KAAK,MAAM;YACT,eAAe,GAAG,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACnD,MAAM;QACR,KAAK,kBAAkB;YACrB,eAAe,GAAG,0BAA0B,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YACvE,MAAM;QACR,KAAK,eAAe;YAClB,eAAe,GAAG,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YACpE,MAAM;QACR,KAAK,SAAS;YACZ,eAAe,GAAG,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YAC/D,MAAM;QACR,KAAK,gBAAgB;YACnB,eAAe,GAAG,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YACrE,MAAM;QACR;YACE,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,mBAAmB,CAAC,CAAC;IACrD,OAAO,eAAe,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const zPlaceLabelsProperties: z.ZodObject<{
|
|
3
|
+
/** @example "Kaitaia" */
|
|
4
|
+
label: z.ZodString;
|
|
5
|
+
/** @example "TWN1" */
|
|
6
|
+
style: z.ZodString;
|
|
7
|
+
/** @example "city" */
|
|
8
|
+
place: z.ZodString;
|
|
9
|
+
/** @example 7 */
|
|
10
|
+
adminlevel: z.ZodNumber;
|
|
11
|
+
/** @example "0" */
|
|
12
|
+
natural: z.ZodString;
|
|
13
|
+
/** @example "0" */
|
|
14
|
+
water: z.ZodString;
|
|
15
|
+
}, "strip", z.ZodTypeAny, {
|
|
16
|
+
style: string;
|
|
17
|
+
label: string;
|
|
18
|
+
place: string;
|
|
19
|
+
adminlevel: number;
|
|
20
|
+
natural: string;
|
|
21
|
+
water: string;
|
|
22
|
+
}, {
|
|
23
|
+
style: string;
|
|
24
|
+
label: string;
|
|
25
|
+
place: string;
|
|
26
|
+
adminlevel: number;
|
|
27
|
+
natural: string;
|
|
28
|
+
water: string;
|
|
29
|
+
}>;
|
|
30
|
+
export declare const zPlaceLabelsTippecanoe: z.ZodObject<{
|
|
31
|
+
/** @example "place_labels" */
|
|
32
|
+
layer: z.ZodString;
|
|
33
|
+
/** @example 8 */
|
|
34
|
+
minzoom: z.ZodNumber;
|
|
35
|
+
/** @example 8 */
|
|
36
|
+
maxzoom: z.ZodNumber;
|
|
37
|
+
}, "strip", z.ZodTypeAny, {
|
|
38
|
+
layer: string;
|
|
39
|
+
minzoom: number;
|
|
40
|
+
maxzoom: number;
|
|
41
|
+
}, {
|
|
42
|
+
layer: string;
|
|
43
|
+
minzoom: number;
|
|
44
|
+
maxzoom: number;
|
|
45
|
+
}>;
|
|
46
|
+
export type zTypePlaceLabelsProperties = z.infer<typeof zPlaceLabelsProperties>;
|
|
47
|
+
export type zTypePlaceLabelsTippecanoe = z.infer<typeof zPlaceLabelsTippecanoe>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const zPlaceLabelsProperties = z.object({
|
|
3
|
+
/** @example "Kaitaia" */
|
|
4
|
+
label: z.string(),
|
|
5
|
+
/** @example "TWN1" */
|
|
6
|
+
style: z.string(),
|
|
7
|
+
/** @example "city" */
|
|
8
|
+
place: z.string(),
|
|
9
|
+
/** @example 7 */
|
|
10
|
+
adminlevel: z.number(),
|
|
11
|
+
/** @example "0" */
|
|
12
|
+
natural: z.string(),
|
|
13
|
+
/** @example "0" */
|
|
14
|
+
water: z.string(),
|
|
15
|
+
});
|
|
16
|
+
export const zPlaceLabelsTippecanoe = z.object({
|
|
17
|
+
/** @example "place_labels" */
|
|
18
|
+
layer: z.string(),
|
|
19
|
+
/** @example 8 */
|
|
20
|
+
minzoom: z.number(),
|
|
21
|
+
/** @example 8 */
|
|
22
|
+
maxzoom: z.number(),
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/modify/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,yBAAyB;IACzB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IAEjB,sBAAsB;IACtB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IAEjB,sBAAsB;IACtB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IAEjB,iBAAiB;IACjB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IAEtB,mBAAmB;IACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IAEnB,mBAAmB;IACnB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;CAClB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,8BAA8B;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IAEjB,iBAAiB;IACjB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IAEnB,iBAAiB;IACjB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { VectorGeoFeature } from '../types/VectorGeoFeature.js';
|
|
2
|
+
export interface VectorGeoPlaceLabelsFeature extends VectorGeoFeature {
|
|
3
|
+
properties: {
|
|
4
|
+
/** @example "Kaitaia" */
|
|
5
|
+
name: string;
|
|
6
|
+
/** @example "ant" */
|
|
7
|
+
kind: string;
|
|
8
|
+
/** @example "city" */
|
|
9
|
+
place: string;
|
|
10
|
+
/** @example 7 */
|
|
11
|
+
adminlevel: number;
|
|
12
|
+
/** @example "0" */
|
|
13
|
+
natural: string;
|
|
14
|
+
/** @example "0" */
|
|
15
|
+
water: string;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/modify/schema.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { LogType } from '@basemaps/shared';
|
|
2
|
+
import { VectorCreationOptions } from '../stac.js';
|
|
3
|
+
import { VectorGeoFeature } from '../types/VectorGeoFeature.js';
|
|
4
|
+
export declare function handleRoadFeature(feature: VectorGeoFeature, options: VectorCreationOptions, logger: LogType): VectorGeoFeature;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { MajorHighWays } from './consts.js';
|
|
2
|
+
export function handleRoadFeature(feature, options, logger) {
|
|
3
|
+
logger.trace({}, 'HandleRoadFeature:Start');
|
|
4
|
+
feature = structuredClone(feature);
|
|
5
|
+
const highwayNum = feature.properties['hway_num'];
|
|
6
|
+
if (typeof highwayNum === 'string') {
|
|
7
|
+
// append/override tags
|
|
8
|
+
const kind = 'motorway';
|
|
9
|
+
feature.properties['kind'] = kind;
|
|
10
|
+
const ref = highwayNum;
|
|
11
|
+
feature.properties['ref'] = ref;
|
|
12
|
+
logger.trace({ kind, ref }, 'new/overidden tags');
|
|
13
|
+
// override styles
|
|
14
|
+
const minzoom = MajorHighWays.has(highwayNum) ? 2 : 8;
|
|
15
|
+
feature.tippecanoe.minzoom = minzoom;
|
|
16
|
+
logger.trace({ minzoom }, 'overidden styles');
|
|
17
|
+
// return feature
|
|
18
|
+
logger.trace({}, 'HandleRoadFeature:End');
|
|
19
|
+
return feature;
|
|
20
|
+
}
|
|
21
|
+
const laneCount = feature.properties['lane_count'];
|
|
22
|
+
if (typeof laneCount === 'number') {
|
|
23
|
+
// append/override tags
|
|
24
|
+
const kind = laneCount >= 4 ? 'primary' : 'secondary';
|
|
25
|
+
feature.properties['kind'] = kind;
|
|
26
|
+
logger.trace({ kind }, 'new/overidden tags');
|
|
27
|
+
}
|
|
28
|
+
// override styles
|
|
29
|
+
if (options.layer.style.minZoom < 10) {
|
|
30
|
+
const minzoom = 10;
|
|
31
|
+
feature.tippecanoe.minzoom = minzoom;
|
|
32
|
+
logger.trace({ minzoom }, 'overidden styles');
|
|
33
|
+
}
|
|
34
|
+
// return feature
|
|
35
|
+
logger.trace({}, 'HandleRoadFeature:End');
|
|
36
|
+
return feature;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/modify/shared.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,UAAU,iBAAiB,CAC/B,OAAyB,EACzB,OAA8B,EAC9B,MAAe;IAEf,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,yBAAyB,CAAC,CAAC;IAC5C,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAEnC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAClD,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,uBAAuB;QACvB,MAAM,IAAI,GAAG,UAAU,CAAC;QACxB,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QAClC,MAAM,GAAG,GAAG,UAAU,CAAC;QACvB,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,oBAAoB,CAAC,CAAC;QAElD,kBAAkB;QAClB,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,kBAAkB,CAAC,CAAC;QAE9C,iBAAiB;QACjB,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,uBAAuB,CAAC,CAAC;QAC1C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IACnD,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,uBAAuB;QACvB,MAAM,IAAI,GAAG,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;QACtD,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,oBAAoB,CAAC,CAAC;IAC/C,CAAC;IAED,kBAAkB;IAClB,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,OAAO,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,kBAAkB,CAAC,CAAC;IAChD,CAAC;IAED,iBAAiB;IACjB,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,uBAAuB,CAAC,CAAC;IAC1C,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -57,6 +57,7 @@ export declare const zSimplify: z.ZodObject<{
|
|
|
57
57
|
export declare const zLayer: z.ZodObject<{
|
|
58
58
|
id: z.ZodString;
|
|
59
59
|
name: z.ZodString;
|
|
60
|
+
version: z.ZodOptional<z.ZodNumber>;
|
|
60
61
|
source: z.ZodString;
|
|
61
62
|
tags: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodBoolean]>>;
|
|
62
63
|
attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
@@ -114,6 +115,7 @@ export declare const zLayer: z.ZodObject<{
|
|
|
114
115
|
id: string;
|
|
115
116
|
name: string;
|
|
116
117
|
source: string;
|
|
118
|
+
version?: number | undefined;
|
|
117
119
|
attributes?: Record<string, string> | undefined;
|
|
118
120
|
simplify?: {
|
|
119
121
|
style: {
|
|
@@ -134,6 +136,7 @@ export declare const zLayer: z.ZodObject<{
|
|
|
134
136
|
id: string;
|
|
135
137
|
name: string;
|
|
136
138
|
source: string;
|
|
139
|
+
version?: number | undefined;
|
|
137
140
|
attributes?: Record<string, string> | undefined;
|
|
138
141
|
simplify?: {
|
|
139
142
|
style: {
|
|
@@ -187,6 +190,7 @@ export declare const zSchema: z.ZodObject<{
|
|
|
187
190
|
layers: z.ZodArray<z.ZodObject<{
|
|
188
191
|
id: z.ZodString;
|
|
189
192
|
name: z.ZodString;
|
|
193
|
+
version: z.ZodOptional<z.ZodNumber>;
|
|
190
194
|
source: z.ZodString;
|
|
191
195
|
tags: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodBoolean]>>;
|
|
192
196
|
attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
@@ -244,6 +248,7 @@ export declare const zSchema: z.ZodObject<{
|
|
|
244
248
|
id: string;
|
|
245
249
|
name: string;
|
|
246
250
|
source: string;
|
|
251
|
+
version?: number | undefined;
|
|
247
252
|
attributes?: Record<string, string> | undefined;
|
|
248
253
|
simplify?: {
|
|
249
254
|
style: {
|
|
@@ -264,6 +269,7 @@ export declare const zSchema: z.ZodObject<{
|
|
|
264
269
|
id: string;
|
|
265
270
|
name: string;
|
|
266
271
|
source: string;
|
|
272
|
+
version?: number | undefined;
|
|
267
273
|
attributes?: Record<string, string> | undefined;
|
|
268
274
|
simplify?: {
|
|
269
275
|
style: {
|
|
@@ -290,6 +296,7 @@ export declare const zSchema: z.ZodObject<{
|
|
|
290
296
|
id: string;
|
|
291
297
|
name: string;
|
|
292
298
|
source: string;
|
|
299
|
+
version?: number | undefined;
|
|
293
300
|
attributes?: Record<string, string> | undefined;
|
|
294
301
|
simplify?: {
|
|
295
302
|
style: {
|
|
@@ -324,6 +331,7 @@ export declare const zSchema: z.ZodObject<{
|
|
|
324
331
|
id: string;
|
|
325
332
|
name: string;
|
|
326
333
|
source: string;
|
|
334
|
+
version?: number | undefined;
|
|
327
335
|
attributes?: Record<string, string> | undefined;
|
|
328
336
|
simplify?: {
|
|
329
337
|
style: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/schema-loader/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAE1D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAEhD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,IAAI,EAAE,KAAK;CACZ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,KAAK,EAAE,QAAQ;IACf,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,IAAI,EAAE,KAAK;IACX,UAAU,EAAE,WAAW,CAAC,QAAQ,EAAE;IAClC,KAAK,EAAE,QAAQ;IACf,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE;IACvC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC3C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAChC,CAAC;IACF,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE;IACvC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;CACxB,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/schema-loader/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAE1D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAEhD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,IAAI,EAAE,KAAK;CACZ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,KAAK,EAAE,QAAQ;IACf,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,IAAI,EAAE,KAAK;IACX,UAAU,EAAE,WAAW,CAAC,QAAQ,EAAE;IAClC,KAAK,EAAE,QAAQ;IACf,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE;IACvC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC3C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAChC,CAAC;IACF,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE;IACvC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;CACxB,CAAC,CAAC"}
|
|
@@ -51,6 +51,21 @@ export type Simplify = {
|
|
|
51
51
|
style: Styling;
|
|
52
52
|
tolerance?: number;
|
|
53
53
|
};
|
|
54
|
+
/**
|
|
55
|
+
* Cache mbtile file
|
|
56
|
+
*/
|
|
57
|
+
export interface CacheFile {
|
|
58
|
+
fileName: string;
|
|
59
|
+
path: URL;
|
|
60
|
+
exists: boolean;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Record the input and output features of the
|
|
64
|
+
*/
|
|
65
|
+
export interface Metrics {
|
|
66
|
+
input: number;
|
|
67
|
+
output: number;
|
|
68
|
+
}
|
|
54
69
|
/**
|
|
55
70
|
* Layer interface for source data layer config metadata
|
|
56
71
|
*/
|
|
@@ -74,12 +89,11 @@ export interface Layer {
|
|
|
74
89
|
/** Tippecanoe transform options */
|
|
75
90
|
tippecanoe?: string[];
|
|
76
91
|
/** Metrics data during the process, will capture into the stac once processed */
|
|
77
|
-
metrics?:
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
};
|
|
92
|
+
metrics?: Metrics;
|
|
93
|
+
/** cached mbtile filename */
|
|
94
|
+
fileName?: URL;
|
|
81
95
|
/** cached mbtile location */
|
|
82
|
-
cache?:
|
|
96
|
+
cache?: CacheFile;
|
|
83
97
|
/** true for layer over 2GB, which will require separated node to process */
|
|
84
98
|
largeLayer?: boolean;
|
|
85
99
|
}
|
|
@@ -2,7 +2,7 @@ import { sha256base58 } from '@basemaps/config';
|
|
|
2
2
|
import { fsa } from '@basemaps/shared';
|
|
3
3
|
import { CliInfo } from '@basemaps/shared/build/cli/info.js';
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { lds, LDS_CACHE_BUCKET } from '../extract
|
|
5
|
+
import { lds, LDS_CACHE_BUCKET } from '../extract.js';
|
|
6
6
|
import { zSchema } from './parser.js';
|
|
7
7
|
const LARGE_LAYER_SIZE = 1024 * 1024 * 1024; // processing for large layers that over 1GB
|
|
8
8
|
export class SchemaLoader {
|
|
@@ -70,8 +70,6 @@ export class SchemaLoader {
|
|
|
70
70
|
const files = await lds.getLdsCacheFiles();
|
|
71
71
|
for (const schema of this.schemas) {
|
|
72
72
|
this.logger.info({ layer: schema.name }, 'SchemaLoader: PrepareLayer');
|
|
73
|
-
if (schema.layers == null)
|
|
74
|
-
continue;
|
|
75
73
|
for (const layer of schema.layers) {
|
|
76
74
|
// Set layer simplify
|
|
77
75
|
if (schema.simplify != null && layer.simplify == null)
|
|
@@ -93,12 +91,19 @@ export class SchemaLoader {
|
|
|
93
91
|
if (fileInfo.size != null && fileInfo.size > LARGE_LAYER_SIZE)
|
|
94
92
|
layer.largeLayer = true;
|
|
95
93
|
// Set the cache path for the layer
|
|
96
|
-
const configHash = sha256base58(JSON.stringify({
|
|
94
|
+
const configHash = sha256base58(JSON.stringify({ name: schema.name, layer, version: CliInfo.version }));
|
|
97
95
|
if (this.cache != null) {
|
|
98
96
|
const fileName = isLdsFile
|
|
99
97
|
? `${layer.id}_${layer.version}_${configHash}.mbtiles`
|
|
100
98
|
: `${layer.id}_${configHash}.mbtiles`;
|
|
101
|
-
|
|
99
|
+
const path = new URL(`${layer.id}/${fileName}`, this.cache);
|
|
100
|
+
const exists = await fsa.exists(path);
|
|
101
|
+
const cache = {
|
|
102
|
+
fileName,
|
|
103
|
+
path,
|
|
104
|
+
exists,
|
|
105
|
+
};
|
|
106
|
+
layer.cache = cache;
|
|
102
107
|
}
|
|
103
108
|
}
|
|
104
109
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.loader.js","sourceRoot":"","sources":["../../src/schema-loader/schema.loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,GAAG,EAAW,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAC7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"schema.loader.js","sourceRoot":"","sources":["../../src/schema-loader/schema.loader.ts"],"names":[],"mappings":"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"}
|