forked from MapComplete/MapComplete
Remove runningFromConsole from scripts and tests, add routeablePointScript for postal codes
This commit is contained in:
parent
5b513b1248
commit
480bb4902b
15 changed files with 99 additions and 42 deletions
92
scripts/postal_code_tools/createRoutablePoint.ts
Normal file
92
scripts/postal_code_tools/createRoutablePoint.ts
Normal file
|
@ -0,0 +1,92 @@
|
|||
import {appendFileSync, existsSync, readFileSync, writeFileSync} from "fs";
|
||||
import {GeoOperations} from "../../Logic/GeoOperations";
|
||||
import ScriptUtils from "../ScriptUtils";
|
||||
import {Utils} from "../../Utils";
|
||||
|
||||
|
||||
async function main(args: string[]) {
|
||||
|
||||
const pointCandidates = JSON.parse(readFileSync(args[0], "utf8"))
|
||||
const postcodes = JSON.parse(readFileSync(args[1], "utf8"))
|
||||
const output = args[2] ?? "centralCoordinates.csv"
|
||||
|
||||
const perPostCode = new Map<string, any[]>()
|
||||
|
||||
const alreadyLoaded = new Set<number>()
|
||||
if(existsSync(output)){
|
||||
const lines = readFileSync(output, "UTF8").split("\n")
|
||||
lines.shift()
|
||||
lines.forEach(line => {
|
||||
const postalCode = Number( line.split(",")[0])
|
||||
alreadyLoaded.add(postalCode)
|
||||
})
|
||||
}else{
|
||||
writeFileSync(output,"postal_code,lon,lat\n","UTF-8")
|
||||
}
|
||||
|
||||
for (const boundary of postcodes.features) {
|
||||
const postcode = boundary.properties.nouveau_PO
|
||||
if(alreadyLoaded.has(Number(postcode))){
|
||||
console.log("Skipping ", postcode, "as already loaded")
|
||||
continue
|
||||
}
|
||||
if (perPostCode.has(postcode)) {
|
||||
perPostCode.get(postcode).push(boundary)
|
||||
} else {
|
||||
perPostCode.set(postcode, [boundary])
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
for (const postcode of Array.from(perPostCode.keys())) {
|
||||
const boundaries = perPostCode.get(postcode)
|
||||
const candidates = []
|
||||
for (const boundary of boundaries) {
|
||||
for (const candidate of pointCandidates.features) {
|
||||
if (!GeoOperations.inside(candidate, boundary)) {
|
||||
// console.log(JSON.stringify(candidate))
|
||||
continue
|
||||
}
|
||||
candidates.push(candidate.geometry.coordinates)
|
||||
|
||||
}
|
||||
}
|
||||
if (candidates.length === 0) {
|
||||
console.log("Postcode ", postcode, "has", candidates.length, "candidates, using centerpoint instead")
|
||||
candidates.push(...boundaries.map(boundary => GeoOperations.centerpointCoordinates(boundary)))
|
||||
}
|
||||
|
||||
|
||||
const url = "https://staging.anyways.eu/routing-api/v1/routes?access_token=postal_code_script&turn_by_turn=false&format=geojson&language=en"
|
||||
const depPoints :[number,number][] = Utils.NoNull( await Promise.all(candidates.map(async candidate => {
|
||||
try{
|
||||
|
||||
const result = await ScriptUtils.DownloadJSON(url + "&loc=" + candidate.join("%2C") + "&loc=3.22000%2C51.21577&profile=car.short")
|
||||
const depPoint = result.features.filter(f => f.geometry.type === "LineString")[0].geometry.coordinates[0]
|
||||
return <[number,number]>[depPoint[0], depPoint[1]] // Drop elevation
|
||||
}catch(e){
|
||||
console.error("No result or could not calculate a route")
|
||||
}
|
||||
})))
|
||||
|
||||
const centers = boundaries.map(b => GeoOperations.centerpointCoordinates(b))
|
||||
const center = GeoOperations.centerpointCoordinates({
|
||||
type:"Feature",
|
||||
geometry:{
|
||||
type:"LineString",
|
||||
coordinates: centers
|
||||
}
|
||||
})
|
||||
|
||||
depPoints.sort((c0, c1) => GeoOperations.distanceBetween(c0, center) - GeoOperations.distanceBetween(c1, center))
|
||||
console.log("Sorted departure point candidates for ",postcode," are ", JSON.stringify(depPoints))
|
||||
appendFileSync(output,[postcode, ...depPoints[0]].join(", ")+"\n","UTF-8")
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
let args = [...process.argv]
|
||||
args.splice(0, 2)
|
||||
main(args).then(_ => console.log("Done!"))
|
3
scripts/postal_code_tools/genPostal.sh
Normal file → Executable file
3
scripts/postal_code_tools/genPostal.sh
Normal file → Executable file
|
@ -1,4 +1,5 @@
|
|||
#! /bin/bash
|
||||
|
||||
npm run generate:layeroverview
|
||||
# npm run generate:layeroverview
|
||||
cd ../..
|
||||
ts-node scripts/generateCache.ts postal_codes 8 /home/pietervdvn/Downloads/postal_codes 49.69606181911566 2.373046875 51.754240074033525 6.459960937499999 --generate-point-overview '*' --force-zoom-level 1
|
Loading…
Add table
Add a link
Reference in a new issue