@basemaps/cli-vector 8.1.0 → 8.3.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 (98) 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 +211 -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 +10 -0
  16. package/build/generalization/generalization.js +168 -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 +117 -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 +32 -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 +41 -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.d.ts +13 -0
  49. package/build/modify/layers/water.js +82 -0
  50. package/build/modify/layers/water.js.map +1 -0
  51. package/build/modify/modify.d.ts +11 -0
  52. package/build/modify/modify.js +49 -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 +7 -0
  61. package/build/modify/shared.js +53 -0
  62. package/build/modify/shared.js.map +1 -0
  63. package/build/schema-loader/parser.d.ts +16 -0
  64. package/build/schema-loader/parser.js +2 -0
  65. package/build/schema-loader/parser.js.map +1 -1
  66. package/build/schema-loader/schema.d.ts +21 -5
  67. package/build/schema-loader/schema.loader.d.ts +3 -1
  68. package/build/schema-loader/schema.loader.js +18 -6
  69. package/build/schema-loader/schema.loader.js.map +1 -1
  70. package/build/stac.d.ts +41 -0
  71. package/build/stac.js +185 -0
  72. package/build/stac.js.map +1 -0
  73. package/build/transform/covt.d.ts +5 -0
  74. package/build/transform/covt.js +23 -0
  75. package/build/transform/covt.js.map +1 -0
  76. package/build/transform/mbtiles.to.ttiles.d.ts +14 -0
  77. package/build/transform/mbtiles.to.ttiles.js +60 -0
  78. package/build/transform/mbtiles.to.ttiles.js.map +1 -0
  79. package/build/transform/nztm.d.ts +4 -0
  80. package/build/transform/nztm.js +13 -0
  81. package/build/transform/nztm.js.map +1 -0
  82. package/build/transform/ogr2ogr.d.ts +9 -0
  83. package/build/transform/ogr2ogr.js +43 -0
  84. package/build/transform/ogr2ogr.js.map +1 -0
  85. package/build/transform/tippecanoe.d.ts +15 -0
  86. package/build/transform/tippecanoe.js +69 -0
  87. package/build/transform/tippecanoe.js.map +1 -0
  88. package/build/types/VectorGeoFeature.d.ts +9 -0
  89. package/build/types/VectorGeoFeature.js +2 -0
  90. package/build/types/VectorGeoFeature.js.map +1 -0
  91. package/build/util.d.ts +35 -0
  92. package/build/util.js +43 -0
  93. package/build/util.js.map +1 -0
  94. package/dist/index.cjs +20809 -9550
  95. package/package.json +23 -8
  96. package/build/extract/extract.js.map +0 -1
  97. /package/build/{extract/extract.d.ts → extract.d.ts} +0 -0
  98. /package/build/{extract/extract.js → extract.js} +0 -0
@@ -1,8 +1,10 @@
1
+ import { GoogleTms, Nztm2000QuadTms, TileMatrixSets } from '@basemaps/geo';
2
+ import { fsa, Url } from '@basemaps/shared';
1
3
  import { CliInfo } from '@basemaps/shared/build/cli/info.js';
2
4
  import { getLogger, logArguments } from '@basemaps/shared/build/cli/log.js';
3
- import { fsa } from '@chunkd/fs';
4
- import { command, number, option, string } from 'cmd-ts';
5
+ import { command, oneOf, option, string } from 'cmd-ts';
5
6
  import { SchemaLoader } from '../schema-loader/schema.loader.js';
