134 lines
4.9 KiB
JavaScript
134 lines
4.9 KiB
JavaScript
|
/**
|
|||
|
* https://github.com/pasu/ExamplesforCesium
|
|||
|
* get pm index from waqi data
|
|||
|
*/
|
|||
|
function isNumber(obj) {
|
|||
|
return typeof obj === 'number' && !isNaN(obj)
|
|||
|
}
|
|||
|
function jskeyOld() {
|
|||
|
return (function() {
|
|||
|
var u = "";
|
|||
|
decodeURIComponent("%603Z3F%7BWS%3AnNyBdITtKTySXYnmecFV0MUeSGoh%5BMh%3E%3E").split('').forEach(function(c) {
|
|||
|
u += String.fromCharCode(c.charCodeAt(0) - 1);
|
|||
|
});
|
|||
|
return u;
|
|||
|
})()
|
|||
|
}
|
|||
|
|
|||
|
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;
|
|||
|
})()
|
|||
|
}
|
|||
|
|
|||
|
//var url = "https://wind.waqi.info/mapq/bounds/?bounds={RECTANGLE}&inc=placeholders&k={KEY}&_={DATA}";
|
|||
|
var url = "https://api.waqi.info/mapq/bounds/?bounds={RECTANGLE}&inc=placeholders&k={KEY}&_={DATA}";
|
|||
|
var strKey = jskey();
|
|||
|
|
|||
|
var table = [{ level:"一级(优)",influence:"空气质量令人满意,基本无空气污染",suggestion:" 各类人群可正常活动"},
|
|||
|
{ level:"二级(良)",influence:"空气质量可接受,但某些污染物可能对极少数异常敏感人群健康有较弱影响",suggestion:"心脏病和肺病患者症状显著加剧,运动耐受力降低,健康人群普遍出现症状"},
|
|||
|
{ level:"三级(轻度污染)",influence:"易感人群症状有轻度加剧,健康人群出现刺激症状",suggestion:"儿童、老年人及心脏病、呼吸系统疾病患者应减少长时间、高强度的户外锻炼"},
|
|||
|
{ level:"四级(中度污染)",influence:"易感人群症状有轻度加剧,健康人群出现刺激症状",suggestion:"儿童、老年人及心脏病、呼吸系统疾病患者避免长时间、高强度的户外锻炼,一般人群适量减少户外运动"},
|
|||
|
{ level:"五级(重度污染)",influence:"心脏病和肺病患者症状显著加剧,运动耐受力降低,健康人群普遍出现症状",suggestion:"儿童、老年人及心脏病、肺病患者应停留在室内,停止户外运动,一般人群减少户外运动"},
|
|||
|
{ level:"六级(严重污染)",influence:"心脏病和肺病患者症状显著加剧,运动耐受力降低,健康人群普遍出现症状",suggestion:"儿童、老年人和病人应停留在室内,避免体力消耗,一般人群避免户外活动"}
|
|||
|
];
|
|||
|
|
|||
|
var xmlHttpRequest;
|
|||
|
var imgData = null;
|
|||
|
var nWidth = 500;
|
|||
|
var date;
|
|||
|
function requestJson(bounds,imgbuffer){
|
|||
|
date = (new Date).getTime();
|
|||
|
imgData = imgbuffer;
|
|||
|
var nowUrl = url
|
|||
|
.replace('{RECTANGLE}', bounds)
|
|||
|
.replace('{KEY}', strKey)
|
|||
|
.replace('{DATA}', date);
|
|||
|
|
|||
|
xmlHttpRequest = new XMLHttpRequest();
|
|||
|
|
|||
|
//2.设置回调函数
|
|||
|
xmlHttpRequest.onreadystatechange = callback;
|
|||
|
|
|||
|
//3.初始化XMLHttpRequest组建
|
|||
|
xmlHttpRequest.open("POST",nowUrl,true);
|
|||
|
|
|||
|
//4.发送请求
|
|||
|
xmlHttpRequest.send(null);
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
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 color = null;
|
|||
|
|
|||
|
var aqi = parseInt(currentData[i].aqi);
|
|||
|
if(!isNumber(aqi))
|
|||
|
continue;
|
|||
|
|
|||
|
var level = 0;
|
|||
|
if(aqi>nWidth){
|
|||
|
color = {red:126/255.0,green:0.0,blue:35/255.0};
|
|||
|
level = 5;
|
|||
|
aqi = nWidth-1;
|
|||
|
}
|
|||
|
else{
|
|||
|
color = {red:imgData[aqi*4]/255.0,green:imgData[aqi*4+1]/255.0,blue:imgData[aqi*4+2]/255.0};
|
|||
|
|
|||
|
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;
|
|||
|
}
|
|||
|
}
|
|||
|
if (color) {
|
|||
|
//var result=currentData[i].city.replace(/[ ]+(?=[\u4e00-\u9fa5])/g,"");
|
|||
|
var des = '<table class="cesium-infoBox-defaultTable"><tbody>' + '<tr><th>' + "AQI" + '</th><td>' + currentData[i].aqi + '</td></tr>';
|
|||
|
des += '<tr><th>' + "质量" + '</th><td>' + table[level].level + '</td></tr>';
|
|||
|
des += '<tr><th>' + "影响" + '</th><td>' + table[level].influence + '</td></tr>';
|
|||
|
des += '<tr><th>' + "建议" + '</th><td>' + table[level].suggestion + '</td></tr>' + "</tbody></table>";
|
|||
|
//des += "</tbody></table>";
|
|||
|
|
|||
|
var entity = {
|
|||
|
lon:currentData[i].lon,
|
|||
|
lat:currentData[i].lat,
|
|||
|
color:color,
|
|||
|
name:currentData[i].city,
|
|||
|
description:des,
|
|||
|
aqiValue:aqi
|
|||
|
};
|
|||
|
entityTable.push(entity);
|
|||
|
}
|
|||
|
}
|
|||
|
//////////////////////////////////////////////////////
|
|||
|
self.postMessage({date:date,entityTable:entityTable});
|
|||
|
self.close();
|
|||
|
}
|
|||
|
else if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 0){
|
|||
|
var entityTable = [];
|
|||
|
self.postMessage({date:date,entityTable:entityTable});
|
|||
|
self.close();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
onmessage=function(e){
|
|||
|
requestJson(e.data.bounds,e.data.imgData);
|
|||
|
};
|