From 9c1a8467a8ef24542e3edce594da4b5dfa310120 Mon Sep 17 00:00:00 2001 From: Janne Alatalo <janne.alatalo@jamk.fi> Date: Wed, 26 Sep 2018 10:06:20 +0300 Subject: [PATCH] Change data coloring to use the free flow speed --- src/utils/lam-station.js | 57 +++++++++++++++++++++++++++++++++++----- 1 file changed, 50 insertions(+), 7 deletions(-) diff --git a/src/utils/lam-station.js b/src/utils/lam-station.js index 948173c..5a691ee 100644 --- a/src/utils/lam-station.js +++ b/src/utils/lam-station.js @@ -7,11 +7,21 @@ class LamStation { this.coordinates = coordinates; this.avg_speed_dir1 = avg_speed_dir1; this.avg_speed_dir2 = avg_speed_dir2; - this.traffic_vol_dir1 = 0; - this.traffic_vol_dir2 = 0; + this.free_flow_speed_dir1 = null; + this.free_flow_speed_dir2 = null; + this.traffic_vol_dir1 = null; + this.traffic_vol_dir2 = null; this.rainbow = new Rainbow(); - this.rainbow.setSpectrum("red", "green"); - this.rainbow.setNumberRange(0, 130); + this.rainbow.setSpectrum("orange", "yellow", "green"); + this.rainbow.setNumberRange(0.0, 1.0); + } + + set_free_flow_speed_dir1(free_flow_speed) { + this.free_flow_speed_dir2 = free_flow_speed; + } + + set_free_flow_speed_dir2(free_flow_speed) { + this.free_flow_speed_dir1 = free_flow_speed; } set_avg_speed_dir1(avg_speed) { @@ -39,10 +49,22 @@ class LamStation { } get_color() { - if (this.get_avg_speed() === 0) { - return [211, 211, 211]; + const grey = [211, 211, 211]; + const free_flow1 = this.get_free_flow_speed_dir1(); + const free_flow2 = this.get_free_flow_speed_dir2(); + const avg_speed1 = this.get_avg_speed_dir1(); + const avg_speed2 = this.get_avg_speed_dir2(); + if (avg_speed1 === null || avg_speed2 === null) { + return grey; + } else if (free_flow1 === null || free_flow2 === null) { + return grey; + } else if (Math.min(avg_speed1, avg_speed2) === 0) { + return grey; } - let hex = this.rainbow.colorAt(this.get_avg_speed()); + const ratio1 = free_flow1 / avg_speed1; + const ratio2 = free_flow2 / avg_speed2; + const min_ratio = Math.min(ratio1, ratio2); + let hex = this.rainbow.colorAt(min_ratio); let bigint = parseInt(hex, 16); let r = (bigint >> 16) & 255; let g = (bigint >> 8) & 255; @@ -51,6 +73,11 @@ class LamStation { } get_avg_speed() { + const avg_speed1 = this.get_avg_speed_dir1(); + const avg_speed2 = this.get_avg_speed_dir2(); + if (avg_speed1 === null || avg_speed2 === null) { + return 0; + } return (this.avg_speed_dir1 + this.avg_speed_dir1) / 2; } @@ -58,6 +85,22 @@ class LamStation { return (this.traffic_vol_dir1 + this.traffic_vol_dir2) / 2; } + get_free_flow_speed_dir1() { + return this.free_flow_speed_dir1; + } + + get_free_flow_speed_dir2() { + return this.free_flow_speed_dir2; + } + + get_avg_speed_dir1() { + return this.avg_speed_dir1; + } + + get_avg_speed_dir2() { + return this.avg_speed_dir2; + } + } export default LamStation; -- GitLab