45 lines
No EOL
1.2 KiB
TypeScript
45 lines
No EOL
1.2 KiB
TypeScript
import * as fs from "fs";
|
|
|
|
function main(args){
|
|
if(args.length < 2){
|
|
console.log("Given a single geojson file, generates the partitions for every found property")
|
|
console.log("USAGE: perProperty `file.geojson` `property-key`")
|
|
return
|
|
}
|
|
const path = args[0]
|
|
const key = args[1]
|
|
|
|
const data= JSON.parse(fs.readFileSync(path, "UTF8"))
|
|
const perProperty = new Map<string, any[]>()
|
|
|
|
console.log("Partitioning",data.features.length, "features")
|
|
for (const feature of data.features) {
|
|
const v = feature.properties[key]
|
|
if(!perProperty.has(v)){
|
|
console.log("Found a new category:", v)
|
|
perProperty.set(v, [])
|
|
}
|
|
perProperty.get(v).push(feature)
|
|
}
|
|
|
|
const stripped = path.substr(0, path.length - ".geojson".length)
|
|
perProperty.forEach((features, v) => {
|
|
|
|
fs.writeFileSync(stripped+"."+v.replace(/[^a-zA-Z0-9_]/g, "_")+".geojson",
|
|
JSON.stringify({
|
|
type:"FeatureCollection",
|
|
features
|
|
}))
|
|
})
|
|
|
|
|
|
}
|
|
|
|
let args = [...process.argv]
|
|
args.splice(0, 2)
|
|
try {
|
|
main(args)
|
|
} catch (e) {
|
|
console.error("Error building cache:", e)
|
|
}
|
|
console.log("All done!") |