mapcomplete/scripts/perProperty.ts
2022-01-26 21:40:38 +01:00

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!")