forked from MapComplete/MapComplete
		
	
		
			
	
	
		
			64 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			64 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | import Script from "../Script" | ||
|  | import { readFileSync, writeFileSync } from "fs" | ||
|  | import { OsmId } from "../../src/Models/OsmFeature" | ||
|  | import { Utils } from "../../src/Utils" | ||
|  | 
 | ||
|  | interface DiffItem { | ||
|  |     /** | ||
|  |      * Velopark-id | ||
|  |      */ | ||
|  |     "ref": string, | ||
|  |     "osmid": OsmId, | ||
|  |     "distance": number, | ||
|  |     "diffs": { | ||
|  |         key: string, | ||
|  |         /** | ||
|  |          * The value in OpenStreetMap | ||
|  |          * Might be undefined if OSM doesn't have an appropriate value | ||
|  |          */ | ||
|  |         osm?: string, | ||
|  |         velopark: string | number } [] | ||
|  | } | ||
|  | 
 | ||
|  | export class DiffToCsv extends Script { | ||
|  |     constructor() { | ||
|  |         super("Converts a 'report.diff' to a CSV file for people who prefer LibreOffice Calc (or other Spreadsheet Software)") | ||
|  |     } | ||
|  | 
 | ||
|  |     async main(args: string[]): Promise<void> { | ||
|  |         const file = args[0] ?? "report_diff.json" | ||
|  |         const json = <{diffs:DiffItem[], distanceBinds: number[]}> JSON.parse(readFileSync(file, "utf8")) | ||
|  |         const diffs = json.diffs | ||
|  |         const allKeys = Utils.Dedup(diffs.flatMap(item => item.diffs.map(d => d.key))) | ||
|  |         allKeys.sort() | ||
|  | 
 | ||
|  |         const header = ["osm_id","velopark_id", "distance",...allKeys.flatMap(k => ["osm:"+k, "velopark:"+k])] | ||
|  |         const lines = [header] | ||
|  |         for (const diffItem of diffs) { | ||
|  |             const line = [] | ||
|  |             lines.push(line) | ||
|  |             line.push(diffItem.osmid) | ||
|  |             line.push(diffItem.ref) | ||
|  |             line.push(diffItem.distance) | ||
|  | 
 | ||
|  |             const d = diffItem.diffs | ||
|  |             for (const k of allKeys) { | ||
|  |                 const found = d.find(i => i.key === k) | ||
|  |                 if(!found){ | ||
|  |                     line.push("","") | ||
|  |                     continue | ||
|  |                 } | ||
|  |                 line.push(found.osm, found.velopark) | ||
|  |             } | ||
|  | 
 | ||
|  |         } | ||
|  |         const path = "report_diff.csv" | ||
|  |         writeFileSync(path, | ||
|  |             lines.map(l => l.join(",")).join("\n") | ||
|  |             ,"utf8") | ||
|  |         console.log("Written", path) | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | new DiffToCsv().run() |