空气质量指数计算方法
计算公式:
空气等级对应的IAQI值:
工具类:(注意:算IAQI的方法分计算日数据的和小时数据的)
/**
* 计算空气质量等级
* @author xu
*
*/
public class KqzlUtil {
/**
* 计算IAQI的值
*
* @param value
* 监测浓度值
* @param lowI
* 与lowL相对应的IAQI值
* @param highI
* 与highL相对应的IAQI值
* @param lowC
* 与监测浓度相近的污染物浓度低位值
* @param highC
* 与监测浓度相近的污染物浓度高位值
* @return (I高-I低)/(C高-C低)*(C-C低)+I低
*/
//浓度值,IAQI低,IAQI高,低值,高值
private static int IAQICal(double value, int lowI, int highI, int lowC, int highC) {
if(value<0||highI<0||lowI<0||highC<0||lowC<0){
return -99;
}
if (highC == lowC) {
return lowI;
}
double iaqi = (value - lowC) * (highI - lowI) / (highC - lowC) + lowI;
//转int
int ret=new Double(Math.ceil(iaqi)).intValue();
return ret;
}
/**
* 计算pm2.5的IAQI
* @param value pm2.5浓度值
* @return
*/
public static int PM25IAQI(double pm25_value) {
int iaqi_pm25 =0;
// 计算pm2.5的iaqi值
if (0 <= pm25_value && pm25_value< 35) {
//浓度值,IAQI低,IAQI高,低值,高值
iaqi_pm25 = IAQICal(pm25_value,0,50,0,35); //调用函数(计算公式),同时也相当于赋值
}else if (35 <= pm25_value && pm25_value< 75) {
iaqi_pm25 = IAQICal(pm25_value,50,100,35,75); //调用函数(计算公式),同时也相当于赋值
}else if (75 <= pm25_value && pm25_value < 115){
iaqi_pm25 = IAQICal(pm25_value,100,150,75,115); //调用函数(计算公式),同时也相当于赋值
}else if (115 <= pm25_value && pm25_value < 150){
iaqi_pm25 = IAQICal(pm25_value,150,200,115,150); //调用函数(计算公式),同时也相当于赋值
} else if (150 <= pm25_value && pm25_value < 250){
iaqi_pm25 = IAQICal(pm25_value,200,300,150,250);
} else if (250 <= pm25_value && pm25_value < 350) {
iaqi_pm25 = IAQICal(pm25_value,300,400,250,350);
}else if (350 <= pm25_value && pm25_value< 500) {
iaqi_pm25 = IAQICal(pm25_value,400,500,350,500);
}else {
iaqi_pm25=-99;
}
return iaqi_pm25;
}
/**
* 计算pm10的IAQI
* @param value pm10浓度值
* @return
*/
public static int PM10IAQI(double pm10_value) {
int iaqi_pm10 =0;
// 计算pm10的iaqi值
if (0 <= pm10_value && pm10_value< 50) {
//浓度值,IAQI低,IAQI高,低值,高值
iaqi_pm10 = IAQICal(pm10_value,0,50,0,50); //调用函数(计算公式),同时也相当于赋值
}else if (50 <= pm10_value && pm10_value< 150) {
iaqi_pm10 = IAQICal(pm10_value,50,100,50,150); //调用函数(计算公式),同时也相当于赋值
}else if (150 <= pm10_value && pm10_value < 250){
iaqi_pm10 = IAQICal(pm10_value,100,150,150,250); //调用函数(计算公式),同时也相当于赋值
}else if (250 <= pm10_value && pm10_value < 350){
iaqi_pm10 = IAQICal(pm10_value,150,200,250,350); //调用函数(计算公式),同时也相当于赋值
} else if (350 <= pm10_value && pm10_value < 420){
iaqi_pm10 = IAQICal(pm10_value,200,300,350,420);
} else if (420 <= pm10_value && pm10_value < 500) {
iaqi_pm10 = IAQICal(pm10_value,300,400,420,500);
}else if (500 <= pm10_value && pm10_value< 600) {
iaqi_pm10 = IAQICal(pm10_value,400,500,500,600);
}else {
iaqi_pm10=-99;
}
return iaqi_pm10;
}
/**
* 计算co的IAQI
* @param value co浓度值(日数据)
* @return
*/
public static int COIAQI(double co_value) {
int iaqi_co =0;
// 计算co的iaqi值
if (0 <= co_value && co_value< 2) {
//浓度值,IAQI低,IAQI高,低值,高值
iaqi_co = IAQICal(co_value,0,50,0,2); //调用函数(计算公式),同时也相当于赋值
}else if (2 <= co_value && co_value< 4) {
iaqi_co = IAQICal(co_value,50,100,2,4); //调用函数(计算公式),同时也相当于赋值
}else if (4 <= co_value && co_value < 14){
iaqi_co = IAQICal(co_value,100,150,4,14); //调用函数(计算公式),同时也相当于赋值
}else if (14 <= co_value && co_value < 24){
iaqi_co = IAQICal(co_value,150,200,14,24); //调用函数(计算公式),同时也相当于赋值
} else if (24 <= co_value && co_value < 36){
iaqi_co = IAQICal(co_value,200,300,24,36);
} else if (36 <= co_value && co_value < 48) {
iaqi_co = IAQICal(co_value,300,400,36,48);
}else if (48 <= co_value && co_value< 60) {
iaqi_co = IAQICal(co_value,400,500,48,60);
}else {
iaqi_co=-99;
}
return iaqi_co;
}
/**
* 计算so2的IAQI
* @param value so2浓度值(日数据)
* @return
*/
public static int SO2IAQI(double so2_value) {
int iaqi_so2 =0;
// 计算so2的iaqi值
if (0 <= so2_value && so2_value< 50) {
//浓度值,IAQI低,IAQI高,低值,高值
iaqi_so2 = IAQICal(so2_value,0,50,0,50); //调用函数(计算公式),同时也相当于赋值
}else if (50 <= so2_value && so2_value< 150) {
iaqi_so2 = IAQICal(so2_value,50,100,50,150); //调用函数(计算公式),同时也相当于赋值
}else if (150 <= so2_value && so2_value < 475){
iaqi_so2 = IAQICal(so2_value,100,150,150,475); //调用函数(计算公式),同时也相当于赋值
}else if (475 <= so2_value && so2_value < 800){
iaqi_so2 = IAQICal(so2_value,150,200,475,800); //调用函数(计算公式),同时也相当于赋值
} else if (800 <= so2_value && so2_value < 1600){
iaqi_so2 = IAQICal(so2_value,200,300,800,1600);
} else if (1600 <= so2_value && so2_value < 2100) {
iaqi_so2 = IAQICal(so2_value,300,400,1600,2100);
}else if (2100 <= so2_value && so2_value< 2620) {
iaqi_so2 = IAQICal(so2_value,400,500,1600,2620);
}else {
iaqi_so2=-99;
}
return iaqi_so2;
}
/**
* 计算o3的IAQI
* @param value o3浓度值(日数据)
* @return
*/
public static int O3IAQI(double o3_value) {
int iaqi_03 =0;
// 计算03的iaqi值
if (0 <= o3_value && o3_value< 100) {
//浓度值,IAQI低,IAQI高,低值,高值
iaqi_03 = IAQICal(o3_value,0,50,0,100); //调用函数(计算公式),同时也相当于赋值
}else if (100 <= o3_value && o3_value< 160) {
iaqi_03 = IAQICal(o3_value,50,100,100,160); //调用函数(计算公式),同时也相当于赋值
}else if (160 <= o3_value && o3_value < 215){
iaqi_03 = IAQICal(o3_value,100,150,160,215); //调用函数(计算公式),同时也相当于赋值
}else if (215 <= o3_value && o3_value < 265){
iaqi_03 = IAQICal(o3_value,150,200,215,265); //调用函数(计算公式),同时也相当于赋值
} else if (265 <= o3_value && o3_value < 800){
iaqi_03 = IAQICal(o3_value,200,300,265,800);
} else {
iaqi_03=-99;
}
return iaqi_03;
}
/**
* 计算no2的IAQI
* @param value no2浓度值(日数据)
* @return
*/
public static int no2IAQI(double no2_value) {
int iaqi_no2 =0;
// 计算no2的iaqi值
if (0 <= no2_value && no2_value< 40) {
//浓度值,IAQI低,IAQI高,低值,高值
iaqi_no2 = IAQICal(no2_value,0,50,0,40); //调用函数(计算公式),同时也相当于赋值
}else if (40 <= no2_value && no2_value< 80) {
iaqi_no2 = IAQICal(no2_value,50,100,40,80); //调用函数(计算公式),同时也相当于赋值
}else if (80 <= no2_value && no2_value < 180){
iaqi_no2 = IAQICal(no2_value,100,150,80,180); //调用函数(计算公式),同时也相当于赋值
}else if (180 <= no2_value && no2_value < 280){
iaqi_no2 = IAQICal(no2_value,150,200,180,280); //调用函数(计算公式),同时也相当于赋值
} else if (280 <= no2_value && no2_value < 565){
iaqi_no2 = IAQICal(no2_value,200,300,280,565);
}else if (565 <= no2_value && no2_value < 754){
iaqi_no2 = IAQICal(no2_value,300,400,565,754); //调用函数(计算公式),同时也相当于赋值
} else if (754 <= no2_value && no2_value < 940){
iaqi_no2 = IAQICal(no2_value,400,500,754,940);
} else {
iaqi_no2=-99;
}
return iaqi_no2;
}
//------------------------空气质量小时数据计算
/**
* 计算co的IAQI
* @param value co浓度值(小时数据)
* @return
*/
public static int COIAQI1(double co_value) {
int iaqi_co =0;
// 计算co的iaqi值
if (0 <= co_value && co_value< 5) {
//浓度值,IAQI低,IAQI高,低值,高值
iaqi_co = IAQICal(co_value,0,50,0,5); //调用函数(计算公式),同时也相当于赋值
}else if (5 <= co_value && co_value< 10) {
iaqi_co = IAQICal(co_value,50,100,5,10); //调用函数(计算公式),同时也相当于赋值
}else if (10 <= co_value && co_value < 35){
iaqi_co = IAQICal(co_value,100,150,10,35); //调用函数(计算公式),同时也相当于赋值
}else if (35 <= co_value && co_value < 60){
iaqi_co = IAQICal(co_value,150,200,35,60); //调用函数(计算公式),同时也相当于赋值
} else if (60 <= co_value && co_value < 90){
iaqi_co = IAQICal(co_value,200,300,60,90);
} else if (90 <= co_value && co_value < 120) {
iaqi_co = IAQICal(co_value,300,400,90,120);
}else if (120 <= co_value && co_value< 150) {
iaqi_co = IAQICal(co_value,400,500,120,150);
}else {
iaqi_co=-99;
}
return iaqi_co;
}
/**
* 计算so2的IAQI
* @param value so2浓度值(小时数据)
* @return
*/
public static int SO2IAQI1(double so2_value) {
int iaqi_so2 =0;
// 计算so2的iaqi值
if (0 <= so2_value && so2_value< 150) {
//浓度值,IAQI低,IAQI高,低值,高值
iaqi_so2 = IAQICal(so2_value,0,50,0,150); //调用函数(计算公式),同时也相当于赋值
}else if (150 <= so2_value && so2_value< 500) {
iaqi_so2 = IAQICal(so2_value,50,100,150,500); //调用函数(计算公式),同时也相当于赋值
}else if (500 <= so2_value && so2_value < 650){
iaqi_so2 = IAQICal(so2_value,100,150,500,650); //调用函数(计算公式),同时也相当于赋值
}else if (650 <= so2_value && so2_value < 800){
iaqi_so2 = IAQICal(so2_value,150,200,650,800); //调用函数(计算公式),同时也相当于赋值
} else {
iaqi_so2=-99;
}
return iaqi_so2;
}
/**
* 计算o3的IAQI
* @param value o3浓度值(小时数据)
* @return
*/
public static int O3IAQI1(double o3_value) {
int iaqi_03 =0;
// 计算03的iaqi值
if (0 <= o3_value && o3_value< 160) {
//浓度值,IAQI低,IAQI高,低值,高值
iaqi_03 = IAQICal(o3_value,0,50,0,160); //调用函数(计算公式),同时也相当于赋值
}else if (160 <= o3_value && o3_value< 200) {
iaqi_03 = IAQICal(o3_value,50,100,160,200); //调用函数(计算公式),同时也相当于赋值
}else if (200 <= o3_value && o3_value < 300){
iaqi_03 = IAQICal(o3_value,100,150,200,300); //调用函数(计算公式),同时也相当于赋值
}else if (300 <= o3_value && o3_value < 400){
iaqi_03 = IAQICal(o3_value,150,200,300,400); //调用函数(计算公式),同时也相当于赋值
} else if (400 <= o3_value && o3_value < 800){
iaqi_03 = IAQICal(o3_value,200,300,400,800);
}else if (800 <= o3_value && o3_value < 1000){
iaqi_03 = IAQICal(o3_value,300,400,800,1000); //调用函数(计算公式),同时也相当于赋值
} else if (1000 <= o3_value && o3_value < 1200){
iaqi_03 = IAQICal(o3_value,400,500,1000,1200);
} else {
iaqi_03=-99;
}
return iaqi_03;
}
/**
* 计算no2的IAQI
* @param value no2浓度值(小时数据)
* @return
*/
public static int no2IAQI1(double no2_value) {
int iaqi_no2 =0;
// 计算no2的iaqi值
if (0 <= no2_value && no2_value< 100) {
//浓度值,IAQI低,IAQI高,低值,高值
iaqi_no2 = IAQICal(no2_value,0,50,0,100); //调用函数(计算公式),同时也相当于赋值
}else if (100 <= no2_value && no2_value< 200) {
iaqi_no2 = IAQICal(no2_value,50,100,100,200); //调用函数(计算公式),同时也相当于赋值
}else if (200 <= no2_value && no2_value < 700){
iaqi_no2 = IAQICal(no2_value,100,150,200,700); //调用函数(计算公式),同时也相当于赋值
}else if (700 <= no2_value && no2_value < 1200){
iaqi_no2 = IAQICal(no2_value,150,200,700,1200); //调用函数(计算公式),同时也相当于赋值
} else if (1200 <= no2_value && no2_value < 2340){
iaqi_no2 = IAQICal(no2_value,200,300,1200,2340);
}else if (2340 <= no2_value && no2_value < 3090){
iaqi_no2 = IAQICal(no2_value,300,400,2340,3090); //调用函数(计算公式),同时也相当于赋值
} else if (3090 <= no2_value && no2_value < 3840){
iaqi_no2 = IAQICal(no2_value,400,500,3090,3840);
} else {
iaqi_no2=-99;
}
return iaqi_no2;
}
/**
* 根据IAQI计算空气质量等级
* 一级,优
* 二级,良
* 三级,轻度污染
* 四级,中度污染
* 五级,重度污染
* 六级,严重污染
* @param value IAQI值
* @return 1-6对应空气质量一级到六级
*/
public static int kqzldj(int value) {
int dj=0;
if(0<=value && value<=50) {
dj=1;
}else if(51<=value && value<=100) {
dj=2;
}else if(101<=value && value<=150) {
dj=3;
}else if(151<=value && value<=200) {
dj=4;
}else if(201<=value && value<=300) {
dj=5;
}else if(value>300) {
dj=6;
}else{
// 有的数据可能数-99
//-99代表数字超出计算范围了,应该作废的,我这里不做其他处理直接6级
dj=6;
}
return dj;
}