#!/usr/bin/env node import {program} from "commander"; import {geoGraticule} from "d3-geo"; import {readFileSync} from "fs"; import {dirname, resolve} from "path"; import {fileURLToPath} from "url"; import write from "./write.js"; const version = JSON.parse(readFileSync(resolve(dirname(fileURLToPath(import.meta.url)), "../package.json"))).version; const graticule = geoGraticule(); const options = program .version(version) .usage("[options]") .description("Generate a GeoJSON graticule.") .option("-o, --out ", "output file name; defaults to “-” for stdout", "-") .option("--extent ", "the major and minor extent", parseExtent) .option("--extent-minor ", "the minor extent; defaults to " + graticule.extentMajor(), parseExtent) .option("--extent-major ", "the major extent; defaults to " + graticule.extentMinor(), parseExtent) .option("--step ", "the major and minor step", parseStep) .option("--step-minor ", "the minor step; defaults to " + graticule.stepMinor(), parseStep) .option("--step-major ", "the major step; defaults to " + graticule.stepMajor(), parseStep) .option("--precision ", "the precision; defaults to " + graticule.precision(), graticule.precision) .parse(process.argv) .opts(); if (program.args.length !== 0) { console.error(); console.error(" error: unexpected arguments"); console.error(); process.exit(1); } if (options.extent != null) { if (options.extentMinor == null) options.extentMinor = options.extent; if (options.extentMajor == null) options.extentMajor = options.extent; } if (options.step != null) { if (options.stepMinor == null) options.stepMinor = options.step; if (options.stepMajor == null) options.stepMajor = options.step; } if (options.extentMinor != null) graticule.extentMinor(options.extentMinor); if (options.extentMajor != null) graticule.extentMajor(options.extentMajor); if (options.stepMinor != null) graticule.stepMinor(options.stepMinor); if (options.stepMajor != null) graticule.stepMajor(options.stepMajor); var writer = write(options.out); writer.write(JSON.stringify(graticule()) + "\n"); writer.end().catch(abort); function parseStep(x) { return x = x.split(","), x.length === 1 ? [+x[0], +x[0]] : [+x[0], +x[1]]; } function parseExtent(x) { return x = x.split(","), [[+x[0], +x[1]], [+x[2], +x[3]]]; } function abort(error) { console.error(error.stack); }