mapcomplete/scripts/filter.ts

45 lines
No EOL
1.3 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, "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))