forked from MapComplete/MapComplete
Add tools to create postal code boundaries
This commit is contained in:
parent
7be5493284
commit
98d92e763a
6 changed files with 1080 additions and 3 deletions
55
scripts/postal_code_tools/prepPostalCodesHulls.ts
Normal file
55
scripts/postal_code_tools/prepPostalCodesHulls.ts
Normal file
|
@ -0,0 +1,55 @@
|
|||
import * as fs from "fs";
|
||||
import ScriptUtils from "./ScriptUtils";
|
||||
import {post} from "jquery";
|
||||
import {writeFileSync} from "fs";
|
||||
|
||||
function handleFile(file: string, postalCode: number) {
|
||||
|
||||
const geojson = JSON.parse(fs.readFileSync(file, "UTF8"))
|
||||
geojson.properties = {
|
||||
type: "boundary",
|
||||
"boundary": "postal_code",
|
||||
"postal_code": postalCode + ""
|
||||
}
|
||||
return geojson
|
||||
}
|
||||
|
||||
|
||||
function getKnownPostalCodes(): number[] {
|
||||
return fs.readFileSync("./scripts/postal_code_tools/knownPostalCodes.csv", "UTF8").split("\n")
|
||||
.map(line => Number(line.split(",")[1]))
|
||||
}
|
||||
|
||||
function main(args: string[]) {
|
||||
const dir = args[0]
|
||||
const knownPostals = new Set<number>(getKnownPostalCodes())
|
||||
const files = ScriptUtils.readDirRecSync(dir, 1)
|
||||
const allFiles = []
|
||||
const skipped = []
|
||||
for (const file of files) {
|
||||
const nameParts = file.split("-")
|
||||
const postalCodeStr = nameParts[nameParts.length - 1]
|
||||
const postalCode = Number(postalCodeStr.substr(0, postalCodeStr.length - ".geojson.convex.geojson".length))
|
||||
if (isNaN(postalCode)) {
|
||||
console.error("Not a number: ", postalCodeStr)
|
||||
continue
|
||||
}
|
||||
if (knownPostals.has(postalCode)) {
|
||||
skipped.push(postalCode)
|
||||
ScriptUtils.erasableLog("Skipping boundary for ", postalCode, "as it is already known - skipped ", skipped.length, "already")
|
||||
continue
|
||||
}
|
||||
allFiles.push(handleFile(file, postalCode))
|
||||
}
|
||||
|
||||
|
||||
writeFileSync("all_postal_codes_filtered.geojson", JSON.stringify({
|
||||
type: "FeatureCollection",
|
||||
features: allFiles
|
||||
}))
|
||||
|
||||
}
|
||||
|
||||
let args = [...process.argv]
|
||||
args.splice(0, 2)
|
||||
main(args)
|
Loading…
Add table
Add a link
Reference in a new issue