master
2022-03-25 c0f7b99859c8b958a3d1210a046b57dd1b89e411
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
"use script"; //开发环境建议开启严格模式
 
var url = "https://api.waqi.info/mapq/bounds/?bounds={RECTANGLE}&inc=placeholders&k={KEY}&_={DATA}";
var table = [
  { level: "一级(优)", influence: "空气质量令人满意,基本无空气污染", suggestion: "    各类人群可正常活动" },
  {
    level: "二级(良)",
    influence: "空气质量可接受,但某些污染物可能对极少数异常敏感人群健康有较弱影响",
    suggestion: "心脏病和肺病患者症状显著加剧,运动耐受力降低,健康人群普遍出现症状",
  },
  {
    level: "三级(轻度污染)",
    influence: "易感人群症状有轻度加剧,健康人群出现刺激症状",
    suggestion: "儿童、老年人及心脏病、呼吸系统疾病患者应减少长时间、高强度的户外锻炼",
  },
  {
    level: "四级(中度污染)",
    influence: "易感人群症状有轻度加剧,健康人群出现刺激症状",
    suggestion: "儿童、老年人及心脏病、呼吸系统疾病患者避免长时间、高强度的户外锻炼,一般人群适量减少户外运动",
  },
  {
    level: "五级(重度污染)",
    influence: "心脏病和肺病患者症状显著加剧,运动耐受力降低,健康人群普遍出现症状",
    suggestion: "儿童、老年人及心脏病、肺病患者应停留在室内,停止户外运动,一般人群减少户外运动",
  },
  {
    level: "六级(严重污染)",
    influence: "心脏病和肺病患者症状显著加剧,运动耐受力降低,健康人群普遍出现症状",
    suggestion: "儿童、老年人和病人应停留在室内,避免体力消耗,一般人群避免户外活动",
  },
];
 
var xmlHttpRequest;
var nWidth = 500;
var currTime;
 
onmessage = function (e) {
  let bounds = e.data.bounds;
  currTime = new Date().getTime();
 
  var strKey = jskey();
  var nowUrl = url.replace("{RECTANGLE}", bounds).replace("{KEY}", strKey).replace("{DATA}", currTime);
 
  xmlHttpRequest = new XMLHttpRequest();
 
  //2.设置回调函数
  xmlHttpRequest.onreadystatechange = callback;
 
  //3.初始化XMLHttpRequest组建
  xmlHttpRequest.open("POST", nowUrl, true);
 
  //4.发送请求
  xmlHttpRequest.send();
};
 
function callback() {
  if (xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200) {
    var entityTable = [];
    ////////////////////////////////////////////////////
    var currentData = JSON.parse(xmlHttpRequest.responseText);
    for (var i = currentData.length - 1; i >= 0; i--) {
      var item = currentData[i];
      var aqi = parseInt(item.aqi);
      if (!isNumber(aqi)) {
        continue;
      }
 
      var level = 0;
      if (aqi > nWidth) {
        level = 5;
        aqi = nWidth - 1;
      } else {
        if (aqi > 300) {
          level = 5;
        } else if (aqi > 200) {
          level = 4;
        } else if (aqi > 150) {
          level = 3;
        } else if (aqi > 100) {
          level = 2;
        } else if (aqi > 50) {
          level = 1;
        }
      }
 
      var newItem = {
        ...item,
        aqi: aqi,
        level: table[level].level,
        influence: table[level].influence,
        suggestion: table[level].suggestion,
      };
      entityTable.push(newItem);
    }
    //////////////////////////////////////////////////////
    //self代表子线程自身
    self.postMessage({ currTime: currTime, entityTable: entityTable });
    self.close();
  } else if (xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 0) {
    self.postMessage({ currTime: currTime, entityTable: [] });
    self.close();
  }
}
 
function isNumber(obj) {
  return typeof obj === "number" && !isNaN(obj);
}
 
function jskey() {
  return (function () {
    var u = "";
    decodeURIComponent("%603Z3F%7BWS%3A3BSBdIRlJTySXYnmecFR%2CF%7BeSGHhkMh%3E%3E")
      .split("")
      .forEach(function (c) {
        u += String.fromCharCode(c.charCodeAt(0) - 1);
      });
    return u;
  })();
}