mirror of
https://github.com/ConnectedHumber/Air-Quality-Web
synced 2024-12-22 10:25:01 +00:00
[client/heatmap] Dynamically change gradient based on reading type
This commit is contained in:
parent
0b5713c74e
commit
45509725e4
2 changed files with 52 additions and 4 deletions
|
@ -12,23 +12,64 @@ class LayerHeatmap {
|
|||
|
||||
this.overlay_config = {
|
||||
radius: Config.heatmap.blob_radius,
|
||||
minOpacity: 0.25,
|
||||
maxOpacity: 0.8,
|
||||
scaleRadius: true,
|
||||
useLocalExtrema: false,
|
||||
|
||||
latField: "latitude",
|
||||
lngField: "longitude",
|
||||
valueField: "value"
|
||||
valueField: "value",
|
||||
|
||||
gradient: {
|
||||
// 0 to 35 low (green), 36 to 53 moderate (amber) 54 to 70 high (red) and above 71 (purple)
|
||||
0.233: "green",
|
||||
0.593: "orange",
|
||||
0.827: "red",
|
||||
1: "purple"
|
||||
}
|
||||
};
|
||||
this.layer = new HeatmapOverlay(this.overlay_config);
|
||||
this.map.addLayer(this.layer);
|
||||
|
||||
// Custom configuration directives to apply based on the reading type displayed.
|
||||
this.reading_type_configs = {
|
||||
"PM25": {
|
||||
// 0 to 35 low (green), 36 to 53 moderate (amber) 54 to 70 high (red) and above 71 (purple)
|
||||
max: 75,
|
||||
gradient: {
|
||||
0.233: "green",
|
||||
0.593: "orange",
|
||||
0.827: "red",
|
||||
1: "purple"
|
||||
}
|
||||
},
|
||||
"PM10": {
|
||||
// 0 to 50 low (green) 51 to75 moderate (amber) 76 to 100 high (red) and more than 100 very high (purple)
|
||||
max: 100,
|
||||
gradient: {
|
||||
0.45: "green",
|
||||
0.573: "orange",
|
||||
0.8: "red",
|
||||
1: "purple"
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
set_data(readings_list) {
|
||||
let data_object = {
|
||||
max: readings_list.reduce((prev, next) => next.value > prev ? next.value : prev, 0),
|
||||
max: 0,
|
||||
data: readings_list
|
||||
}
|
||||
};
|
||||
|
||||
if(typeof this.reading_type_configs[this.reading_type] != "undefined")
|
||||
data_object.max = this.reading_type_configs[this.reading_type].max;
|
||||
else
|
||||
data_object.max = readings_list.reduce((prev, next) => next.value > prev ? next.value : prev, 0);
|
||||
|
||||
console.log("[map/heatmap] Displaying", data_object);
|
||||
|
||||
this.layer.setData(data_object);
|
||||
}
|
||||
|
||||
|
@ -43,6 +84,13 @@ class LayerHeatmap {
|
|||
|
||||
console.log("[map/heatmap] Updating values to", this.reading_type, "@", this.datetime);
|
||||
|
||||
if(typeof this.reading_type_configs[this.reading_type] != "undefined") {
|
||||
this.overlay_config.gradient = this.reading_type_configs[this.reading_type].gradient;
|
||||
}
|
||||
else {
|
||||
delete this.overlay_config.gradient;
|
||||
}
|
||||
|
||||
this.set_data(JSON.parse(await GetFromUrl(
|
||||
`${Config.api_root}?action=fetch-data&datetime=${encodeURIComponent(this.datetime.toISOString())}&reading_type=${encodeURIComponent(this.reading_type)}`
|
||||
)));
|
||||
|
|
|
@ -60,7 +60,7 @@ class Map {
|
|||
// TODO: Use leaflet-timedimension here
|
||||
// TODO: Allow configuration of the different reading types here
|
||||
|
||||
this.heatmap.update_data(new Date(), "PM25");
|
||||
this.heatmap.update_data(new Date(new Date-10*60), "PM25");
|
||||
}
|
||||
|
||||
setup_layer_control() {
|
||||
|
|
Loading…
Reference in a new issue