commit
7486dcddde
@ -0,0 +1,86 @@ |
||||
"use strict"; |
||||
|
||||
class LayerHeatmapGlue { |
||||
constructor(time_dimension, heatmap) { |
||||
this.time_dimension = time_dimension; |
||||
|
||||
this.heatmap = heatmap; |
||||
|
||||
this.glue_layer_const = L.TimeDimension.Layer.extend({ |
||||
isReady: this.isReady, |
||||
}); |
||||
|
||||
this.cache = {}; |
||||
} |
||||
|
||||
attachTo(map) { |
||||
this.layer_glue = new this.glue_layer_const({ |
||||
timeDimension: this.time_dimension |
||||
}).addTo(map); |
||||
this.time_dimension.on("timeload", this.update.bind(this)); |
||||
this.time_dimension.on("timeloading", this.onNewTime.bind(this)); |
||||
// this.time_dimension.registerSyncedLayer(this.layer_glue);
|
||||
} |
||||
|
||||
async onNewTime(event) { |
||||
console.log("on-new-time", arguments); |
||||
// event.time here is a number - TODO: Figure out how to keep it as a date
|
||||
|
||||
if(typeof this.cache[event.time] == "undefined") { |
||||
await this.loadTime(new Date(event.time)); |
||||
} |
||||
|
||||
this.fireLoadComplete(event.time); |
||||
} |
||||
|
||||
/** |
||||
* Loads data into the cache for the specified datetime. |
||||
* @param {Date} time The datetime to load data in for. |
||||
* @return {[type]} [description] |
||||
*/ |
||||
async loadTime(time) { |
||||
await this.heatmap.fetch_data( |
||||
time, |
||||
this.heatmap.reading_type |
||||
); |
||||
} |
||||
|
||||
/** |
||||
* Fires the loadComplete event to leaflet-timedimension know we're done loading. |
||||
* @param {Number} time The timestamp to fire the timeload event for. |
||||
*/ |
||||
fireLoadComplete(time) { |
||||
this.layer_glue.fire("timeload", { |
||||
time: time |
||||
}); |
||||
} |
||||
|
||||
/** |
||||
* Tells leaflet-timedimension if we're ready for a given time. |
||||
* @param {object} event The event object |
||||
* @return {Boolean} Whether we're ready or not |
||||
*/ |
||||
isReady(event) { |
||||
// BUG: This will go awry if the user changes the reading type on the fly
|
||||
// console.log("is-ready", arguments);
|
||||
return this.heatmap.is_data_cached( |
||||
new Date(event.time), |
||||
this.heatmap.reading_type |
||||
); |
||||
} |
||||
|
||||
/** |
||||
* Passes an update to the heatmap manager |
||||
* @param {[type]} event [description] |
||||
* @return {[type]} [description] |
||||
*/ |
||||
async update(event) { |
||||
//console.log("update", arguments);
|
||||
await this.heatmap.update_data( |
||||
new Date(event.time), |
||||
this.heatmap.reading_type |
||||
); |
||||
} |
||||
} |
||||
|
||||
export default LayerHeatmapGlue; |
Loading…
Reference in new issue