Fix bounds and loading with overpass
This commit is contained in:
parent
3157c35c62
commit
178cefceb4
7 changed files with 78 additions and 103 deletions
|
@ -38,8 +38,7 @@ export default class OverpassFeatureSource implements FeatureSource {
|
|||
readonly currentBounds: UIEventSource<BBox>
|
||||
}
|
||||
private readonly _isActive: UIEventSource<boolean>;
|
||||
private readonly onBboxLoaded: (bbox: BBox, date: Date, layers: LayerConfig[]) => void;
|
||||
private readonly padToTiles : number
|
||||
private readonly onBboxLoaded: (bbox: BBox, date: Date, layers: LayerConfig[], zoomlevel: number) => void;
|
||||
constructor(
|
||||
state: {
|
||||
readonly locationControl: UIEventSource<Loc>,
|
||||
|
@ -50,20 +49,19 @@ export default class OverpassFeatureSource implements FeatureSource {
|
|||
readonly currentBounds: UIEventSource<BBox>
|
||||
},
|
||||
options: {
|
||||
padToTiles: number,
|
||||
padToTiles: UIEventSource<number>,
|
||||
isActive?: UIEventSource<boolean>,
|
||||
relationTracker: RelationsTracker,
|
||||
onBboxLoaded?: (bbox: BBox, date: Date, layers: LayerConfig[]) => void
|
||||
onBboxLoaded?: (bbox: BBox, date: Date, layers: LayerConfig[], zoomlevel: number) => void
|
||||
}) {
|
||||
|
||||
this.state = state
|
||||
this._isActive = options.isActive;
|
||||
this.padToTiles = options.padToTiles;
|
||||
this.onBboxLoaded = options.onBboxLoaded
|
||||
this.relationsTracker = options.relationTracker
|
||||
const self = this;
|
||||
state.currentBounds.addCallback(_ => {
|
||||
self.update()
|
||||
self.update(options.padToTiles.data)
|
||||
})
|
||||
|
||||
}
|
||||
|
@ -86,21 +84,21 @@ export default class OverpassFeatureSource implements FeatureSource {
|
|||
return new Overpass(new Or(filters), extraScripts, interpreterUrl, this.state.overpassTimeout, this.relationsTracker);
|
||||
}
|
||||
|
||||
private update() {
|
||||
private update(paddedZoomLevel: number) {
|
||||
if (!this._isActive.data) {
|
||||
return;
|
||||
}
|
||||
const self = this;
|
||||
this.updateAsync().then(bboxDate => {
|
||||
this.updateAsync(paddedZoomLevel).then(bboxDate => {
|
||||
if(bboxDate === undefined || self.onBboxLoaded === undefined){
|
||||
return;
|
||||
}
|
||||
const [bbox, date, layers] = bboxDate
|
||||
self.onBboxLoaded(bbox, date, layers)
|
||||
self.onBboxLoaded(bbox, date, layers, paddedZoomLevel)
|
||||
})
|
||||
}
|
||||
|
||||
private async updateAsync(): Promise<[BBox, Date, LayerConfig[]]> {
|
||||
private async updateAsync(padToZoomLevel: number): Promise<[BBox, Date, LayerConfig[]]> {
|
||||
if (this.runningQuery.data) {
|
||||
console.log("Still running a query, not updating");
|
||||
return undefined;
|
||||
|
@ -111,14 +109,11 @@ export default class OverpassFeatureSource implements FeatureSource {
|
|||
return undefined;
|
||||
}
|
||||
|
||||
const bounds = this.state.currentBounds.data?.pad(this.state.layoutToUse.widenFactor)?.expandToTileBounds(this.padToTiles);
|
||||
const bounds = this.state.currentBounds.data?.pad(this.state.layoutToUse.widenFactor)?.expandToTileBounds(padToZoomLevel);
|
||||
|
||||
if (bounds === undefined) {
|
||||
return undefined;
|
||||
}
|
||||
console.log("Current bounds are", this.state.currentBounds.data," padded with",this.state.layoutToUse.widenFactor+":",
|
||||
this.state.currentBounds.data.pad(this.state.layoutToUse.widenFactor),
|
||||
"Tileexpanded: ",this.state.currentBounds.data?.pad(this.state.layoutToUse.widenFactor)?.expandToTileBounds(this.padToTiles) )
|
||||
const self = this;
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue