forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			50 lines
		
	
	
		
			No EOL
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			No EOL
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
/**
 | 
						|
 * Generates an overview for which tiles exist and which don't
 | 
						|
 */
 | 
						|
import ScriptUtils from "./ScriptUtils";
 | 
						|
import {writeFileSync} from "fs";
 | 
						|
 | 
						|
function main(args: string[]) {
 | 
						|
 | 
						|
    const directory = args[0]
 | 
						|
    let zoomLevel = args[1]
 | 
						|
    const files = ScriptUtils.readDirRecSync(directory, 1)
 | 
						|
        .filter(f => f.endsWith(".geojson"))
 | 
						|
 | 
						|
    const indices /* Map<string, number[]>*/ = {}
 | 
						|
    for (const path of files) {
 | 
						|
 | 
						|
        const match = path.match(".*_\([0-9]*\)_\([0-9]*\)_\([0-9]*\).geojson")
 | 
						|
        if (match === null) {
 | 
						|
            continue
 | 
						|
        }
 | 
						|
        const z = match[1]
 | 
						|
        if (zoomLevel === undefined) {
 | 
						|
            zoomLevel = z
 | 
						|
        } else if (zoomLevel !== z) {
 | 
						|
            throw "Mixed zoomlevels detected"
 | 
						|
        }
 | 
						|
 | 
						|
        const x = match[2]
 | 
						|
        const y = match[3]
 | 
						|
        if (indices[x] === undefined) {
 | 
						|
            indices[x] = []
 | 
						|
        }
 | 
						|
        indices[x].push(Number(y))
 | 
						|
    }
 | 
						|
    indices["zoom"] = zoomLevel;
 | 
						|
    const match = files[0].match("\(.*\)_\([0-9]*\)_\([0-9]*\)_\([0-9]*\).geojson")
 | 
						|
    const path = match[1] + "_" + zoomLevel + "_overview.json"
 | 
						|
    writeFileSync(path, JSON.stringify(indices))
 | 
						|
    console.log("Written overview for", files.length, " tiles at", path)
 | 
						|
}
 | 
						|
 | 
						|
let args = [...process.argv]
 | 
						|
args.splice(0, 2)
 | 
						|
args.forEach(file => {
 | 
						|
    try {
 | 
						|
        main(args)
 | 
						|
    } catch (e) {
 | 
						|
        console.error("Could not handle file ", file, " due to ", e)
 | 
						|
    }
 | 
						|
}) |