mirror of
https://github.com/gpxstudio/gpx.studio.git
synced 2025-09-02 00:32:33 +00:00
make overpass data expire after one week
This commit is contained in:
@@ -32,6 +32,7 @@ export class OverpassLayer {
|
|||||||
overpassUrl = 'https://overpass.private.coffee/api/interpreter';
|
overpassUrl = 'https://overpass.private.coffee/api/interpreter';
|
||||||
minZoom = 12;
|
minZoom = 12;
|
||||||
queryZoom = 12;
|
queryZoom = 12;
|
||||||
|
expirationTime = 7 * 24 * 3600 * 1000;
|
||||||
map: mapboxgl.Map;
|
map: mapboxgl.Map;
|
||||||
|
|
||||||
currentQueries: Set<string> = new Set();
|
currentQueries: Set<string> = new Set();
|
||||||
@@ -150,6 +151,7 @@ export class OverpassLayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let tileLimits = mercator.xyz(bbox, this.queryZoom);
|
let tileLimits = mercator.xyz(bbox, this.queryZoom);
|
||||||
|
let time = Date.now();
|
||||||
|
|
||||||
for (let x = tileLimits.minX; x <= tileLimits.maxX; x++) {
|
for (let x = tileLimits.minX; x <= tileLimits.maxX; x++) {
|
||||||
for (let y = tileLimits.minY; y <= tileLimits.maxY; y++) {
|
for (let y = tileLimits.minY; y <= tileLimits.maxY; y++) {
|
||||||
@@ -157,8 +159,8 @@ export class OverpassLayer {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
db.overpassquerytiles.where('[x+y]').equals([x, y]).toArray().then((querytiles) => {
|
db.overpasstiles.where('[x+y]').equals([x, y]).toArray().then((querytiles) => {
|
||||||
let missingQueries = queries.filter((query) => !querytiles.some((querytile) => querytile.query === query));
|
let missingQueries = queries.filter((query) => !querytiles.some((querytile) => querytile.query === query && time - querytile.time < this.expirationTime));
|
||||||
if (missingQueries.length > 0) {
|
if (missingQueries.length > 0) {
|
||||||
this.queryTile(x, y, missingQueries);
|
this.queryTile(x, y, missingQueries);
|
||||||
}
|
}
|
||||||
@@ -188,7 +190,8 @@ export class OverpassLayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
storeOverpassData(x: number, y: number, queries: string[], data: any) {
|
storeOverpassData(x: number, y: number, queries: string[], data: any) {
|
||||||
let queryTiles = queries.map((query) => ({ x, y, query }));
|
let time = Date.now();
|
||||||
|
let queryTiles = queries.map((query) => ({ x, y, query, time }));
|
||||||
let pois: { query: string, id: number, poi: GeoJSON.Feature }[] = [];
|
let pois: { query: string, id: number, poi: GeoJSON.Feature }[] = [];
|
||||||
|
|
||||||
if (data.elements === undefined) {
|
if (data.elements === undefined) {
|
||||||
@@ -221,8 +224,8 @@ export class OverpassLayer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
db.transaction('rw', db.overpassquerytiles, db.overpassdata, async () => {
|
db.transaction('rw', db.overpasstiles, db.overpassdata, async () => {
|
||||||
await db.overpassquerytiles.bulkPut(queryTiles);
|
await db.overpasstiles.bulkPut(queryTiles);
|
||||||
await db.overpassdata.bulkPut(pois);
|
await db.overpassdata.bulkPut(pois);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -21,7 +21,7 @@ class Database extends Dexie {
|
|||||||
files!: Dexie.Table<GPXFile, string>;
|
files!: Dexie.Table<GPXFile, string>;
|
||||||
patches!: Dexie.Table<{ patch: Patch[], inversePatch: Patch[], index: number }, number>;
|
patches!: Dexie.Table<{ patch: Patch[], inversePatch: Patch[], index: number }, number>;
|
||||||
settings!: Dexie.Table<any, string>;
|
settings!: Dexie.Table<any, string>;
|
||||||
overpassquerytiles!: Dexie.Table<{ query: string, x: number, y: number }, [string, number, number]>;
|
overpasstiles!: Dexie.Table<{ query: string, x: number, y: number, time: number }, [string, number, number]>;
|
||||||
overpassdata!: Dexie.Table<{ query: string, id: number, poi: GeoJSON.Feature }, [string, number]>;
|
overpassdata!: Dexie.Table<{ query: string, id: number, poi: GeoJSON.Feature }, [string, number]>;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
@@ -33,7 +33,7 @@ class Database extends Dexie {
|
|||||||
files: '',
|
files: '',
|
||||||
patches: ',patch',
|
patches: ',patch',
|
||||||
settings: '',
|
settings: '',
|
||||||
overpassquerytiles: '[query+x+y],[x+y]',
|
overpasstiles: '[query+x+y],[x+y]',
|
||||||
overpassdata: '[query+id]',
|
overpassdata: '[query+id]',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user