目录

1.空气质量指数

2.空气质量综合指数


1.空气质量指数

空气质量指数,综合表示空气污染程度或空气质量等级的无量纲的相对数值。

根据网络上的文档资料:来源为百度文库

import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;/*** 计算aqi* 分为计算日aqi和实时(小时)aqi* * @author Winy**/
public class ComputeAQIUtil {public static Float comAQI(Map<String, Object> map,Boolean isDay) {Float aqi = 0f;Float iaqi = 0f;if (map.get("pm10") != null&&(Float)map.get("pm10") >0)iaqi = getPM10IAQI((Float) map.get("pm10"));
//      System.out.println("pm10iaqi:"+iaqi);if (iaqi > aqi)aqi = iaqi;if (map.get("pm25") != null&&(Float)map.get("pm25")>0)iaqi = getPM25IAQI((Float) map.get("pm25"));
//      System.out.println("pm25iaqi:"+iaqi);if (iaqi > aqi)aqi = iaqi;if (map.get("no2") != null&&(Float)map.get("no2")>0)iaqi = getNO2IAQI((Float) map.get("no2"),isDay);
//      System.out.println("no2iaqi:"+iaqi);if (iaqi > aqi)aqi = iaqi;if (map.get("so2") != null&&(Float)map.get("so2")>0)iaqi = getSO2IAQI((Float) map.get("so2"),isDay);
//      System.out.println("so2iaqi:"+iaqi);if (iaqi > aqi)aqi = iaqi;if (map.get("co") != null&&(Float)map.get("co")>0)iaqi = getCOIAQI((Float) map.get("co"),isDay);
//      System.out.println("coiaqi:"+iaqi);if (iaqi > aqi)aqi = iaqi;if (map.get("o3") != null&&(Float)map.get("o3")>0)iaqi = getO3IAQI((Float) map.get("o3"),isDay);
//      System.out.println("o3iaqi:"+iaqi);if (iaqi > aqi)aqi = iaqi;return aqi;}/*** 计算每种污染物项目 P的空气质量分指数* * @param cp*            污染物项目P的质量浓度* @param r*            污染物项目P所在数组中的行号* @return*/public static float countPerIaqi(float cp, int r) {double bph = 0; // 与 cp相近的污染物浓度限值的高位值double bpl = 0; // 与 cp相近的污染物浓度限值的低位值double iaqih = 0; // 与 bph对应的空气质量分指数double iaqil = 0; // 与 bpl对应的空气质量分指数double iaqip = 0; // 当前污染物项目P的空气质量分指数// 空气质量分指数及对应的污染物项目浓度限值int[][] aqiArr = { { 0, 50, 150, 250, 350, 420, 500,600 }, //pm10  0{ 0, 35, 75, 115, 150, 250, 350, 500 },//pm25  1{ 0, 50, 150, 475, 800, 1600, 2100, 2620 }, //so2_day  2{ 0, 40, 80, 180, 280,565,750, 940},//no2_day  3{ 0,160,200,300,400,800,1000,1200 },//o3_day  4{ 0, 2,4,14,24,36,48 },//co_day  5{0,150,500,650,800},//so2_hour  6{0,100,200,700,1200,2340,3090,3840},//no2_hour   7{0,5,10,35,60,90,120,150},//co_hour  8{ 0, 50, 150, 475, 800, 1600, 2100, 2620 } //o3_hour   9};int[] iaqi = { 0, 50, 100, 150, 200, 300,400,500 };double min = aqiArr[r][0];int index= aqiArr[r].length-1;double max = aqiArr[r][index];if (cp<=min || cp>=max){return 0;}else {// 对每种污染物的bph、bpl、iaqih、iaqil进行赋值for (int i = r; i < r + 1; i++) {for (int j = 0; j < aqiArr[0].length; j++) {if (cp < aqiArr[i][j]) {bph = aqiArr[i][j];bpl = aqiArr[i][j - 1];iaqih = iaqi[j];iaqil = iaqi[j - 1];break;}}}// 计算污染物项目 P的空气质量分指数iaqip = (iaqih - iaqil) / (bph - bpl) * (cp - bpl) + iaqil;BigDecimal bg = new BigDecimal(Math.ceil(iaqip));float f1 = bg.setScale(0, BigDecimal.ROUND_HALF_UP).floatValue();return f1;}}/*** object转map* * @throws IllegalAccessException* @throws IllegalArgumentException*/public static Map<String, Object> objectToMap(Object obj) throws IllegalArgumentException, IllegalAccessException {if (obj == null) {return null;}Map<String, Object> map = new HashMap<String, Object>();Field[] declaredFields = obj.getClass().getDeclaredFields();for (Field field : declaredFields) {field.setAccessible(true);map.put(field.getName(), field.get(obj));}return map;}/** 直接传入数据实体获取aqi */public static Float getAQI(Object obj,Boolean isDay) {if(isDay==null)isDay=false;if (obj == null)return null;try {return comAQI(objectToMap(obj),isDay);} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}return 0f;}/** 计算iaqi */public static Float getIaqi(String param, Object obj,Boolean isDay) {if(isDay==null)isDay=false;if (obj == null)return null;Float iaqi=0f;try {Map<String, Object> map = objectToMap(obj);switch (param) {case "so2":iaqi=getSO2IAQI((Float)map.get(param),isDay);break;case "no2":iaqi=getNO2IAQI((Float)map.get(param),isDay);break;case "pm10":iaqi=getPM10IAQI((Float)map.get(param));break;case "pm25":iaqi=getPM25IAQI((Float)map.get(param));break;case "co":iaqi=getCOIAQI((Float)map.get(param),isDay);break;case "o3":iaqi=getO3IAQI((Float)map.get(param),isDay);break;default:iaqi=0f;break;}} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}return iaqi;}private static Float getCOIAQI(Float f, Boolean isDay) {if(isDay) return countPerIaqi(f, 5);elsereturn countPerIaqi(f, 8);}private static Float getPM25IAQI(Float f) {return countPerIaqi(f, 1);}private static Float getPM10IAQI(Float f) {return countPerIaqi(f, 0);}private static Float getNO2IAQI(Float f, Boolean isDay) {if(isDay) return countPerIaqi(f, 3);elsereturn countPerIaqi(f, 7);}private static Float getSO2IAQI(Float f, Boolean isDay) {if(isDay) return countPerIaqi(f, 2);elsereturn countPerIaqi(f, 6);}private static Float getO3IAQI(Float f, Boolean isDay) {if(isDay) return countPerIaqi(f, 4);elsereturn countPerIaqi(f, 9);}/**获取首要污染物*/public static String getMainPollution(Object bean,Boolean isDay) {if(isDay==null)isDay=false;Float aqi = 0f;Float iaqi = 0f;String mian= "";try {Map<String,Object> map = objectToMap(bean);if (map.get("pm10") != null) {iaqi = getPM10IAQI((Float) map.get("pm10"));if (iaqi > aqi) {aqi = iaqi;mian="pm10";}}if (map.get("pm25") != null) {iaqi = getPM25IAQI((Float) map.get("pm25"));if (iaqi > aqi) {aqi = iaqi;mian="pm2.5";}}if (map.get("no2") != null) {iaqi = getNO2IAQI((Float) map.get("no2"),isDay);if (iaqi > aqi) {aqi = iaqi;mian = "no2";}}if (map.get("so2") != null) {iaqi = getSO2IAQI((Float) map.get("so2"),isDay);if (iaqi > aqi) {aqi = iaqi;mian = "so2";}}if (map.get("co") != null) {iaqi = getCOIAQI((Float) map.get("co"),isDay);if (iaqi > aqi) {aqi = iaqi;mian = "co";}}if (map.get("o3") != null) {iaqi = getO3IAQI((Float) map.get("o3"),isDay);if (iaqi > aqi) {aqi = iaqi;mian = "o3";}}} catch (Exception e) {} return mian.length()==0?null:mian;}/** 计算iaqi */public static Map<String, Object> getIaqi(Map<String, Object> map,Boolean isDay) {if(isDay==null)isDay=false;if (map.get("pm10") != null&&(Float)map.get("pm10") >0 && map.containsKey("pm10IAQI"))map.put("pm10IAQI", getPM10IAQI((Float) map.get("pm10")));if (map.get("pm25") != null&&(Float)map.get("pm25")>0 && map.containsKey("pm25IAQI"))map.put("pm25IAQI", getPM25IAQI((Float) map.get("pm25")));if (map.get("no2") != null&&(Float)map.get("no2")>0 && map.containsKey("no2IAQI"))map.put("no2IAQI", getNO2IAQI((Float) map.get("no2"),isDay));if (map.get("so2") != null&&(Float)map.get("so2")>0 && map.containsKey("so2IAQI"))map.put("so2IAQI", getSO2IAQI((Float) map.get("so2"),isDay));if (map.get("co") != null&&(Float)map.get("co")>0 && map.containsKey("coIAQI"))map.put("coIAQI", getCOIAQI((Float) map.get("co"),isDay));if (map.get("o3") != null&&(Float)map.get("o3")>0 && map.containsKey("o3IAQI"))map.put("o3IAQI", getO3IAQI((Float) map.get("o3"),isDay));return map;}/*** 获取AQI 和分指数* 要求对象中有参数分指数且一一对应* @return 返回实体对象*/public static Object getAQIAndIAqi(Object obj,Boolean isDay) {if (obj == null)return null;try {Map<String, Object> map = new HashMap<String, Object>();map = getIaqi(MapObjectUtils.objectToMap(obj),isDay);map.put("aqi", comAQI(MapObjectUtils.objectToMap(obj),isDay));return MapObjectUtils.mapToObject(map,obj);} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}return null;}/** 直接传入数据实体获取aqi */public static Float getAQI(Object obj) {if (obj == null)return null;try {return comAQI(objectToMap(obj),true);} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}return 0f;}}

2.空气质量综合指数

基本信息空气质量综合指数,亦可称环境空气质量综合指数,是描述城市环境空气质量综合状况的无量纲指数,综合考虑了《环境空气质量指数(AQI)技术规定(试行)》(HJ633-2012)中规定的:SO₂、NO₂、PMPM、CO、O₃等六种污染物污染程度,空气质量综合指数值越大表明综合污染程度越重。《百度百科》

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;/*** 综合指数计算*** @author Winy* @version 1.0* 附件1:综合指数计算公式=PM2.5/35+PM10/70+SO2/60+NO2/40+CO/4+O3/160* 序号      污染物指数   日排名取值           月排名取值                       年* 1        PM2.5       日平均值                月平均值                         年均值 第95百    分位数* 2     PM10        日平均值                月平均值                         年均值 第95百分位数* 3     SO2         日平均值                月平均值                         年均值 第98百分位数* 4     NO2         日平均值                月平均值                         年均值 第98百分位数* 5     CO          日平均值                月第95百分比                     年均值 第95百分位数* 6      O3          日最大8小时平均值       月 日最大8小时平均值的 第90百分比    日最大 O3_8年均值 第90百分位数* @date 2022年4月7日*/
public class CompositeIndexUtil {/*** 计算综合指数各参数得取值类型*/public static enum Type {DAY, MONTH, YEAR};public static Float getComIndex(Object o, Type type) {Float coi = null;try {Map<String, Object> map = objectToMap(o);float pm10 = 0, pm25 = 0, so2 = 0, no2 = 0, co = 0, o3 = 0;if (map.get("pm10") != null && (Float) map.get("pm10") > 0) {pm10 = (float) map.get("pm10");}if (map.get("pm25") != null && (Float) map.get("pm25") > 0) {pm25 = (float) map.get("pm25");}if (map.get("so2") != null && (Float) map.get("so2") > 0) {so2 = (float) map.get("so2");}if (map.get("no2") != null && (Float) map.get("no2") > 0) {no2 = (float) map.get("no2");}if (map.get("co") != null && (Float) map.get("co") > 0) {co = (float) map.get("co");}switch (type) {case DAY:if (map.get("o3") != null && (Float) map.get("o3") > 0) {o3 = (float) map.get("o3");}break;case MONTH:co = co * 0.95f;if (map.get("o3_8") != null && (Float) map.get("o3_8") > 0) {o3 = (float) map.get("o3_8") * 0.9f;}break;case YEAR://用于年报中 年均值pm10 = pm10 * 0.95f;pm25 = pm25 * 0.95f;so2 = so2 * 0.98f;no2 = no2 * 0.98f;co = co * 0.95f;if (map.get("o3_8") != null && (Float) map.get("o3_8") > 0) {o3 = (float) map.get("o3_8") * 0.9f;}break;default:return null;}coi = pm25 / 35 + pm10 / 70 + so2 / 60 + no2 / 40 + co / 4 + o3 / 160;return FloatUtil.subPoint_1(coi);} catch (IllegalArgumentException | IllegalAccessException e) {e.printStackTrace();}return null;}/*** object转map** @throws IllegalAccessException* @throws IllegalArgumentException*/public static Map<String, Object> objectToMap(Object obj) throws IllegalArgumentException, IllegalAccessException {if (obj == null) {return null;}Map<String, Object> map = new HashMap<String, Object>();Field[] declaredFields = obj.getClass().getDeclaredFields();for (Field field : declaredFields) {field.setAccessible(true);map.put(field.getName(), field.get(obj));}return map;}
}

【计算】空气质量综合指数+空气质量指数相关推荐

