forked from MapComplete/MapComplete
		
	Scripts(offline): skip already existing columns
This commit is contained in:
		
							parent
							
								
									7cd31b204d
								
							
						
					
					
						commit
						a23b829e44
					
				
					 1 changed files with 19 additions and 2 deletions
				
			
		| 
						 | 
					@ -3,6 +3,7 @@ import { Tiles } from "../src/Models/TileRange"
 | 
				
			||||||
import { OfflineBasemapManager } from "../src/service-worker/OfflineBasemapManager"
 | 
					import { OfflineBasemapManager } from "../src/service-worker/OfflineBasemapManager"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { spawn } from "child_process"
 | 
					import { spawn } from "child_process"
 | 
				
			||||||
 | 
					import { existsSync } from "fs"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class GeneratePmTilesExtracts extends Script {
 | 
					class GeneratePmTilesExtracts extends Script {
 | 
				
			||||||
| 
						 | 
					@ -33,18 +34,27 @@ class GeneratePmTilesExtracts extends Script {
 | 
				
			||||||
        if(maxzoom !== undefined){
 | 
					        if(maxzoom !== undefined){
 | 
				
			||||||
            maxzoomflag = " --maxzoom="+maxzoom
 | 
					            maxzoomflag = " --maxzoom="+maxzoom
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return this.startProcess(`extract planet-latest.pmtiles --download-threads=1 --minzoom=${z}${maxzoomflag} --bbox=${[min_lon, min_lat + 0.0001, max_lon, max_lat].join(",")} ${z}-${x}-${y}.pmtiles`)
 | 
					        return this.startProcess(`extract planet-latest.pmtiles --download-threads=1 --minzoom=${z}${maxzoomflag} --bbox=${[min_lon, min_lat + 0.0001, max_lon, max_lat].join(",")} ${this.getFilename(z, x, y)}`)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private* generateField(z: number, maxzoom?: number): Generator<Promise<void>> {
 | 
					    private* generateField(z: number, maxzoom?: number): Generator<Promise<void>> {
 | 
				
			||||||
        const boundary = 2 << (z - 1)
 | 
					        const boundary = 2 << (z - 1)
 | 
				
			||||||
        for (let x = 0; x < boundary; x++) {
 | 
					        for (let x = 0; x < boundary; x++) {
 | 
				
			||||||
 | 
					            if (existsSync(this.getFilename(z, x, boundary))) {
 | 
				
			||||||
 | 
					                // Skip this column, already exists
 | 
				
			||||||
 | 
					                console.log("Skipping column ", x, "at zoom", z)
 | 
				
			||||||
 | 
					                continue
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            for (let y = 0; y < boundary; y++) {
 | 
					            for (let y = 0; y < boundary; y++) {
 | 
				
			||||||
                yield this.generateArchive(z, x, y, maxzoom)
 | 
					                yield this.generateArchive(z, x, y, maxzoom)
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private getFilename(z: number, x: number, y: number) {
 | 
				
			||||||
 | 
					        return `${z}-${x}-${y}.pmitles`
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private* generateAll(): Generator<Promise<void>> {
 | 
					    private* generateAll(): Generator<Promise<void>> {
 | 
				
			||||||
        const zoomlevels: Record<number, number> = OfflineBasemapManager.zoomelevels
 | 
					        const zoomlevels: Record<number, number> = OfflineBasemapManager.zoomelevels
 | 
				
			||||||
        for (const key in zoomlevels) {
 | 
					        for (const key in zoomlevels) {
 | 
				
			||||||
| 
						 | 
					@ -74,6 +84,12 @@ class GeneratePmTilesExtracts extends Script {
 | 
				
			||||||
            console.log("Please specify a target directory")
 | 
					            console.log("Please specify a target directory")
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        let estimate = 0
 | 
				
			||||||
 | 
					        for (const key in OfflineBasemapManager.zoomelevels) {
 | 
				
			||||||
 | 
					            const z: number = Number(key)
 | 
				
			||||||
 | 
					            const boundary = 2 << (z - 1)
 | 
				
			||||||
 | 
					            estimate += boundary * boundary
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        console.log("Target dir is:", this.targetDir)
 | 
					        console.log("Target dir is:", this.targetDir)
 | 
				
			||||||
        const numberOfThreads = 512
 | 
					        const numberOfThreads = 512
 | 
				
			||||||
        const generator = this.generateAll()
 | 
					        const generator = this.generateAll()
 | 
				
			||||||
| 
						 | 
					@ -83,7 +99,8 @@ class GeneratePmTilesExtracts extends Script {
 | 
				
			||||||
            batch = this.createBatch(generator, numberOfThreads)
 | 
					            batch = this.createBatch(generator, numberOfThreads)
 | 
				
			||||||
            await Promise.all(batch)
 | 
					            await Promise.all(batch)
 | 
				
			||||||
            done += batch.length
 | 
					            done += batch.length
 | 
				
			||||||
            console.log("Completed", numberOfThreads, "processes; finished: " + done)
 | 
					            const perc = ("" + ((done / estimate) / 100)).substring(0, 5)
 | 
				
			||||||
 | 
					            console.log("Completed", numberOfThreads, `processes;  ${done} / ${estimate}, ${perc}%`)
 | 
				
			||||||
        } while (batch.length > 0)
 | 
					        } while (batch.length > 0)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue