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