  1. 城市空气质量api 空气质量数据查询实现

    现在人们越来越关注空气质量,在app中集成空气质量查询可以满足人们的查询需要,本次提供的城市空气质量api是集成了城市空气质量.城市空气PM2.5指数.城市辐射指数的应用数据接口,非常全面可靠. 接口 ...

  2. AQI空气质量分析与预测

    AQI分析与预测 背景信息 AQI全称是Air Quality Index,指空气质量指数,用来衡量空气清洁或者污染的程度,值越小,表示空气质量越好. 本文的分析目标 一.描述性统计 哪些城市的空气质 ...

  3. 基于ARIMA模型的空气质量AQI时间序列分析

    (程序代码见后) 背景: 随着全球气候的变暖,空气质量每天发生变化,而人们的生活质量和空气质量息息相关.如下表1所示,空气质量和空气的成分有很大的关系,为此文中选择某城市一年内的空气指数数据进行分析. ...

  4. “生态环境—空气质量”业务理解

    空气质量关注的维度主要包括以下方面:         现状.变化.统计.对比(时间维度.空间维度).重点区域 1.空气质量现状 空气质量实时监测的结果,包括地区.监测时间.空气质量指数.空气质量优良情 ...

  5. 基于 Python 的全国空气质量监测与可视化分析平台

