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.
63 lines
2.4 KiB
63 lines
2.4 KiB
#!/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 <file>", "output file name; defaults to “-” for stdout", "-")
|
|
.option("--extent <value>", "the major and minor extent", parseExtent)
|
|
.option("--extent-minor <value>", "the minor extent; defaults to " + graticule.extentMajor(), parseExtent)
|
|
.option("--extent-major <value>", "the major extent; defaults to " + graticule.extentMinor(), parseExtent)
|
|
.option("--step <value>", "the major and minor step", parseStep)
|
|
.option("--step-minor <value>", "the minor step; defaults to " + graticule.stepMinor(), parseStep)
|
|
.option("--step-major <value>", "the major step; defaults to " + graticule.stepMajor(), parseStep)
|
|
.option("--precision <value>", "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);
|
|
}
|
|
|