forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			47 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
	
		
			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)
 | |
|     }
 | |
| })
 |