    温馨提示:文末有 CSDN 平台官方提供的学长 Wechat / QQ 名片 :) 1. 项目背景 空气质量优劣程度与一个城市的综合竞争力密切相关,它直接影响到投资环境和居民健康,因此越来越受到政府和 ...

  6. 室内空气质量类毕业论文文献包含哪些?

    本文是为大家整理的室内空气质量主题相关的10篇毕业论文文献,包括5篇期刊论文和5篇学位论文,为室内空气质量选题相关人员撰写毕业论文提供参考. 1.[期刊论文]室内装饰空气质量的改良与室内空气质量提升的 ...

  7. python大气模型算法_关于预测空气质量机器学习哪个算法简单?

    尽管线性模型是最简单的机器学习技术之一,但它们仍然是进行预测的强大工具. 代码格式乱可以看原文链接:http://tecdat.cn/?p=11387​tecdat.cn 这尤其是由于线性模型特别容易 ...

  8. AI实战:基于深度学习的空气质量预测模型开源代码汇总

    基于深度学习的空气质量预测模型开源代码汇总 一.传统机理空气质量模型 空气质量模型是基于人类对大气物理和化学过程科学认识的基础上,运用气象学原理及数学方法,从水平和垂直方向在大尺度范围内对空气质量进行 ...

  9. (八)空气质量指数计算7.0-----beautifulsoup4解析处理html、获取所有城市空气质量

