Fix tile generation, don't generate files from 100GB anymore

This commit is contained in:
Pieter Vander Vennet 2025-10-15 16:44:42 +02:00
parent ce435765f2
commit 7d420b0765
5 changed files with 20 additions and 7 deletions

@ -1 +1 @@
Subproject commit dc3f3f5ac3d4d42bed7aeb58ff5386a063dbac06 Subproject commit 472b6da88e038d34e2915ebd36350376acf0c58c

View file

@ -46,12 +46,17 @@ export class PmTilesExtractGenerator {
return `${this._targetDir}/${z}/${x}/${y}.pmtiles` return `${this._targetDir}/${z}/${x}/${y}.pmtiles`
} }
async generateArchive(z: number, x: number, y: number, maxzoom?: number): Promise<string> { async generateArchive(z: number, x: number, y: number, maxzoom: number): Promise<string> {
const [[max_lat, min_lon], [min_lat, max_lon]] = Tiles.tile_bounds(z, x, y) const [[max_lat, min_lon], [min_lat, max_lon]] = Tiles.tile_bounds(z, x, y)
let maxzoomflag = "" let maxzoomflag = ""
if (maxzoom !== undefined) { if (maxzoom !== undefined) {
maxzoomflag = " --maxzoom=" + maxzoom maxzoomflag = " --maxzoom=" + maxzoom
} }
if(!maxzoom && z < 15){
throw "No maxzoom for a pretty low zoom detected. This will result in a big archive"
}
const outputFileName = this.getFilename(z, x, y) const outputFileName = this.getFilename(z, x, y)
await this.startProcess( await this.startProcess(
`extract ${ `extract ${

View file

@ -66,7 +66,8 @@ class ServerPmTileExtracts extends Script {
ScriptUtils.createParentDir(targetFile) ScriptUtils.createParentDir(targetFile)
console.log("Creating", targetFile) console.log("Creating", targetFile)
const start = new Date() const start = new Date()
await generator.generateArchive(z, x, y) const maxzoom = OfflineBasemapManager.zoomelevels[z]
await generator.generateArchive(z, x, y, maxzoom)
const stop = new Date() const stop = new Date()
console.log( console.log(
"Creating ", "Creating ",
@ -82,7 +83,11 @@ class ServerPmTileExtracts extends Script {
if (req.destroyed) { if (req.destroyed) {
return null return null
} }
res.writeHead(200, { "Content-Type": "application/octet-stream" }) const stats = statSync(targetFile)
res.writeHead(200, { "Content-Type": "application/octet-stream" ,
"Content-Length": stats.size
})
Server.sendFile(targetFile, res) Server.sendFile(targetFile, res)
return null return null

View file

@ -73,7 +73,6 @@ export class OfflineForegroundDataManager {
} }
this._bboxesForOffline.data.push(data) this._bboxesForOffline.data.push(data)
this._bboxesForOffline.update(offl => OfflineForegroundDataManager.clean(offl)) this._bboxesForOffline.update(offl => OfflineForegroundDataManager.clean(offl))
// this._bboxesForOffline.update(data => OfflineForegroundDataManager.clean(data))
this._isUpdating.set(true) this._isUpdating.set(true)
await this.updateSingleBbox(data) await this.updateSingleBbox(data)
this._isUpdating.set(false) this._isUpdating.set(false)
@ -100,7 +99,6 @@ export class OfflineForegroundDataManager {
// As 'offlBbox' is included in the _bboxForOffline, pinging it will update downstream UI elements // As 'offlBbox' is included in the _bboxForOffline, pinging it will update downstream UI elements
console.log(">>> Updating bbox preping", offlBbox, this._bboxesForOffline.data.indexOf(offlBbox)) console.log(">>> Updating bbox preping", offlBbox, this._bboxesForOffline.data.indexOf(offlBbox))
this._bboxesForOffline.ping() this._bboxesForOffline.ping()
console.log(">>> Updating bbox", offlBbox, this._bboxesForOffline.data.indexOf(offlBbox))
try { try {
await OfflineBasemapManager.singleton.installBbox(bbox) await OfflineBasemapManager.singleton.installBbox(bbox)
console.log(">>> BBox update started") console.log(">>> BBox update started")
@ -117,6 +115,11 @@ export class OfflineForegroundDataManager {
console.log(">>> bboxes for offline are now:", this._bboxesForOffline.data) console.log(">>> bboxes for offline are now:", this._bboxesForOffline.data)
} }
/**
* Merges fully contained bboxes into the bigger bbox
* @param bboxes
* @private
*/
private static clean(bboxes: OfflineBbox[]): OfflineBbox[] { private static clean(bboxes: OfflineBbox[]): OfflineBbox[] {
const validated = bboxes.filter(bbox => { const validated = bboxes.filter(bbox => {
try { try {

View file

@ -145,7 +145,7 @@ export default class OverpassFeatureSource<T extends OsmFeature = OsmFeature>
} catch (e) { } catch (e) {
this.retries.update(i => i + 1) this.retries.update(i => i + 1)
console.error(`QUERY FAILED (attempt ${this.retries.data}, will retry: ${this._isActive.data}) due to`, e) console.error(`QUERY FAILED (attempt ${this.retries.data}, will retry: ${this._isActive.data}) due to`, e)
if(options.noRetries){ if(options?.noRetries){
throw e throw e
} }
await Utils.waitFor(1000) await Utils.waitFor(1000)