@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.
Files changed (94) hide show
  1. package/build/bin.js +2 -2
  2. package/build/cli/cli.analyse.d.ts +34 -0
  3. package/build/cli/cli.analyse.js +152 -0
  4. package/build/cli/cli.analyse.js.map +1 -0
  5. package/build/cli/cli.create.d.ts +39 -0
  6. package/build/cli/cli.create.js +207 -0
  7. package/build/cli/cli.create.js.map +1 -0
  8. package/build/cli/cli.extract.d.ts +8 -17
  9. package/build/cli/cli.extract.js +43 -33
  10. package/build/cli/cli.extract.js.map +1 -1
  11. package/build/cli/cli.join.d.ts +44 -0
  12. package/build/cli/cli.join.js +149 -0
  13. package/build/cli/cli.join.js.map +1 -0
  14. package/build/extract.js.map +1 -0
  15. package/build/generalization/generalization.d.ts +9 -0
  16. package/build/generalization/generalization.js +159 -0
  17. package/build/generalization/generalization.js.map +1 -0
  18. package/build/generalization/simplify.d.ts +2 -0
  19. package/build/generalization/simplify.js +80 -0
  20. package/build/generalization/simplify.js.map +1 -0
  21. package/build/index.d.ts +83 -5
  22. package/build/index.js +7 -1
  23. package/build/index.js.map +1 -1
  24. package/build/modify/consts.d.ts +1 -0
  25. package/build/modify/consts.js +23 -0
  26. package/build/modify/consts.js.map +1 -0
  27. package/build/modify/layers/__test__/contours.test.d.ts +1 -0
  28. package/build/modify/layers/__test__/contours.test.js +59 -0
  29. package/build/modify/layers/__test__/contours.test.js.map +1 -0
  30. package/build/modify/layers/contours.d.ts +28 -0
  31. package/build/modify/layers/contours.js +90 -0
  32. package/build/modify/layers/contours.js.map +1 -0
  33. package/build/modify/layers/place_labels.d.ts +18 -0
  34. package/build/modify/layers/place_labels.js +122 -0
  35. package/build/modify/layers/place_labels.js.map +1 -0
  36. package/build/modify/layers/pois.d.ts +11 -0
  37. package/build/modify/layers/pois.js +27 -0
  38. package/build/modify/layers/pois.js.map +1 -0
  39. package/build/modify/layers/public_transport.d.ts +12 -0
  40. package/build/modify/layers/public_transport.js +53 -0
  41. package/build/modify/layers/public_transport.js.map +1 -0
  42. package/build/modify/layers/street_labels.d.ts +12 -0
  43. package/build/modify/layers/street_labels.js +34 -0
  44. package/build/modify/layers/street_labels.js.map +1 -0
  45. package/build/modify/layers/streets.d.ts +12 -0
  46. package/build/modify/layers/streets.js +72 -0
  47. package/build/modify/layers/streets.js.map +1 -0
  48. package/build/modify/layers/water_polygons.d.ts +13 -0
  49. package/build/modify/layers/water_polygons.js +85 -0
  50. package/build/modify/layers/water_polygons.js.map +1 -0
  51. package/build/modify/modify.d.ts +11 -0
  52. package/build/modify/modify.js +48 -0
  53. package/build/modify/modify.js.map +1 -0
  54. package/build/modify/parser.d.ts +47 -0
  55. package/build/modify/parser.js +24 -0
  56. package/build/modify/parser.js.map +1 -0
  57. package/build/modify/schema.d.ts +17 -0
  58. package/build/modify/schema.js +2 -0
  59. package/build/modify/schema.js.map +1 -0
  60. package/build/modify/shared.d.ts +4 -0
  61. package/build/modify/shared.js +38 -0
  62. package/build/modify/shared.js.map +1 -0
  63. package/build/schema-loader/parser.d.ts +8 -0
  64. package/build/schema-loader/parser.js +1 -0
  65. package/build/schema-loader/parser.js.map +1 -1
  66. package/build/schema-loader/schema.d.ts +19 -5
  67. package/build/schema-loader/schema.loader.js +10 -5
  68. package/build/schema-loader/schema.loader.js.map +1 -1
  69. package/build/stac.d.ts +41 -0
  70. package/build/stac.js +185 -0
  71. package/build/stac.js.map +1 -0
  72. package/build/transform/covt.d.ts +5 -0
  73. package/build/transform/covt.js +23 -0
  74. package/build/transform/covt.js.map +1 -0
  75. package/build/transform/mbtiles.to.ttiles.d.ts +14 -0
  76. package/build/transform/mbtiles.to.ttiles.js +60 -0
  77. package/build/transform/mbtiles.to.ttiles.js.map +1 -0
  78. package/build/transform/ogr2ogr.d.ts +7 -0
  79. package/build/transform/ogr2ogr.js +20 -0
  80. package/build/transform/ogr2ogr.js.map +1 -0
  81. package/build/transform/tippecanoe.d.ts +14 -0
  82. package/build/transform/tippecanoe.js +68 -0
  83. package/build/transform/tippecanoe.js.map +1 -0
  84. package/build/types/VectorGeoFeature.d.ts +9 -0
  85. package/build/types/VectorGeoFeature.js +2 -0
  86. package/build/types/VectorGeoFeature.js.map +1 -0
  87. package/build/util.d.ts +35 -0
  88. package/build/util.js +43 -0
  89. package/build/util.js.map +1 -0
  90. package/dist/index.cjs +20753 -9551
  91. package/package.json +23 -8
  92. package/build/extract/extract.js.map +0 -1
  93. /package/build/{extract/extract.d.ts → extract.d.ts} +0 -0
  94. /package/build/{extract/extract.js → extract.js} +0 -0
