forked from MapComplete/MapComplete
Small fixes
This commit is contained in:
parent
ac6f4e0289
commit
206f9047a0
3 changed files with 26 additions and 9 deletions
127
scripts/postal_code_tools/openaddressestogeojson.ts
Normal file
127
scripts/postal_code_tools/openaddressestogeojson.ts
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
import * as fs from "fs";
|
||||
import {existsSync, writeFileSync} from "fs";
|
||||
import * as readline from "readline";
|
||||
import ScriptUtils from "../ScriptUtils";
|
||||
|
||||
/**
|
||||
* Converts an open-address CSV file into a big geojson file
|
||||
*/
|
||||
|
||||
async function main(args: string[]) {
|
||||
|
||||
const inputFile = args[0]
|
||||
const outputFile = args[1]
|
||||
const fileStream = fs.createReadStream(inputFile);
|
||||
const perPostalCode = args[2] == "--per-postal-code"
|
||||
const rl = readline.createInterface({
|
||||
input: fileStream,
|
||||
crlfDelay: Infinity
|
||||
});
|
||||
// Note: we use the crlfDelay option to recognize all instances of CR LF
|
||||
// ('\r\n') in input.txt as a single line break.
|
||||
|
||||
const fields = [
|
||||
"EPSG:31370_x", "EPSG:31370_y", "EPSG:4326_lat", "EPSG:4326_lon",
|
||||
"address_id", "box_number",
|
||||
"house_number", "municipality_id", "municipality_name_de", "municipality_name_fr", "municipality_name_nl", "postcode", "postname_fr",
|
||||
"postname_nl", "street_id", "streetname_de", "streetname_fr", "streetname_nl", "region_code", "status"
|
||||
]
|
||||
|
||||
let i = 0;
|
||||
let failed = 0
|
||||
|
||||
let createdFiles : string [] = []
|
||||
if(!perPostalCode){
|
||||
fs.writeFileSync(outputFile, "")
|
||||
}
|
||||
// @ts-ignore
|
||||
for await (const line of rl) {
|
||||
i++;
|
||||
if (i % 10000 == 0) {
|
||||
ScriptUtils.erasableLog("Converted ", i, "features (of which ", failed, "features don't have a coordinate)")
|
||||
}
|
||||
const data = line.split(",")
|
||||
const parsed: any = {}
|
||||
for (let i = 0; i < fields.length; i++) {
|
||||
const field = fields[i];
|
||||
parsed[field] = data[i]
|
||||
}
|
||||
const lat = Number(parsed["EPSG:4326_lat"])
|
||||
const lon = Number(parsed["EPSG:4326_lon"])
|
||||
|
||||
if (parsed["EPSG:31370_x"] === "0.0") {
|
||||
failed++
|
||||
continue
|
||||
}
|
||||
|
||||
delete parsed["EPSG:4326_lat"]
|
||||
delete parsed["EPSG:4326_lon"]
|
||||
delete parsed["EPSG:31370_x"]
|
||||
delete parsed["EPSG:31370_y"]
|
||||
delete parsed["EPSG:4326_lat"]
|
||||
delete parsed["EPSG:4326_lat"]
|
||||
|
||||
let targetFile = outputFile
|
||||
if (perPostalCode) {
|
||||
if(parsed["postcode"] === ""){
|
||||
continue
|
||||
}
|
||||
if(isNaN(Number(parsed["postcode"]))){
|
||||
continue;
|
||||
}
|
||||
targetFile = outputFile + "-" + parsed["postcode"] + ".geojson"
|
||||
let isFirst = false
|
||||
if(!existsSync(targetFile)){
|
||||
writeFileSync(targetFile, '{ "type":"FeatureCollection", "features":[')
|
||||
createdFiles.push(targetFile)
|
||||
isFirst = true
|
||||
}
|
||||
|
||||
if(!isFirst){
|
||||
fs.appendFileSync(targetFile, ",\n")
|
||||
}
|
||||
|
||||
fs.appendFileSync(targetFile, JSON.stringify({
|
||||
type: "Feature",
|
||||
properties: parsed,
|
||||
geometry: {
|
||||
type: "Point",
|
||||
coordinates: [lon, lat]
|
||||
}
|
||||
}))
|
||||
|
||||
}else{
|
||||
|
||||
|
||||
fs.appendFileSync(outputFile, JSON.stringify({
|
||||
type: "Feature",
|
||||
properties: parsed,
|
||||
geometry: {
|
||||
type: "Point",
|
||||
coordinates: [lon, lat]
|
||||
}
|
||||
}) + "\n")
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
console.log("Closing files...")
|
||||
createdFiles.sort()
|
||||
for (const createdFile of createdFiles) {
|
||||
ScriptUtils.erasableLog("Closing ", createdFile, "and creating convex hull")
|
||||
fs.appendFileSync(createdFile, "]}")
|
||||
}
|
||||
|
||||
console.log("Done! Converted ", i, "features (of which ", failed, "features don't have a coordinate)")
|
||||
|
||||
}
|
||||
|
||||
let args = [...process.argv]
|
||||
args.splice(0, 2)
|
||||
|
||||
if (args.length == 0) {
|
||||
console.log("USAGE: input-csv-file output.newline-delimited-geojson.json [--per-postal-code]")
|
||||
} else {
|
||||
main(args).catch(e => console.error(e))
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue