import * as fs from "fs" import { TagUtils } from "../Logic/Tags/TagUtils" import { writeFileSync } from "fs" import { TagsFilter } from "../Logic/Tags/TagsFilter" function main(args) { if (args.length < 2) { console.log( "Given a single geojson file and a filter specification, will print all the entries to std-out which pass the property" ) console.log("USAGE: perProperty `file.geojson` `key=value` [outputfile]") return } const path = args[0] const spec = args[1] const output = args[2] const data = JSON.parse(fs.readFileSync(path, { encoding: "utf8" })) let filter: TagsFilter try { filter = TagUtils.Tag(JSON.parse(spec)) } catch (e) { filter = TagUtils.Tag(spec) } const features = data.features.filter((f) => filter.matchesProperties(f.properties)) if (features.length === 0) { console.log("Warning: no features matched the filter. Exiting now") return } const collection = { type: "FeatureCollection", features, } const stringified = JSON.stringify(collection, null, " ") if (output === undefined) { console.log(stringified) } else { console.log( "Filtered " + path + ": kept " + features.length + " out of " + data.features.length + " objects" ) writeFileSync(output, stringified) } } main(process.argv.slice(2))