cesium-city3d/examples/js/pmworkers.js

134 lines
4.9 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 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);
};