pmworkers.js 4.9 KB

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