45 lines
No EOL
1.3 KiB
TypeScript
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)) |