| 
									
										
										
										
											2021-12-12 17:15:31 +01:00
										 |  |  | /** | 
					
						
							|  |  |  |  * 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] | 
					
						
							| 
									
										
										
										
											2021-12-13 02:05:34 +01:00
										 |  |  |         if(indices[x] === undefined){ | 
					
						
							| 
									
										
										
										
											2021-12-12 17:15:31 +01:00
										 |  |  |             indices[x] = [] | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-12-13 02:05:34 +01:00
										 |  |  |         indices[x].push(Number(y)) | 
					
						
							| 
									
										
										
										
											2021-12-12 17:15:31 +01:00
										 |  |  |     } | 
					
						
							|  |  |  |     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) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | }) |