    案例描述 • 为了能有效地提取并利用网络信息并工作提高效率,出现了网络爬虫 • 利用网络爬虫实时获取城市的空气质量 • 利用beautifulsoup4获取所有城市的空气质量 案例解析 首先获取所有的 ...

最新文章

  1. UBuntu 系统设置禁用快捷键
  2. 关于MySQL索引知识与小妙招 — 学到了!
  3. *CI框架装载器Loader.php源码分析
  4. mac或者linux磁力下载方法:远离渣雷
  5. css中的node.js_在Node App中使用基本HTML,CSS和JavaScript
  6. 剑指Offer - 面试题21. 调整数组顺序使奇数位于偶数前面(双指针,原地算法)
  7. matlab混合编程 mex,求教:matlab混合编程关于mex内自定义函数的输出
  8. Activity管理笔记
  9. apache服务通常启动,但打不开网页,提示Try using the Win32DisableAcceptEx directive (转)...
  10. java学生成绩管理系统类图,学生成绩管理系统的用例类图.ppt
  11. 电梯远程监控系统方案
  12. Java游戏雀圣麻将,《梦幻麻将馆9雀圣争霸》游戏全程攻略
  13. 安卓手机网上商城-2号店
  14. 『政善治』Postman工具 — 18、NewMan的使用
  15. IoT物联网平台如何实现大规模设备的高效控制?
  16. linux命令行访问win,从Linux命令行访问Windows共享 | 旺旺知识库
  17. matlab计算空间坐标,通过matlab计算卫星位置
  18. 华为平板 鸿蒙2.0,华为新平板将发布,搭载鸿蒙2.0系统
  19. 面试官问怎么进行代码优化,我一口气讲了11个重点
  20. c语言 编写小学生100以内四则运算数学测试游戏,运用C语言开发一个“小学生算术四则运算测试系统”。...

热门文章

  1. 基尔霍夫电流/电压定律
  2. LeetCode344
  3. 九度OJ 1260:珍珠项链 (字符串处理、DP)
  4. IE7、IE6和火狐兼容性问题
  5. jsp小区物业停车管理系统毕业设计
  6. TOFEL托福经验贴
  7. 会议室大屏幕用投影还是拼接屏好?
  8. 天天链n1 与电脑连接Samba win10 教程
  9. 苹果升级后怎么恢复以前的版本_安卓微信7.0不好用?教你一步降回旧版本
  10. 基于PHP后台的购物商城微信小程序的设计与实现 毕业设计毕设参考