7
+ import { VectorStac } from '../stac.js';
6
8
  function pathToURLFolder(path) {
7
9
  const url = fsa.toUrl(path);
8
10
  url.search = '';
@@ -13,24 +15,23 @@ function pathToURLFolder(path) {
13
15
  }
14
16
  export const ExtractArgs = {
15
17
  ...logArguments,
16
- path: option({
17
- type: string,
18
- long: 'path',
19
- defaultValue: () => './schema/',
20
- defaultValueIsSerializable: true,
21
- description: 'Path of Tiles schema json files that define the source layer and schemas',
18
+ schema: option({
19
+ type: Url,
20
+ long: 'schema',
21
+ defaultValue: () => pathToURLFolder('schema'),
22
+ description: 'Path of JSON schema file(s) defining the source layer and schemas. Either a directory containing such files, or a path to a single file.',
22
23
  }),
23
24
  cache: option({
24
25
  type: string,
25
26
  long: 'cache',
26
27
  description: 'Path of cache location, could be local or s3',
27
28
  }),
28
- group: option({
29
- type: number,
30
- long: 'group',
31
- defaultValue: () => 100,
29
+ tileMatrix: option({
30
+ type: oneOf([Nztm2000QuadTms.identifier, GoogleTms.identifier]),
31
+ long: 'tile-matrix',
32
+ description: `Output TileMatrix to use. Either: ${Nztm2000QuadTms.identifier}, or ${GoogleTms.identifier}.`,
33
+ defaultValue: () => GoogleTms.identifier,
32
34
  defaultValueIsSerializable: true,
33
- description: 'Number of layers grouped together, default to 100',
34
35
  }),
35
36
  };
36
37
  export const ExtractCommand = command({
@@ -40,49 +41,58 @@ export const ExtractCommand = command({
40
41
  args: ExtractArgs,
41
42
  async handler(args) {
42
43
  const logger = getLogger(this, args, 'cli-vector');
43
- const path = pathToURLFolder(args.path);
44
44
  const cache = pathToURLFolder(args.cache);
45
+ const tileMatrix = TileMatrixSets.find(args.tileMatrix);
46
+ if (tileMatrix == null)
47
+ throw new Error(`Tile matrix ${args.tileMatrix} is not supported`);
45
48
  // Find all lds layers that need to be process
46
- logger.info({ path }, 'Extract: Start');
47
- const schemaLoader = new SchemaLoader(new URL(path), logger, cache);
49
+ logger.info({ schema: args.schema }, 'Extract: Start');
50
+ const schemaLoader = new SchemaLoader(args.schema, tileMatrix, logger, cache);
48
51
  const schemas = await schemaLoader.load();
49
- const toProcess = [];
52
+ const smallLayers = [];
53
+ const largeLayers = [];
50
54
  let total = 0;
51
- let tasks = [];
55
+ const allFiles = [];
56
+ const vectorStac = new VectorStac(logger);
52
57
  for (const schema of schemas) {
53
58
  for (const layer of schema.layers) {
54
- if (tasks.length >= args.group) {
55
- toProcess.push({ tasks });
56
- tasks = [];
57
- }
59
+ if (layer.cache == null)
60
+ throw new Error(`Fail to prepare cache path for layer ${schema.name}:${layer.id}`);
61
+ allFiles.push({ path: layer.cache.path.href });
58
62
  // Skip if the layer is already processed in cache
59
- if (layer.cache && (await fsa.exists(layer.cache))) {
63
+ if (layer.cache.exists) {
60
64
  logger.info({ layer: schema.name, id: layer.id, cache: layer.cache }, 'Extract: Exists');
61
65
  continue;
62
66
  }
63
- // Prepare task to process
64
- logger.info({ layer: schema.name, id: layer.id }, 'Extract: ToProcess');
65
- const task = {
67
+ // Create stac file for the cache mbtiles
68
+ logger.info({ layer: schema.name, id: layer.id }, 'Extract: StacItem');
69
+ const stacFile = new URL(layer.cache.path.href.replace(/\.mbtiles$/, '.json'));
70
+ const stacLink = await vectorStac.createStacLink(schema.name, layer);
71
+ const options = {
66
72
  name: schema.name,
67
73
  metadata: schema.metadata,
74
+ tileMatrix: tileMatrix.identifier,
68
75
  layer,
69
76
  };
77
+ const stacItem = vectorStac.createStacItem([stacLink], layer.cache.fileName, tileMatrix, options);
78
+ await fsa.write(stacFile, JSON.stringify(stacItem, null, 2));
79
+ // Prepare task to process
80
+ logger.info({ layer: schema.name, id: layer.id }, 'Extract: ToProcess');
70
81
  // Separate large layer as individual task
71
82
  if (layer.largeLayer) {
72
- toProcess.push({ tasks: [task] });
83
+ largeLayers.push({ path: stacFile.href });
73
84
  }
74
85
  else {
75
- // Group the tasks together
76
- tasks.push(task);
86
+ smallLayers.push({ path: stacFile.href });
77
87
  }
78
88
  total++;
79
89
  }
80
90
  }
81
- // Push remaining tasks
82
- toProcess.push({ tasks });
83
91
  logger.info({ ToProcess: total }, 'CheckUpdate: Finish');
84
- await fsa.write(fsa.toUrl('tmp/vector/toProcess.json'), JSON.stringify(toProcess, null, 2));
85
- await fsa.write(fsa.toUrl('tmp/vector/updateRequired'), String(total > 0));
92
+ await fsa.write(fsa.toUrl('/tmp/extract/allCaches.json'), JSON.stringify(allFiles, null, 2));
93
+ await fsa.write(fsa.toUrl('/tmp/extract/smallLayers.json'), JSON.stringify(smallLayers, null, 2));
94
+ await fsa.write(fsa.toUrl('/tmp/extract/largeLayers.json'), JSON.stringify(largeLayers, null, 2));
95
+ await fsa.write(fsa.toUrl('/tmp/extract/updateRequired'), String(total > 0));
86
96
  },
87
97
  });
88
98
  //# sourceMappingURL=cli.extract.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli.extract.js","sourceRoot":"","sources":["../../src/cli/cli.extract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.extract.js","sourceRoot":"","sources":["../../src/cli/cli.extract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAyB,UAAU,EAAE,MAAM,YAAY,CAAC;AAE/D,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;IAChB,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC;IACrD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,GAAG,YAAY;IACf,MAAM,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,GAAG;QACT,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC;QAC7C,WAAW,EACT,0IAA0I;KAC7I,CAAC;IACF,KAAK,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,8CAA8C;KAC5D,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,KAAK,CAAC,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;QAC/D,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,qCAAqC,eAAe,CAAC,UAAU,QAAQ,SAAS,CAAC,UAAU,GAAG;QAC3G,YAAY,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU;QACxC,0BAA0B,EAAE,IAAI;KACjC,CAAC;CACH,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;IACpC,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,OAAO,CAAC,OAAO;IACxB,WAAW,EAAE,qDAAqD;IAClE,IAAI,EAAE,WAAW;IACjB,KAAK,CAAC,OAAO,CAAC,IAAI;QAChB,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxD,IAAI,UAAU,IAAI,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,CAAC,UAAU,mBAAmB,CAAC,CAAC;QAE3F,8CAA8C;QAC9C,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC;QACvD,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAC9E,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QAC1C,MAAM,WAAW,GAAG,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,EAAE,CAAC;QACvB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;QAC1C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClC,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI;oBAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC5G,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAE/C,kDAAkD;gBAClD,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;oBACvB,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,iBAAiB,CAAC,CAAC;oBACzF,SAAS;gBACX,CAAC;gBAED,yCAAyC;gBACzC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,mBAAmB,CAAC,CAAC;gBACvE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC/E,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACrE,MAAM,OAAO,GAA0B;oBACrC,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,UAAU,EAAE,UAAU,CAAC,UAAU;oBACjC,KAAK;iBACN,CAAC;gBACF,MAAM,QAAQ,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;gBAClG,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAE7D,0BAA0B;gBAC1B,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,oBAAoB,CAAC,CAAC;gBAExE,0CAA0C;gBAC1C,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;oBACrB,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC5C,CAAC;qBAAM,CAAC;oBACN,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC5C,CAAC;gBACD,KAAK,EAAE,CAAC;YACV,CAAC;QACH,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,qBAAqB,CAAC,CAAC;QACzD,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,6BAA6B,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7F,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,+BAA+B,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAClG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,+BAA+B,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAClG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,6BAA6B,CAAC,EAAE,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/E,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,44 @@
1
+ export declare const JoinArgs: {
2
+ fromFile: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
3
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<URL[]>>;
4
+ } & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive>;
5
+ filename: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
6
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<string>>;
7
+ } & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive>;
8
+ tileMatrix: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
9
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<string>>;
10
+ } & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive>;
11
+ title: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
12
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<string>>;
13
+ } & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive>;
14
+ target: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
15
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<URL | undefined>>;
16
+ } & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive>;
17
+ verbose: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
18
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<boolean>>;
19
+ } & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/argparser.js").Register & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive>;
20
+ extraVerbose: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
21
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<boolean>>;
22
+ } & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/argparser.js").Register & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive>;
23
+ };
24
+ export declare const JoinCommand: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
25
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
26
+ fromFile: URL[];
27
+ filename: string;
28
+ tileMatrix: string;
29
+ title: string;
30
+ target: URL | undefined;
31
+ verbose: boolean;
32
+ extraVerbose: boolean;
33
+ }>>;
34
+ } & import("cmd-ts/dist/cjs/helpdoc.js").PrintHelp & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/helpdoc.js").Named & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned> & import("cmd-ts/dist/cjs/argparser.js").Register & import("cmd-ts/dist/cjs/runner.js").Handling<{
35
+ fromFile: URL[];
36
+ filename: string;
37
+ tileMatrix: string;
38
+ title: string;
39
+ target: URL | undefined;
40
+ verbose: boolean;
41
+ extraVerbose: boolean;
42
+ }, Promise<void>> & {
43
+ run(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<Promise<void>>>;
44
+ } & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned & import("cmd-ts/dist/cjs/helpdoc.js").Descriptive & import("cmd-ts/dist/cjs/helpdoc.js").Aliased>;
@@ -0,0 +1,149 @@
1
+ import { TileMatrixSets } from '@basemaps/geo';
2
+ import { fsa, isArgo, Url, UrlArrayJsonFile, urlToString } from '@basemaps/shared';
3
+ import { CliId, CliInfo } from '@basemaps/shared/build/cli/info.js';
4
+ import { getLogger, logArguments } from '@basemaps/shared/build/cli/log.js';
5
+ import { command, option, optional, string } from 'cmd-ts';
6
+ import { mkdir } from 'fs/promises';
7
+ import path, { basename, dirname } from 'path';
8
+ import { createGzip } from 'zlib';
9
+ import { createStacFiles } from '../stac.js';
10
+ import { toTarIndex } from '../transform/covt.js';
11
+ import { toTarTiles } from '../transform/mbtiles.to.ttiles.js';
12
+ import { tileJoin } from '../transform/tippecanoe.js';
13
+ async function download(filePaths, outputPath, logger) {
14
+ const paths = [];
15
+ for (const file of filePaths) {
16
+ if (file.protocol === 'file:') {
17
+ paths.push(file);
18
+ }
19
+ else {
20
+ const fileName = basename(file.pathname);
21
+ if (fileName == null)
22
+ throw new Error(`Unsupported source pathname ${file.pathname}`);
23
+ const localFile = fsa.toUrl(`${outputPath}/downloads/${fileName}`);
24
+ if (await fsa.exists(localFile)) {
25
+ logger.info({ file: file, localFile, fileName }, 'Download:FileExists');
26
+ }
27
+ else {
28
+ const stats = await fsa.head(file);
29
+ logger.info({ file: file, localFile, fileName, size: stats?.size }, 'Download:Start');
30
+ const stream = fsa.readStream(file);
31
+ await fsa.write(localFile, stream);
32
+ logger.info({ file: file, localFile, fileName }, 'Download:End');
33
+ }
34
+ paths.push(localFile);
35
+ }
36
+ }
37
+ return paths;
38
+ }
39
+ /**
40
+ * Upload output file into s3 bucket
41
+ *
42
+ */
43
+ async function upload(file, bucketPath, logger) {
44
+ logger.info({ file: file.href }, 'Load:Start');
45
+ let filename = basename(file.pathname);
46
+ let stream = fsa.readStream(file);
47
+ // gzip index file
48
+ if (filename.endsWith('index')) {
49
+ filename = `${filename}.gz`;
50
+ stream = stream.pipe(createGzip());
51
+ }
52
+ // Upload to s3 or copy to local
53
+ let path = new URL(`topographic/${CliId}/${filename}`, bucketPath);
54
+ logger.info({ file: file, path: path }, 'Load:Path');
55
+ if (path.protocol === 'file:')
56
+ await mkdir(dirname(path.pathname), { recursive: true });
57
+ if (filename.endsWith('catalog.json'))
58
+ path = new URL(filename, bucketPath); // Upload catalog to root directory
59
+ await fsa.write(path, stream);
60
+ logger.info({ file: file, path: path }, 'Load:Finish');
61
+ return path;
62
+ }
63
+ export const JoinArgs = {
64
+ ...logArguments,
65
+ fromFile: option({
66
+ type: UrlArrayJsonFile,
67
+ long: 'from-file',
68
+ description: 'Path to JSON file containing array of paths to mbtiles.',
69
+ }),
70
+ filename: option({
71
+ type: string,
72
+ long: 'filename',
73
+ description: 'Output filename default topographic',
74
+ defaultValue: () => 'topographic-v2',
75
+ defaultValueIsSerializable: true,
76
+ }),
77
+ tileMatrix: option({
78
+ type: string,
79
+ long: 'tile-matrix',
80
+ description: `Output TileMatrix to use WebMercatorQuad or NZTM2000Quad`,
81
+ defaultValue: () => 'WebMercatorQuad',
82
+ defaultValueIsSerializable: true,
83
+ }),
84
+ title: option({
85
+ type: string,
86
+ long: 'title',
87
+ description: 'Title for the output etl data in the STAC file',
88
+ defaultValue: () => 'Topographic V2',
89
+ defaultValueIsSerializable: true,
90
+ }),
91
+ target: option({
92
+ type: optional(Url),
93
+ long: 'target',
94
+ description: 'Path of target location to upload the processed file, could be local or s3',
95
+ }),
96
+ };
97
+ export const JoinCommand = command({
98
+ name: 'join',
99
+ version: CliInfo.version,
100
+ description: 'Join vector mbtiles',
101
+ args: JoinArgs,
102
+ async handler(args) {
103
+ const logger = getLogger(this, args, 'cli-vector');
104
+ const outputPath = path.resolve('tmp/join/');
105
+ await mkdir(outputPath, { recursive: true });
106
+ const tileMatrix = TileMatrixSets.find(args.tileMatrix);
107
+ if (tileMatrix == null)
108
+ throw new Error(`Tile matrix ${args.tileMatrix} is not supported`);
109
+ const bucketPath = new URL(`vector/${tileMatrix.projection.code}/`, args.target ?? outputPath);
110
+ const filePaths = await download(args.fromFile, outputPath, logger);
111
+ const outputMbtiles = path.join(outputPath, `${args.filename}.mbtiles`);
112
+ logger.info({ files: filePaths.length, outputMbtiles }, 'JoinMbtiles: Start');
113
+ await tileJoin(filePaths, outputMbtiles, logger);
114
+ logger.info({ files: filePaths.length, outputMbtiles }, 'JoinMbtiles: End');
115
+ const outputCotar = path.join(outputPath, `${args.filename}.tar.co`);
116
+ logger.info({ mbtiles: outputMbtiles, outputCotar }, 'ToTartTiles: Start');
117
+ await toTarTiles(outputMbtiles, outputCotar, logger);
118
+ logger.info({ mbtiles: outputMbtiles, outputCotar }, 'ToTartTiles: End');
119
+ const outputIndex = path.join(outputPath, `${args.filename}.tar.index`);
120
+ logger.info({ cotar: outputCotar, outputIndex }, 'toTarIndex: Start');
121
+ await toTarIndex(outputCotar, outputIndex, logger);
122
+ logger.info({ cotar: outputCotar, outputIndex }, 'toTarIndex: End');
123
+ logger.info({ target: bucketPath, tileMatrix: tileMatrix.identifier }, 'CreateStac: Start');
124
+ const stacFiles = await createStacFiles(args.fromFile, bucketPath, args.filename, tileMatrix, args.title, logger);
125
+ logger.info({ cotar: outputCotar, outputIndex }, 'CreateStac: End');
126
+ // Upload output to s3
127
+ logger.info({ target: bucketPath, tileMatrix: tileMatrix.identifier }, 'Upload: Start');
128
+ if (args.target) {
129
+ await upload(fsa.toUrl(outputMbtiles), bucketPath, logger);
130
+ await upload(fsa.toUrl(outputCotar), bucketPath, logger);
131
+ await upload(fsa.toUrl(outputIndex), bucketPath, logger);
132
+ // Upload stac Files
133
+ for (const file of stacFiles) {
134
+ await upload(file, bucketPath, logger);
135
+ }
136
+ logger.info({ target: bucketPath, tileMatrix: tileMatrix.identifier }, 'Upload: End');
137
+ }
138
+ // Write output target for argo tasks to create pull request
139
+ if (isArgo()) {
140
+ const target = new URL(`topographic/${CliId}/${args.filename}.tar.co`, bucketPath);
141
+ await fsa.write(fsa.toUrl('/tmp/target'), urlToString(target));
142
+ const mbTilesTarget = new URL(`topographic/${CliId}/${args.filename}.mbtiles`, bucketPath);
143
+ await fsa.write(fsa.toUrl('/tmp/mbTilesTarget'), mbTilesTarget.toString());
144
+ const analyseTarget = new URL(`topographic/${CliId}/`, bucketPath);
145
+ await fsa.write(fsa.toUrl('/tmp/analyseTarget'), analyseTarget.toString());
146
+ }
147
+ },
148
+ });
149
+ //# sourceMappingURL=cli.join.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.join.js","sourceRoot":"","sources":["../../src/cli/cli.join.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../src/extract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,uCAAuC;AAEvC,6CAA6C;AAE7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AACvD,MAAM,MAAM,GAAG,MAAM,CAAC;AAoBtB,MAAM,OAAO,OAAO;IAApB;QACE;;;;;WAA4C;IAyC9C,CAAC;IAvCC;;OAEG;IACH,gBAAgB;QACd,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI;YACrB,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QACtG,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,KAAY;QAC9B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;QAEjD,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,SAAS;YAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACzC,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAI,UAAU,IAAI,IAAI,IAAI,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC5D,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,SAAS,CAAC,QAAa;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;QAChD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAC3E,CAAC;CACF;AAED,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { TileMatrixSet } from '@basemaps/geo';
2
+ import { LogType } from '@basemaps/shared';
3
+ import { Metrics } from '../schema-loader/schema.js';
4
+ import { VectorCreationOptions } from '../stac.js';
5
+ /**
6
+ * Read and modify all ndJson file, then combine into one file,
7
+ *
8
+ * @returns {string} output of joined ndJson filepath
9
+ */
10
+ export declare function generalize(input: URL, output: URL, tileMatrix: TileMatrixSet, options: VectorCreationOptions, logger: LogType): Promise<Metrics>;
@@ -0,0 +1,168 @@
1
+ import { createWriteStream } from 'fs';
2
+ import readline from 'readline';
3
+ import { modifyFeature } from '../modify/modify.js';
4
+ import { transformNdJson, transformZoom } from '../transform/nztm.js';
5
+ import { createReadStreamSafe } from '../util.js';
6
+ import { simplify } from './simplify.js';
7
+ /**
8
+ * Read and modify all ndJson file, then combine into one file,
9
+ *
10
+ * @returns {string} output of joined ndJson filepath
11
+ */
12
+ export async function generalize(input, output, tileMatrix, options, logger) {
13
+ logger.info({}, 'Generalize:Start');
14
+ const fileStream = await createReadStreamSafe(input.pathname);
15
+ const simplify = options.layer.simplify;
16
+ const rl = readline.createInterface({
17
+ input: fileStream,
18
+ crlfDelay: Infinity,
19
+ });
20
+ const writeStream = createWriteStream(output);
21
+ let inputCount = 0;
22
+ let outputCount = 0;
23
+ for await (const line of rl) {
24
+ if (line === '')
25
+ continue;
26
+ const feature = JSON.parse(line);
27
+ if (tileMatrix.identifier === 'NZTM2000Quad')
28
+ transformNdJson(feature);
29
+ inputCount++;
30
+ // For simplify, duplicate feature for each zoom level with different tolerance
31
+ if (simplify != null) {
32
+ for (const s of simplify) {
33
+ const vectorGeofeature = tag(tileMatrix, options, feature, s, logger);
34
+ if (vectorGeofeature == null)
35
+ continue;
36
+ writeStream.write(JSON.stringify(vectorGeofeature) + '\n');
37
+ outputCount++;
38
+ }
39
+ }
40
+ else {
41
+ const vectorGeofeature = tag(tileMatrix, options, feature, null, logger);
42
+ if (vectorGeofeature == null)
43
+ continue;
44
+ writeStream.write(JSON.stringify(vectorGeofeature) + '\n');
45
+ outputCount++;
46
+ }
47
+ }
48
+ await new Promise((resolve) => {
49
+ writeStream.close(resolve);
50
+ });
51
+ const metrics = {
52
+ input: inputCount,
53
+ output: outputCount,
54
+ };
55
+ logger.info({ inputCount, outputCount }, 'Generalize:End');
56
+ return metrics;
57
+ }
58
+ /**
59
+ * Tag feature for layer
60
+ */
61
+ function tag(tileMatrix, options, feature, simplify, logger) {
62
+ const vectorGeofeature = {
63
+ ...structuredClone(feature),
64
+ tippecanoe: {
65
+ layer: options.name,
66
+ minzoom: options.layer.style.minZoom,
67
+ maxzoom: options.layer.style.maxZoom,
68
+ },
69
+ };
70
+ // copy the stac json's tags to the feature (i.e. 'kind')
71
+ Object.entries(options.layer.tags).forEach(([key, value]) => (vectorGeofeature.properties[key] = value));
72
+ // Simplify geometry
73
+ if (simplify != null) {
74
+ // Update the simplified feature zoom level
75
+ vectorGeofeature['tippecanoe'] = {
76
+ layer: options.name,
77
+ minzoom: simplify.style.minZoom,
78
+ maxzoom: simplify.style.maxZoom,
79
+ };
80
+ if (simplify.tolerance != null) {
81
+ const geom = vectorGeofeature.geometry;
82
+ const type = geom.type;
83
+ const geometry = simplifyFeature(type, geom, simplify.tolerance);
84
+ if (geometry == null) {
85
+ return null;
86
+ }
87
+ vectorGeofeature.geometry = geometry;
88
+ }
89
+ }
90
+ // adjust the feature's metadata and properties
91
+ const modifiedFeature = modifyFeature(vectorGeofeature, options, logger);
92
+ if (modifiedFeature == null) {
93
+ return null;
94
+ }
95
+ // Skip features that maxzoom is less than minzoom, this could happened after simplification and special tags on zoom levels
96
+ if (modifiedFeature.tippecanoe.maxzoom < modifiedFeature.tippecanoe.minzoom)
97
+ return null;
98
+ // Transform zoom level for NZTM2000Quad
99
+ modifiedFeature.tippecanoe.minzoom = transformZoom(modifiedFeature.tippecanoe.minzoom, tileMatrix);
100
+ modifiedFeature.tippecanoe.maxzoom = transformZoom(modifiedFeature.tippecanoe.maxzoom, tileMatrix);
101
+ // Remove unused properties
102
+ const cleanedFeature = removeAttributes(modifiedFeature, options);
103
+ return cleanedFeature;
104
+ }
105
+ function removeAttributes(feature, options, remove = true) {
106
+ feature = structuredClone(feature);
107
+ // Add existing attributes into keep attributes and update attribute name if needed
108
+ const properties = feature['properties'];
109
+ const mappings = options.layer.attributes;
110
+ const attributes = new Set(options.metadata.attributes);
111
+ if (mappings != null) {
112
+ Object.keys(mappings).forEach((key) => (properties[mappings[key]] = properties[key]));
113
+ }
114
+ // Remove unused attributes
115
+ Object.keys(properties).forEach((key) => {
116
+ // Add id as feature id and remove from properties
117
+ if (key === 'id') {
118
+ feature['id'] = String(properties[key]);
119
+ delete properties[key];
120
+ }
121
+ if (!attributes.has(key) && remove)
122
+ delete properties[key];
123
+ });
124
+ feature.properties = properties;
125
+ return feature;
126
+ }
127
+ /**
128
+ * Simplify geometry by Douglas-Peucker and Radial Distance algorithms.
129
+ * Remove all the points for polygons simplification.
130
+ */
131
+ function simplifyFeature(type, geometry, tolerance) {
132
+ if (type === 'LineString') {
133
+ const coordinates = geometry.coordinates;
134
+ const line = simplify(coordinates, tolerance);
135
+ return { type, coordinates: line };
136
+ }
137
+ else if (type === 'Polygon' || type === 'MultiLineString') {
138
+ const coordinates = geometry.coordinates;
139
+ const cor = coordinates.slice();
140
+ for (let k = 0; k < cor.length; k++) {
141
+ const point = simplify(cor[k], tolerance);
142
+ cor[k] = point;
143
+ }
144
+ return { type, coordinates: cor };
145
+ }
146
+ else if (type === 'MultiPolygon') {
147
+ let remove = true;
148
+ const coordinates = geometry.coordinates;
149
+ const cor = coordinates.slice();
150
+ for (let k = 0; k < cor.length; k++) {
151
+ for (let l = 0; l < cor[k].length; l++) {
152
+ const point = simplify(cor[k][l], tolerance);
153
+ cor[k][l] = point;
154
+ if (point.length > 2) {
155
+ cor[k][l] = point;
156
+ remove = false;
157
+ }
158
+ else {
159
+ // remove points
160
+ cor[k][l] = [];
161
+ }
162
+ }
163
+ }
164
+ return remove ? undefined : { type, coordinates: cor };
165
+ }
166
+ return geometry;
167
+ }
168
+ //# sourceMappingURL=generalization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generalization.js","sourceRoot":"","sources":["../../src/generalization/generalization.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export type Point = [number, number];
2
+ export declare function simplify(points: Point[], tolerance: number, highestQuality?: boolean): Point[];
@@ -0,0 +1,80 @@
1
+ // square distance between 2 points
2
+ function getSqDist(p1, p2) {
3
+ const dx = p1[0] - p2[0];
4
+ const dy = p1[1] - p2[1];
5
+ return dx * dx + dy * dy;
6
+ }
7
+ // square distance from a point to a segment
8
+ function getSqSegDist(p, p1, p2) {
9
+ let x = p1[0];
10
+ let y = p1[1];
11
+ let dx = p2[0] - x;
12
+ let dy = p2[1] - y;
13
+ if (dx !== 0 || dy !== 0) {
14
+ const t = ((p[0] - x) * dx + (p[1] - y) * dy) / (dx * dx + dy * dy);
15
+ if (t > 1) {
16
+ x = p2[0];
17
+ y = p2[1];
18
+ }
19
+ else if (t > 0) {
20
+ x += dx * t;
21
+ y += dy * t;
22
+ }
23
+ }
24
+ dx = p[0] - x;
25
+ dy = p[1] - y;
26
+ return dx * dx + dy * dy;
27
+ }
28
+ // rest of the code doesn't care about point format
29
+ // basic distance-based simplification
30
+ function simplifyRadialDist(points, sqTolerance) {
31
+ let prevPoint = points[0];
32
+ let point = points[1];
33
+ const newPoints = [prevPoint];
34
+ for (let i = 1, len = points.length; i < len; i++) {
35
+ point = points[i];
36
+ if (getSqDist(point, prevPoint) > sqTolerance) {
37
+ newPoints.push(point);
38
+ prevPoint = point;
39
+ }
40
+ }
41
+ if (prevPoint !== point)
42
+ newPoints.push(point);
43
+ return newPoints;
44
+ }
45
+ function simplifyDPStep(points, first, last, sqTolerance, simplified) {
46
+ let maxSqDist = sqTolerance;
47
+ let index = 0;
48
+ for (let i = first + 1; i < last; i++) {
49
+ const sqDist = getSqSegDist(points[i], points[first], points[last]);
50
+ if (sqDist > maxSqDist) {
51
+ index = i;
52
+ maxSqDist = sqDist;
53
+ }
54
+ }
55
+ if (maxSqDist > sqTolerance) {
56
+ if (index - first > 1)
57
+ simplifyDPStep(points, first, index, sqTolerance, simplified);
58
+ simplified.push(points[index]);
59
+ if (last - index > 1)
60
+ simplifyDPStep(points, index, last, sqTolerance, simplified);
61
+ }
62
+ }
63
+ // simplification using Ramer-Douglas-Peucker algorithm
64
+ function simplifyDouglasPeucker(points, sqTolerance) {
65
+ const last = points.length - 1;
66
+ const simplified = [points[0]];
67
+ simplifyDPStep(points, 0, last, sqTolerance, simplified);
68
+ simplified.push(points[last]);
69
+ return simplified;
70
+ }
71
+ // both algorithms combined for awesome performance
72
+ export function simplify(points, tolerance, highestQuality) {
73
+ if (points.length <= 2)
74
+ return points;
75
+ const sqTolerance = tolerance * tolerance;
76
+ points = highestQuality ? points : simplifyRadialDist(points, sqTolerance);
77
+ points = simplifyDouglasPeucker(points, sqTolerance);
78
+ return points;
79
+ }
80
+ //# sourceMappingURL=simplify.js.map