@@ -0,0 +1,41 @@
1
+ import { BoundingBox, TileMatrixSet } from '@basemaps/geo';
2
+ import { LogType } from '@basemaps/shared';
3
+ import { StacCatalog, StacCollection, StacItem, StacLink } from 'stac-ts';
4
+ import { Layer, SchemaMetadata } from './schema-loader/schema.js';
5
+ export interface VectorCreationOptions {
6
+ /** Schema name for the layer*/
7
+ name: string;
8
+ /**Schema metadata for creation vector tiles */
9
+ metadata: SchemaMetadata;
10
+ /** Tile matrix to create the tiles against */
11
+ tileMatrix: string;
12
+ /** Individual layer options */
13
+ layer: Layer;
14
+ }
15
+ export interface GeneratedProperties {
16
+ /** Package name that generated the file */
17
+ package: string;
18
+ /** Version number that generated the file */
19
+ version: string;
20
+ /** Git commit hash that the file was generated with */
21
+ hash: string;
22
+ /** ISO date of the time this file was generated */
23
+ datetime: string;
24
+ }
25
+ export type VectorStacItem = StacItem & {
26
+ properties: {
27
+ 'linz_basemaps:generated': GeneratedProperties;
28
+ 'linz_basemaps:options'?: VectorCreationOptions;
29
+ };
30
+ };
31
+ export declare class VectorStac {
32
+ logger: LogType;
33
+ /** List of bounding boxes for the layer, to union as collection bbox */
34
+ bboxArr: BoundingBox[];
35
+ constructor(logger: LogType);
36
+ createStacLink(targetLayer: string, layer: Layer): Promise<StacLink>;
37
+ createStacItem(layers: StacLink[], filename: string, tileMatrix: TileMatrixSet, options?: VectorCreationOptions): VectorStacItem;
38
+ createStacCollection(bbBox: number[], layers: StacLink[], filename: string, title: string): StacCollection;
39
+ createStacCatalog(): StacCatalog;
40
+ }
41
+ export declare function createStacFiles(filePaths: URL[], targetPath: URL, filename: string, tileMatrix: TileMatrixSet, title: string, logger: LogType): Promise<URL[]>;
package/build/stac.js ADDED
@@ -0,0 +1,185 @@
1
+ import { Bounds } from '@basemaps/geo';
2
+ import { fsa } from '@basemaps/shared';
3
+ import { CliDate, CliId, CliInfo } from '@basemaps/shared/build/cli/info.js';
4
+ import { LDS_CACHE_BUCKET } from './extract.js';
5
+ import { zLayer } from './schema-loader/parser.js';
6
+ const providers = [
7
+ { name: 'Land Information New Zealand', url: 'https://www.linz.govt.nz/', roles: ['processor', 'host'] },
8
+ ];
9
+ export class VectorStac {
10
+ constructor(logger) {
11
+ Object.defineProperty(this, "logger", {
12
+ enumerable: true,
13
+ configurable: true,
14
+ writable: true,
15
+ value: void 0
16
+ });
17
+ /** List of bounding boxes for the layer, to union as collection bbox */
18
+ Object.defineProperty(this, "bboxArr", {
19
+ enumerable: true,
20
+ configurable: true,
21
+ writable: true,
22
+ value: []
23
+ });
24
+ this.logger = logger;
25
+ }
26
+ async createStacLink(targetLayer, layer) {
27
+ if (layer.source.startsWith(LDS_CACHE_BUCKET)) {
28
+ // Create stac link for lds layer
29
+ this.logger.info({ layer: layer.id }, 'VectorStac: CreateLdsStacLink');
30
+ const collectionPath = new URL('collection.json', layer.source);
31
+ const sourceCollection = await fsa.readJson(collectionPath);
32
+ const spatialExtents = sourceCollection.extent.spatial.bbox;
33
+ this.bboxArr.push(...spatialExtents.map((b) => Bounds.fromBbox(b)));
34
+ const stacLink = {
35
+ rel: 'lds:layer',
36
+ 'lds:id': layer.id,
37
+ 'lds:name': layer.name,
38
+ 'lds:title': sourceCollection.title,
39
+ 'lds:version': layer.version,
40
+ 'basemaps:layers': [targetLayer],
41
+ href: `https://data.linz.govt.nz/services/api/v1/layers/${layer.id}/versions/${layer.version}/`,
42
+ };
43
+ if (layer.metrics != null) {
44
+ stacLink['lds:feature_count'] = layer.metrics.input;
45
+ }
46
+ return stacLink;
47
+ }
48
+ else {
49
+ this.logger.info({ layer: layer.id }, 'VectorStac: CreateExternalStacLink');
50
+ // Create stac link for external layer
51
+ const stacLink = {
52
+ rel: 'layer',
53
+ id: layer.id,
54
+ name: layer.name,
55
+ 'basemaps:layers': targetLayer,
56
+ href: `https://data.linz.govt.nz/services/api/v1/layers/${layer.id}/versions/${layer.version}/`,
57
+ };
58
+ return stacLink;
59
+ }
60
+ }
61
+ createStacItem(layers, filename, tileMatrix, options) {
62
+ this.logger.info({ filename }, 'VectorStac: CreateStacItem');
63
+ const item = {
64
+ id: `${CliId}/${filename}`,
65
+ type: 'Feature',
66
+ collection: CliId,
67
+ stac_version: '1.0.0',
68
+ stac_extensions: [],
69
+ geometry: null,
70
+ bbox: [-180, -90, 180, 90],
71
+ links: [
72
+ { href: `./${filename}.json`, rel: 'self' },
73
+ { href: './collection.json', rel: 'collection' },
74
+ { href: './collection.json', rel: 'parent' },
75
+ ...layers,
76
+ ],
77
+ properties: {
78
+ 'proj:epsg': tileMatrix.projection.code,
79
+ 'linz_basemaps:generated': {
80
+ package: CliInfo.package,
81
+ hash: CliInfo.hash,
82
+ version: CliInfo.version,
83
+ datetime: CliDate,
84
+ },
85
+ },
86
+ assets: {},
87
+ };
88
+ // Set options for individual mbtiles stac file
89
+ if (options != null)
90
+ item.properties['linz_basemaps:options'] = options;
91
+ return item;
92
+ }
93
+ createStacCollection(bbBox, layers, filename, title) {
94
+ return {
95
+ stac_version: '1.0.0',
96
+ stac_extensions: [],
97
+ type: 'Collection',
98
+ license: 'CC-BY-4.0',
99
+ id: 'sc_' + CliId,
100
+ title,
101
+ description: 'Linz Vector Basemaps.',
102
+ extent: {
103
+ spatial: {
104
+ bbox: [bbBox],
105
+ },
106
+ temporal: { interval: [[CliDate, null]] },
107
+ },
108
+ links: [
109
+ { rel: 'self', href: './collection.json', type: 'application/json' },
110
+ { rel: 'item', href: `./${filename}.json` },
111
+ ...layers,
112
+ ],
113
+ providers,
114
+ summaries: {},
115
+ };
116
+ }
117
+ createStacCatalog() {
118
+ return {
119
+ stac_version: '1.0.0',
120
+ stac_extensions: [],
121
+ type: 'Catalog',
122
+ title: 'ETL',
123
+ description: 'ETL process to generate LINZ Vector Basemaps',
124
+ id: 'sl_' + CliId,
125
+ links: [{ rel: 'self', href: './catalog.json', type: 'application/json' }],
126
+ };
127
+ }
128
+ }
129
+ export async function createStacFiles(filePaths, targetPath, filename, tileMatrix, title, logger) {
130
+ const vectorStac = new VectorStac(logger);
131
+ // Prepare stac item links
132
+ const bboxArr = [];
133
+ const layersMap = new Map();
134
+ for (const file of filePaths) {
135
+ const stacPath = fsa.toUrl(`${file.href.split('.mbtiles')[0]}.json`);
136
+ const stac = await fsa.readJson(stacPath);
137
+ if (stac.bbox)
138
+ bboxArr.push(Bounds.fromBbox(stac.bbox));
139
+ const layer = zLayer.parse(stac.properties['linz_basemaps:options'].layer);
140
+ const name = stac.properties['linz_basemaps:options'].name;
141
+ const layerLink = stac.links.find((l) => l.rel === 'lds:layer' && l['lds:id'] === layer.id);
142
+ if (layerLink == null)
143
+ throw new Error(`Layer link not found for ${layer.id} in ${stacPath.href}`);
144
+ const existing = layersMap.get(layer.id);
145
+ if (existing != null) {
146
+ existing['basemaps:layers'].push(name);
147
+ }
148
+ else {
149
+ layersMap.set(layer.id, layerLink);
150
+ }
151
+ }
152
+ const layers = Array.from(layersMap.values());
153
+ // Create stac item
154
+ const stacItem = vectorStac.createStacItem(layers, filename, tileMatrix);
155
+ // Union bbox
156
+ const unionBound = Bounds.union(bboxArr);
157
+ const unionBbox = unionBound.toBbox();
158
+ stacItem.bbox = unionBbox;
159
+ stacItem.geometry = {
160
+ type: 'Polygon',
161
+ coordinates: unionBound.toPolygon(),
162
+ };
163
+ // Create stac collection
164
+ const stacCollection = vectorStac.createStacCollection(unionBbox, layers, filename, title);
165
+ // Create stac catalog
166
+ let stacCatalog = vectorStac.createStacCatalog();
167
+ const catalogPath = new URL('catalog.json', targetPath);
168
+ if (await fsa.exists(catalogPath))
169
+ stacCatalog = await fsa.readJson(catalogPath);
170
+ // Add link for new collection
171
+ stacCatalog.links.push({
172
+ rel: 'child',
173
+ href: `./${CliId}/collection.json`,
174
+ created: CliDate,
175
+ type: 'application/json',
176
+ });
177
+ const item = fsa.toUrl(`tmp/join/${filename}.json`);
178
+ await fsa.write(item, JSON.stringify(stacItem, null, 2));
179
+ const collection = fsa.toUrl('tmp/join/collection.json');
180
+ await fsa.write(collection, JSON.stringify(stacCollection, null, 2));
181
+ const catalog = fsa.toUrl('tmp/join/catalog.json');
182
+ await fsa.write(catalog, JSON.stringify(stacCatalog, null, 2));
183
+ return [item, collection, catalog];
184
+ }
185
+ //# sourceMappingURL=stac.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stac.js","sourceRoot":"","sources":["../src/stac.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { LogType } from '@basemaps/shared';
2
+ /**
3
+ * Create index for the COVT tar file
4
+ */
5
+ export declare function toTarIndex(input: string, output: string, logger: LogType): Promise<string>;
@@ -0,0 +1,23 @@
1
+ import { fsa, SourceMemory } from '@basemaps/shared';
2
+ import { CotarIndexBuilder, TarReader } from '@cotar/builder';
3
+ import { CotarIndex } from '@cotar/core';
4
+ import { promises as fs } from 'fs';
5
+ /**
6
+ * Create index for the COVT tar file
7
+ */
8
+ export async function toTarIndex(input, output, logger) {
9
+ logger.info({ output: output }, 'Cotar.Index:Start');
10
+ const fd = await fs.open(input, 'r');
11
+ const opts = { packingFactor: 1.25, maxSearch: 50 }; // Default package rule.
12
+ const { buffer, count } = await CotarIndexBuilder.create(fd, opts);
13
+ const index = await CotarIndex.create(new SourceMemory('index', buffer));
14
+ await TarReader.validate(fd, index);
15
+ await fs.writeFile(output, buffer);
16
+ await fs.appendFile(input, buffer);
17
+ await fd.close();
18
+ if (!(await fsa.exists(fsa.toUrl(output))))
19
+ throw new Error('Error - Cotar.Index creation Failure.');
20
+ logger.info({ index, count }, 'Cotar.Index:Done');
21
+ return output;
22
+ }
23
+ //# sourceMappingURL=covt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"covt.js","sourceRoot":"","sources":["../../src/transform/covt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAW,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAqB,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AAEpC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAa,EAAE,MAAc,EAAE,MAAe;IAC7E,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC;IAErD,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAErC,MAAM,IAAI,GAAsB,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,wBAAwB;IAChG,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAEnE,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IACzE,MAAM,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACpC,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,MAAM,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAEnC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;IACjB,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAErG,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,kBAAkB,CAAC,CAAC;IAClD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { LogType } from '@basemaps/shared';
2
+ export interface TileTable {
3
+ zoom_level: number;
4
+ tile_column: number;
5
+ tile_row: number;
6
+ tile_data: Buffer;
7
+ }
8
+ export declare function xyzToPath(x: number | string, y: number | string, z: number | string, compressed?: boolean): string;
9
+ export declare function readMbTiles(fileName: string, limit: number | undefined, logger: LogType): Generator<{
10
+ tile: TileTable;
11
+ index: number;
12
+ total: number;
13
+ }, null>;
14
+ export declare function toTarTiles(input: string, output: string, logger: LogType, limit?: number): Promise<void>;
@@ -0,0 +1,60 @@
1
+ import sq from 'node:sqlite';
2
+ import { createWriteStream } from 'fs';
3
+ import * as tar from 'tar-stream';
4
+ export function xyzToPath(x, y, z, compressed = true) {
5
+ return `tiles/${z}/${x}/${y}.pbf` + (compressed ? '.gz' : '');
6
+ }
7
+ export function* readMbTiles(fileName, limit = -1, logger) {
8
+ logger.debug({ file: fileName }, 'ReadMbTiles:Start');
9
+ const db = new sq.DatabaseSync(fileName);
10
+ let limitQuery = '';
11
+ if (limit > 0)
12
+ limitQuery = `LIMIT ${limit}`;
13
+ const getAll = db.prepare('SELECT count(*) as count FROM tiles;');
14
+ const totalRow = getAll.get();
15
+ const total = totalRow ? totalRow['count'] : 0;
16
+ const getTiles = db.prepare(`SELECT * FROM tiles ORDER BY zoom_level ${limitQuery}`);
17
+ const tiles = getTiles.all();
18
+ let index = 0;
19
+ for (const data of tiles) {
20
+ const tile = {
21
+ zoom_level: data['zoom_level'],
22
+ tile_column: data['tile_column'],
23
+ tile_row: data['tile_row'],
24
+ tile_data: Buffer.from(data['tile_data']),
25
+ };
26
+ yield { tile, index: index++, total };
27
+ }
28
+ logger.debug({ file: fileName }, 'ReadMbTiles:End');
29
+ return null;
30
+ }
31
+ export async function toTarTiles(input, output, logger, limit = -1) {
32
+ const packer = tar.pack();
33
+ const startTime = Date.now();
34
+ let writeCount = 0;
35
+ const writeProm = new Promise((resolve) => packer.on('end', resolve));
36
+ packer.pipe(createWriteStream(output));
37
+ let startTileTime = Date.now();
38
+ for await (const { tile, index, total } of readMbTiles(input, limit, logger)) {
39
+ if (index === 0)
40
+ logger.info({ path: output, count: total }, 'Covt.Tar:Start');
41
+ const z = tile.zoom_level;
42
+ const x = tile.tile_column;
43
+ const y = tile.tile_row;
44
+ const tileName = xyzToPath(x, y, z);
45
+ const tileData = tile.tile_data;
46
+ packer.entry({ name: tileName }, tileData);
47
+ if (writeCount % 25_000 === 0) {
48
+ const percent = ((writeCount / index) * 100).toFixed(2);
49
+ const duration = Date.now() - startTileTime;
50
+ startTileTime = Date.now();
51
+ logger.debug({ current: writeCount, total: total, percent, duration }, 'Covt.Tar:WriteTile');
52
+ }
53
+ writeCount++;
54
+ }
55
+ logger.debug('Covt.Tar:Finalize');
56
+ packer.finalize();
57
+ await writeProm;
58
+ logger.info({ path: output, count: writeCount, duration: Date.now() - startTime }, 'Covt.Tar:Done');
59
+ }
60
+ //# sourceMappingURL=mbtiles.to.ttiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mbtiles.to.ttiles.js","sourceRoot":"","sources":["../../src/transform/mbtiles.to.ttiles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { LogType } from '@basemaps/shared';
2
+ /**
3
+ * ogr2ogr GeoJSONSeq usage, return cmd for ogr2ogr
4
+ *
5
+ * @returns {cmd: string, args: string[]} cmd and arguments for ogr2ogr
6
+ */
7
+ export declare function ogr2ogrNDJson(input: URL, output: URL, logger: LogType): Promise<void>;
@@ -0,0 +1,20 @@
1
+ import { Epsg } from '@basemaps/geo';
2
+ import { Command } from '@linzjs/docker-command';
3
+ /**
4
+ * ogr2ogr GeoJSONSeq usage, return cmd for ogr2ogr
5
+ *
6
+ * @returns {cmd: string, args: string[]} cmd and arguments for ogr2ogr
7
+ */
8
+ export async function ogr2ogrNDJson(input, output, logger) {
9
+ const cmd = Command.create('ogr2ogr');
10
+ cmd.args.push('-f', 'GeoJSONSeq');
11
+ cmd.args.push(output.pathname);
12
+ cmd.args.push('-t_srs', Epsg.Wgs84.toEpsgString());
13
+ cmd.args.push(input.pathname);
14
+ const res = await cmd.run();
15
+ if (res.exitCode !== 0) {
16
+ logger.fatal({ Gdal: res }, 'Failure');
17
+ throw new Error('Gdal failed to run');
18
+ }
19
+ }
20
+ //# sourceMappingURL=ogr2ogr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ogr2ogr.js","sourceRoot":"","sources":["../../src/transform/ogr2ogr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAU,EAAE,MAAW,EAAE,MAAe;IAC1E,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEtC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAClC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE/B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IACnD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAE9B,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC;IAC5B,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { LogType } from '@basemaps/shared';
2
+ import { Layer } from '../schema-loader/schema.js';
3
+ /**
4
+ * tippecanoe usage, return cmd for tippecanoe
5
+ *
6
+ * @returns { cmd: string; args: string[] } cmd and arguments for tippecanoe docker command
7
+ */
8
+ export declare function tippecanoe(input: URL, output: URL, layer: Layer, logger: LogType): Promise<void>;
9
+ /**
10
+ * tippecanoe tile-join usage, return cmd for tile-join
11
+ *
12
+ * @returns { cmd: string; args: string[] } cmd and arguments for tippecanoe tile-join docker command
13
+ */
14
+ export declare function tileJoin(inputs: URL[], output: string, logger: LogType): Promise<void>;
@@ -0,0 +1,68 @@
1
+ import { Epsg } from '@basemaps/geo';
2
+ import { urlToString } from '@basemaps/shared';
3
+ import { Command } from '@linzjs/docker-command';
4
+ import path, { dirname } from 'path';
5
+ /**
6
+ * tippecanoe usage, return cmd for tippecanoe
7
+ *
8
+ * @returns { cmd: string; args: string[] } cmd and arguments for tippecanoe docker command
9
+ */
10
+ export async function tippecanoe(input, output, layer, logger) {
11
+ const cmd = Command.create('tippecanoe');
12
+ // parallel processing for line-delimited geojson file.
13
+ cmd.args.push('--read-parallel');
14
+ // Config projection
15
+ cmd.args.push('-s', Epsg.Wgs84.toEpsgString());
16
+ // Config detail
17
+ if (layer.style != null) {
18
+ cmd.args.push(`-Z${layer.style.minZoom}`);
19
+ cmd.args.push(`-z${layer.style.maxZoom}`);
20
+ if (layer.style.detail != null)
21
+ cmd.args.push(`--full-detail=${layer.style.detail}`);
22
+ }
23
+ else {
24
+ // Default to 0-15
25
+ cmd.args.push(`-z15`);
26
+ }
27
+ cmd.mount(dirname(input.pathname));
28
+ cmd.mount(dirname(output.pathname));
29
+ cmd.args.push('-o', output.pathname);
30
+ // Add tippecanoe options
31
+ if (layer.tippecanoe != null) {
32
+ for (const arg of layer.tippecanoe) {
33
+ cmd.args.push(arg);
34
+ }
35
+ }
36
+ cmd.args.push(input.pathname);
37
+ cmd.args.push('--force');
38
+ const res = await cmd.run();
39
+ logger.debug('tippecanoe ' + cmd.args.join(' '));
40
+ if (res.exitCode !== 0) {
41
+ logger.fatal({ Tippecanoe: res }, 'Failure');
42
+ throw new Error('Tippecanoe Docker failed to run');
43
+ }
44
+ }
45
+ /**
46
+ * tippecanoe tile-join usage, return cmd for tile-join
47
+ *
48
+ * @returns { cmd: string; args: string[] } cmd and arguments for tippecanoe tile-join docker command
49
+ */
50
+ export async function tileJoin(inputs, output, logger) {
51
+ const cmd = Command.create('tile-join');
52
+ cmd.mount(path.resolve(dirname(output)));
53
+ cmd.args.push('-pk');
54
+ cmd.args.push('-o', output);
55
+ for (const input of inputs) {
56
+ if (input.href.endsWith('mbtiles')) {
57
+ cmd.mount(dirname(urlToString(input)));
58
+ cmd.args.push(urlToString(input));
59
+ }
60
+ }
61
+ cmd.args.push('--force');
62
+ const res = await cmd.run();
63
+ if (res.exitCode !== 0) {
64
+ logger.fatal({ Tippecanoe: res }, 'Failure');
65
+ throw new Error('Tippecanoe Docker failed to run');
66
+ }
67
+ }
68
+ //# sourceMappingURL=tippecanoe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tippecanoe.js","sourceRoot":"","sources":["../../src/transform/tippecanoe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { Feature } from 'geojson';
2
+ export interface VectorGeoFeature extends Feature {
3
+ properties: Record<string, boolean | null | number | string | undefined>;
4
+ tippecanoe: {
5
+ layer: string;
6
+ minzoom: number;
7
+ maxzoom: number;
8
+ };
9
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=VectorGeoFeature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VectorGeoFeature.js","sourceRoot":"","sources":["../../src/types/VectorGeoFeature.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import { ReadStream } from 'fs';
2
+ export declare const projection: string;
3
+ export declare const ContentType: {
4
+ readonly gpkg: "application/x-ogc-gpkg";
5
+ readonly shp: "application/x-ogc-shp";
6
+ readonly geojson: "application/geo+json";
7
+ };
8
+ export declare function createReadStreamSafe(filename: string): Promise<ReadStream>;
9
+ export interface TmpPaths {
10
+ /**
11
+ * @example "local-cache/layerId/{layerId}_{version}_{hash}.json"
12
+ * @example "s3://linz-lds-cache/layerId/{layerId}_{version}_{hash}.json"
13
+ */
14
+ origin: URL;
15
+ source: {
16
+ /** @example "tmp/create/layers/50248/50248.gpkg" */
17
+ path: URL;
18
+ /** @example "gpkg" */
19
+ format: keyof typeof ContentType;
20
+ /** @example "application/x-ogc-gpkg" */
21
+ contentType: (typeof ContentType)[keyof typeof ContentType];
22
+ };
23
+ /** @example "tmp/create/layers/50248/50248.ndjson" */
24
+ ndjson: URL;
25
+ /** @example "tmp/create/transform/aerialways/50248/50248-gen.ndjson" */
26
+ genNdjson: URL;
27
+ /** @example "tmp/create/transform/aerialways/50248/50248.mbtiles" */
28
+ mbtiles: URL;
29
+ /**
30
+ * @example "local-cache/layerId/{layerId}_{version}_{hash}.mbtiles"
31
+ * @example "s3://linz-lds-cache/layerId/{layerId}_{version}_{hash}.mbtiles"
32
+ */
33
+ mbtilesCopy: URL;
34
+ }
35
+ export declare function prepareTmpPaths(tmpPath: URL, path: URL, layerId: string, format: keyof typeof ContentType, shortbreadLayer: string): TmpPaths;
package/build/util.js ADDED
@@ -0,0 +1,43 @@
1
+ import { existsSync, mkdirSync } from 'node:fs';
2
+ import { Epsg } from '@basemaps/geo';
3
+ import { createReadStream } from 'fs';
4
+ export const projection = Epsg.Wgs84.toEpsgString();
5
+ export const ContentType = {
6
+ gpkg: 'application/x-ogc-gpkg',
7
+ shp: 'application/x-ogc-shp',
8
+ geojson: 'application/geo+json',
9
+ };
10
+ export function createReadStreamSafe(filename) {
11
+ return new Promise((resolve, reject) => {
12
+ const fileStream = createReadStream(filename);
13
+ fileStream.on('error', reject).on('open', () => {
14
+ resolve(fileStream);
15
+ });
16
+ });
17
+ }
18
+ export function prepareTmpPaths(tmpPath, path, layerId, format, shortbreadLayer) {
19
+ /** @example "tmp/create/layers/50248/" */
20
+ const LayersDir = new URL(`layers/${layerId}/`, tmpPath);
21
+ if (!existsSync(LayersDir)) {
22
+ mkdirSync(LayersDir, { recursive: true });
23
+ }
24
+ /** @example "tmp/create/transform/aerialways/50248/" */
25
+ const TransformDir = new URL(`transform/${shortbreadLayer}/${layerId}/`, tmpPath);
26
+ if (!existsSync(TransformDir)) {
27
+ mkdirSync(TransformDir, { recursive: true });
28
+ }
29
+ const tmpPaths = {
30
+ origin: path,
31
+ source: {
32
+ path: new URL(`${layerId}.${format}`, LayersDir),
33
+ format,
34
+ contentType: ContentType[format],
35
+ },
36
+ ndjson: new URL(`${layerId}.ndjson`, LayersDir),
37
+ genNdjson: new URL(`${layerId}-gen.ndjson`, TransformDir),
38
+ mbtiles: new URL(`${layerId}.mbtiles`, TransformDir),
39
+ mbtilesCopy: new URL(path.href.replace(/\.json$/, '.mbtiles')),
40
+ };
41
+ return tmpPaths;
42
+ }
43
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEhD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAc,MAAM,IAAI,CAAC;AAElD,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;AAEpD,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,wBAAwB;IAC9B,GAAG,EAAE,uBAAuB;IAC5B,OAAO,EAAE,sBAAsB;CACvB,CAAC;AAEX,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC9C,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YAC7C,OAAO,CAAC,UAAU,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAoCD,MAAM,UAAU,eAAe,CAC7B,OAAY,EACZ,IAAS,EACT,OAAe,EACf,MAAgC,EAChC,eAAuB;IAEvB,0CAA0C;IAC1C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,UAAU,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC;IACzD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,wDAAwD;IACxD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,aAAa,eAAe,IAAI,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC;IAClF,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,QAAQ,GAAG;QACf,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE;YACN,IAAI,EAAE,IAAI,GAAG,CAAC,GAAG,OAAO,IAAI,MAAM,EAAE,EAAE,SAAS,CAAC;YAChD,MAAM;YACN,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC;SACjC;QACD,MAAM,EAAE,IAAI,GAAG,CAAC,GAAG,OAAO,SAAS,EAAE,SAAS,CAAC;QAC/C,SAAS,EAAE,IAAI,GAAG,CAAC,GAAG,OAAO,aAAa,EAAE,YAAY,CAAC;QACzD,OAAO,EAAE,IAAI,GAAG,CAAC,GAAG,OAAO,UAAU,EAAE,YAAY,CAAC;QACpD,WAAW,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;KAC/D,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC"}