forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			63 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import * as fs from "fs"
 | |
| import { writeFileSync } from "fs"
 | |
| import ScriptUtils from "../ScriptUtils"
 | |
| 
 | |
| 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)
 |