You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

47 lines
1.3 KiB

  1. #!/usr/bin/env node
  2. import {program} from "commander";
  3. import {readFileSync} from "fs";
  4. import {dirname, resolve} from "path";
  5. import {fileURLToPath} from "url";
  6. import {geoQuantize} from "../src/index.js";
  7. import read from "./read.js";
  8. import write from "./write.js";
  9. const version = JSON.parse(readFileSync(resolve(dirname(fileURLToPath(import.meta.url)), "../package.json"))).version;
  10. const options = program
  11. .version(version)
  12. .usage("[options] [file]")
  13. .description("Quantize GeoJSON.")
  14. .option("-o, --out <file>", "output file name; defaults to “-” for stdout", "-")
  15. .option("-p, --precision <value>", "number of output digits after the decimal point")
  16. .option("-n, --newline-delimited", "use newline-delimited JSON")
  17. .parse(process.argv)
  18. .opts();
  19. if (program.args.length > 1) {
  20. console.error();
  21. console.error(" error: multiple input files");
  22. console.error();
  23. process.exit(1);
  24. } else if (program.args.length === 0) {
  25. program.args.push("-");
  26. }
  27. var reader = read(program.args[0], options.newlineDelimited, quantize).then(end),
  28. writer = write(options.out);
  29. reader.catch(error => {
  30. console.error(error.stack);
  31. });
  32. function quantize(d, i) {
  33. if (options.precision != null) d = geoQuantize(d, options.precision);
  34. return writer.write(JSON.stringify(d) + "\n");
  35. }
  36. function end() {
  37. return writer.end();
  38. }