"use script" // 开发环境建议开启严格模式
|
|
const url = "https://api.waqi.info/mapq/bounds/?bounds={RECTANGLE}&inc=placeholders&k={KEY}&_={DATA}"
|
const table = [
|
{
|
level: "一级(优)",
|
influence: "空气质量令人满意,基本无空气污染",
|
suggestion: "各类人群可正常活动"
|
},
|
{
|
level: "二级(良)",
|
influence: "空气质量可接受,但某些污染物可能对极少数异常敏感人群健康有较弱影响",
|
suggestion: "心脏病和肺病患者症状显著加剧,运动耐受力降低,健康人群普遍出现症状"
|
},
|
{
|
level: "三级(轻度污染)",
|
influence: "易感人群症状有轻度加剧,健康人群出现刺激症状",
|
suggestion: "儿童、老年人及心脏病、呼吸系统疾病患者应减少长时间、高强度的户外锻炼"
|
},
|
{
|
level: "四级(中度污染)",
|
influence: "易感人群症状有轻度加剧,健康人群出现刺激症状",
|
suggestion: "儿童、老年人及心脏病、呼吸系统疾病患者避免长时间、高强度的户外锻炼,一般人群适量减少户外运动"
|
},
|
{
|
level: "五级(重度污染)",
|
influence: "心脏病和肺病患者症状显著加剧,运动耐受力降低,健康人群普遍出现症状",
|
suggestion: "儿童、老年人及心脏病、肺病患者应停留在室内,停止户外运动,一般人群减少户外运动"
|
},
|
{
|
level: "六级(严重污染)",
|
influence: "心脏病和肺病患者症状显著加剧,运动耐受力降低,健康人群普遍出现症状",
|
suggestion: "儿童、老年人和病人应停留在室内,避免体力消耗,一般人群避免户外活动"
|
}
|
]
|
|
let xmlHttpRequest
|
const nWidth = 500
|
let currTime
|
|
onmessage = function (e) {
|
const bounds = e.data.bounds
|
currTime = new Date().getTime()
|
|
const strKey = jskey()
|
const 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) {
|
const entityTable = []
|
/// /////////////////////////////////////////////////
|
const currentData = JSON.parse(xmlHttpRequest.responseText)
|
for (let i = currentData.length - 1; i >= 0; i--) {
|
const item = currentData[i]
|
let aqi = parseInt(item.aqi)
|
if (!isNumber(aqi)) {
|
continue
|
}
|
|
let 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
|
}
|
}
|
|
const 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 () {
|
let u = ""
|
decodeURIComponent("%603Z3F%7BWS%3A3BSBdIRlJTySXYnmecFR%2CF%7BeSGHhkMh%3E%3E")
|
.split("")
|
.forEach(function (c) {
|
u += String.fromCharCode(c.charCodeAt(0) - 1)
|
})
|
return u
|
})()
|
}
|