53 lines
1.5 KiB
TypeScript
53 lines
1.5 KiB
TypeScript
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))
|