Update pmtiles extraction script

This commit is contained in:
Pieter Vander Vennet 2025-09-25 14:03:02 +02:00
parent 133fd6594b
commit 1f53e7b817

View file

@ -1,10 +1,10 @@
import Script from "./Script" import Script from "./Script"
import { Tiles } from "../src/Models/TileRange" import { Tiles } from "../src/Models/TileRange"
import { OfflineBasemapManager } from "../src/service-worker/OfflineBasemapManager"
import { spawn } from "child_process" import { spawn } from "child_process"
import { existsSync } from "fs" import { existsSync, mkdirSync, writeFileSync } from "fs"
import { Utils } from "../src/Utils" import { Utils } from "../src/Utils"
import { OfflineBasemapManager } from "../src/Logic/OfflineBasemapManager"
class GeneratePmTilesExtracts extends Script { class GeneratePmTilesExtracts extends Script {
private targetDir: string private targetDir: string
@ -79,6 +79,9 @@ class GeneratePmTilesExtracts extends Script {
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(z + "/" + x)) {
mkdirSync(z + "/" + x)
}
for (const promise of this.generateColumnIfNeeded(z, x, boundary, maxzoom)) { for (const promise of this.generateColumnIfNeeded(z, x, boundary, maxzoom)) {
yield promise yield promise
} }
@ -86,7 +89,7 @@ class GeneratePmTilesExtracts extends Script {
} }
private getFilename(z: number, x: number, y: number) { private getFilename(z: number, x: number, y: number) {
return `${z}-${x}-${y}.pmtiles` return `${z}/${x}/${y}.pmtiles`
} }
private *generateAll(): Generator<Promise<void>> { private *generateAll(): Generator<Promise<void>> {
@ -94,6 +97,9 @@ class GeneratePmTilesExtracts extends Script {
for (const key in zoomlevels) { for (const key in zoomlevels) {
const minzoom: number = Number(key) const minzoom: number = Number(key)
const maxzoom: number | undefined = zoomlevels[key] const maxzoom: number | undefined = zoomlevels[key]
if (!existsSync("" + key)) {
mkdirSync("" + key)
}
for (const promise of this.generateField(minzoom, maxzoom)) { for (const promise of this.generateField(minzoom, maxzoom)) {
yield promise yield promise
} }
@ -125,7 +131,7 @@ class GeneratePmTilesExtracts extends Script {
estimate += boundary * boundary estimate += boundary * boundary
} }
console.log("Target dir is:", this.targetDir) console.log("Target dir is:", this.targetDir)
const numberOfThreads = 512 const numberOfThreads = 24
const generator = this.generateAll() const generator = this.generateAll()
let batch: Promise<void>[] = [] let batch: Promise<void>[] = []
let done = 0 let done = 0
@ -149,6 +155,12 @@ class GeneratePmTilesExtracts extends Script {
)}` )}`
) )
} while (batch.length > 0) } while (batch.length > 0)
writeFileSync("Last_pm_tile_extracts.txt",
[new Date().getTime() + "",
new Date().toISOString(),
"# The script converting the planet-latest.pmtiles into sub-archives has been successfully executed at the stated time",
].join("\n"), "utf-8",
)
} }
} }