| | |
| | | import java.util.*; |
| | | |
| | | public class AQICalculation2 { |
| | | |
| | | |
| | | public static Map<String, Object> hourlyAQI(Map<String, Object> map){ |
| | | List<Double> AQIList = new ArrayList<>(); |
| | | Map<String,Double> AQIMap = new HashMap<>(); |
| | | Map maxMap = new HashMap(); |
| | | for (Map.Entry<String, Object> entry : map.entrySet()) { |
| | | String key = entry.getKey(); |
| | |
| | | Double COAQI; |
| | | Double O3AQI; |
| | | |
| | | switch (key) { |
| | | case "PM2_5":PM2_5AQI = PM2_5AQI(value); |
| | | AQIList.add(PM2_5AQI); |
| | | break; |
| | | case "PM10":PM10AQI = PM10AQI(value); |
| | | AQIList.add(PM10AQI); |
| | | break; |
| | | case "SO2":SO2AQI = SO2AQI(value); |
| | | AQIList.add(SO2AQI); |
| | | break; |
| | | case "NO2":NO2AQI = NO2AQI(value); |
| | | AQIList.add(NO2AQI); |
| | | break; |
| | | case "CO":COAQI = COAQI(value); |
| | | AQIList.add(COAQI); |
| | | break; |
| | | case "maxO3_8h":O3AQI = O3AQI(value); |
| | | AQIList.add(O3AQI); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | Map<String, Object> returnMap = new HashMap<>(); |
| | | Double AQIMAX = Collections.max(AQIList); |
| | | Optional<Map.Entry<String, Integer>> max0 = maxMap.entrySet() |
| | | .stream() |
| | | .max(Map.Entry.comparingByValue()); |
| | | returnMap.put("maxSensor", max0.get().getKey()); |
| | | returnMap.put("AQI", AQIMAX); |
| | | return returnMap; |
| | | } |
| | | public static Map<String, Object> dayAQI(Map<String, Object> map){ |
| | | List<Double> AQIList = new ArrayList<>(); |
| | | Map maxMap = new HashMap(); |
| | | for (Map.Entry<String, Object> entry : map.entrySet()) { |
| | | String key = entry.getKey(); |
| | | if (entry.getValue() instanceof Double){ |
| | | Double value = Double.parseDouble(entry.getValue().toString()); |
| | | if (key!="O3_day"){ |
| | | maxMap.put(key,value); |
| | | } |
| | | Double PM2_5AQI; |
| | | Double PM10AQI; |
| | | Double SO2AQI; |
| | | Double NO2AQI; |
| | | Double COAQI; |
| | | Double maxO38hAQI; |
| | | switch (key) { |
| | | case "PM2_5":PM2_5AQI = PM2_5AQI(value); |
| | | AQIList.add(PM2_5AQI); |
| | | break; |
| | | case "PM10":PM10AQI = PM10AQI(value); |
| | | AQIList.add(PM10AQI); |
| | | break; |
| | | case "SO2":SO2AQI = SO2DayAQI(value); |
| | | AQIList.add(SO2AQI); |
| | | break; |
| | | case "NO2":NO2AQI = NO2DayAQI(value); |
| | | AQIList.add(NO2AQI); |
| | | break; |
| | | case "CO":COAQI = CODayAQI(value); |
| | | AQIList.add(COAQI); |
| | | break; |
| | | case "maxO3_8h":maxO38hAQI = O3DayAQI(value); |
| | | AQIList.add(maxO38hAQI); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | }else { |
| | | continue; |
| | | switch (key) { |
| | | case "PM2_5":PM2_5AQI = PM2_5AQI(value); |
| | | AQIMap.put("PM2_5",PM2_5AQI); |
| | | break; |
| | | case "PM10":PM10AQI = PM10AQI(value); |
| | | AQIMap.put("PM10",PM10AQI); |
| | | break; |
| | | case "SO2":SO2AQI = SO2AQI(value); |
| | | AQIMap.put("SO2",SO2AQI); |
| | | break; |
| | | case "NO2":NO2AQI = NO2AQI(value); |
| | | AQIMap.put("NO2",NO2AQI); |
| | | break; |
| | | case "CO":COAQI = COAQI(value); |
| | | AQIMap.put("CO",COAQI); |
| | | break; |
| | | case "maxO3_8h":O3AQI = O3AQI(value); |
| | | AQIMap.put("maxO3_8h",O3AQI); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | Map<String, Object> returnMap = new HashMap<>(); |
| | | if (AQIList.size()>0){ |
| | | Double AQIMAX = Collections.max(AQIList); |
| | | Optional<Map.Entry<String, Integer>> max0 = maxMap.entrySet() |
| | | Optional<Map.Entry<String, Double>> max0 = AQIMap.entrySet() |
| | | .stream() |
| | | .max(Map.Entry.comparingByValue()); |
| | | returnMap.put("maxSensor", max0.get().getKey()); |
| | | returnMap.put("AQI", new Double(Math.floor(Math.round(max0.get().getValue()+0.5))).intValue()); |
| | | return returnMap; |
| | | } |
| | | public static Map<String, Object> dayAQI(Map<String, Object> map){ |
| | | Map<String,Double> AQIMap = new HashMap<>(); |
| | | Map maxMap = new HashMap(); |
| | | for (Map.Entry<String, Object> entry : map.entrySet()) { |
| | | String key = entry.getKey(); |
| | | if (entry.getValue().toString().equals("")){ |
| | | continue; |
| | | } |
| | | Double value = Double.parseDouble(entry.getValue().toString()); |
| | | if (key!="O3_day"){ |
| | | maxMap.put(key,value); |
| | | }else { |
| | | continue; |
| | | } |
| | | Double PM2_5AQI; |
| | | Double PM10AQI; |
| | | Double SO2AQI; |
| | | Double NO2AQI; |
| | | Double COAQI; |
| | | Double maxO38hAQI; |
| | | switch (key) { |
| | | case "PM2_5":PM2_5AQI = PM2_5AQI(value); |
| | | AQIMap.put("PM2_5",PM2_5AQI); |
| | | break; |
| | | case "PM10":PM10AQI = PM10AQI(value); |
| | | AQIMap.put("PM10",PM10AQI); |
| | | break; |
| | | case "SO2":SO2AQI = SO2AQI(value); |
| | | AQIMap.put("SO2",SO2AQI); |
| | | break; |
| | | case "NO2":NO2AQI = NO2AQI(value); |
| | | AQIMap.put("NO2",NO2AQI); |
| | | break; |
| | | case "CO":COAQI = COAQI(value); |
| | | AQIMap.put("CO",COAQI); |
| | | break; |
| | | case "maxO3_8h":maxO38hAQI = O3DayAQI(value); |
| | | AQIMap.put("maxO3_8h",maxO38hAQI); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | Map<String, Object> returnMap = new HashMap<>(); |
| | | if (AQIMap.size()>0){ |
| | | Optional<Map.Entry<String, Double>> max0 = AQIMap.entrySet() |
| | | .stream() |
| | | .max(Map.Entry.comparingByValue()); |
| | | returnMap.put("maxSensor",max0.get().getKey()); |
| | | returnMap.put("AQI", AQIMAX); |
| | | returnMap.put("AQI", new Double(Math.floor(Math.round(max0.get().getValue()+0.5))).intValue()); |
| | | }else { |
| | | returnMap.put("maxSensor",""); |
| | | returnMap.put("AQI", ""); |
| | |
| | | if(value<=0) { |
| | | result=(double) 0; |
| | | }else if (value<=35) { |
| | | result = 50/35*(value-0)+0; |
| | | result = 50.0/35*(value-0)+0; |
| | | }else if (value<=75) { |
| | | result = 50/40*(value-35)+50; |
| | | result = 50.0/40*(value-35)+50; |
| | | }else if (value<=115) { |
| | | result = 50/40*(value-75)+100; |
| | | result = 50.0/40*(value-75)+100; |
| | | }else if (value<=150) { |
| | | result = 50/35*(value-115)+150; |
| | | result = 50.0/35*(value-115)+150; |
| | | }else if (value<=250) { |
| | | result = 100/100*(value-150)+200; |
| | | result = 100.0/100*(value-150)+200; |
| | | }else if (value<=350) { |
| | | result = 100/100*(value-250)+300; |
| | | result = 100.0/100*(value-250)+300; |
| | | }else { |
| | | result = 100/150*(value-350)+400; |
| | | result = 100.0/150*(value-350)+400; |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | |
| | | static double PM10AQI(Double value) { |
| | | Double result = (double) 0; |
| | | if(value<=0) { |
| | | result=(double) 0; |
| | | }else if (value<=50) { |
| | | result = 50/50*(value-0)+0; |
| | | result = 50.0/50*(value-0)+0; |
| | | }else if (value<=150) { |
| | | result = 50/100*(value-50)+50; |
| | | result = 50.0/100*(value-50)+50; |
| | | }else if (value<=250) { |
| | | result = 50/100*(value-150)+100; |
| | | result = 50.0/100*(value-150)+100; |
| | | }else if (value<=350) { |
| | | result = 50/100*(value-250)+150; |
| | | result = 50.0/100*(value-250)+150; |
| | | }else if (value<=420) { |
| | | result = 100/70*(value-350)+200; |
| | | result = 100.0/70*(value-350)+200; |
| | | }else if (value<=500) { |
| | | result = 100/80*(value-420)+300; |
| | | result = 100.0/80*(value-420)+300; |
| | | }else { |
| | | result = 100/100*(value-500)+400; |
| | | result = 100.0/100*(value-500)+400; |
| | | } |
| | | return result; |
| | | } |
| | |
| | | if(value<=0) { |
| | | result=(double) 0; |
| | | }else if (value<=150) { |
| | | result = 50/150*(value-0)+0; |
| | | result = 50.0/150*(value-0)+0; |
| | | }else if (value<=500) { |
| | | result = 50/350*(value-150)+50; |
| | | result = 50.0/350*(value-150)+50; |
| | | }else if (value<=650) { |
| | | result = 50/150*(value-500)+100; |
| | | result = 50.0/150*(value-500)+100; |
| | | }else { |
| | | result = 50/150*(value-650)+150; |
| | | result = 50.0/150*(value-650)+150; |
| | | } |
| | | return result; |
| | | } |
| | |
| | | if(value<=0) { |
| | | result=(double) 0; |
| | | }else if (value<=100) { |
| | | result = 50/100*(value-0)+0; |
| | | result = 50.0/100*(value-0)+0; |
| | | }else if (value<=200) { |
| | | result = 50/100*(value-100)+50; |
| | | result = 50.0/100*(value-100)+50; |
| | | }else if (value<=700) { |
| | | result = 50/500*(value-200)+100; |
| | | result = 50.0/500*(value-200)+100; |
| | | }else if (value<=1200) { |
| | | result = 50/500*(value-700)+150; |
| | | result = 50.0/500*(value-700)+150; |
| | | }else if (value<=2340) { |
| | | result = 100/1140*(value-1200)+200; |
| | | result = 100.0/1140*(value-1200)+200; |
| | | }else if (value<=3090) { |
| | | result = 100/750*(value-2340)+300; |
| | | result = 100.0/750*(value-2340)+300; |
| | | }else { |
| | | result = 100/750*(value-3090)+400; |
| | | result = 100.0/750*(value-3090)+400; |
| | | } |
| | | return result; |
| | | } |
| | |
| | | if(value<=0) { |
| | | result=(double) 0; |
| | | }else if (value<=5) { |
| | | result = 50/5*(value-0)+0; |
| | | result = 50.0/5*(value-0)+0; |
| | | }else if (value<=10) { |
| | | result = 50/5*(value-5)+50; |
| | | result = 50.0/5*(value-5)+50; |
| | | }else if (value<=35) { |
| | | result = 50/25*(value-10)+100; |
| | | result = 50.0/25*(value-10)+100; |
| | | }else if (value<=60) { |
| | | result = 50/25*(value-35)+150; |
| | | result = 50.0/25*(value-35)+150; |
| | | }else if (value<=90) { |
| | | result = 100/30*(value-60)+200; |
| | | result = 100.0/30*(value-60)+200; |
| | | }else if (value<=120) { |
| | | result = 100/30*(value-90)+300; |
| | | result = 100.0/30*(value-90)+300; |
| | | }else { |
| | | result = 100/30*(value-120)+400; |
| | | result = 100.0/30*(value-120)+400; |
| | | } |
| | | return result; |
| | | } |
| | |
| | | if(value<=0) { |
| | | result=(double) 0; |
| | | }else if (value<=100) { |
| | | result = 50/160*(value-0)+0; |
| | | result = 50.0/160*(value-0)+0; |
| | | }else if (value<=160) { |
| | | result = 50/40*(value-160)+50; |
| | | result = 50.0/40*(value-160)+50; |
| | | }else if (value<=215) { |
| | | result = 50/100*(value-200)+100; |
| | | result = 50.0/100*(value-200)+100; |
| | | }else if (value<=265) { |
| | | result = 50/100*(value-300)+150; |
| | | result = 50.0/100*(value-300)+150; |
| | | }else if (value<=800) { |
| | | result = 100/400*(value-400)+200; |
| | | result = 100.0/400*(value-400)+200; |
| | | }else if (value<=2100) { |
| | | result = 100/200*(value-800)+300; |
| | | result = 100.0/200*(value-800)+300; |
| | | }else { |
| | | result = 100/200*(value-1000)+400; |
| | | result = 100.0/200*(value-1000)+400; |
| | | } |
| | | return result; |
| | | } |
| | |
| | | if(value<=0) { |
| | | result=(double) 0; |
| | | }else if (value<=100) { |
| | | result = 50/100*(value-0)+0; |
| | | result = 50.0/100*(value-0)+0; |
| | | }else if (value<=160) { |
| | | result = 50/60*(value-100)+50; |
| | | result = 50.0/60*(value-100)+50; |
| | | }else if (value<=215) { |
| | | result = 50/55*(value-160)+100; |
| | | result = 50.0/55*(value-160)+100; |
| | | }else if (value<=265) { |
| | | result = 50/150*(value-215)+150; |
| | | result = 50.0/150*(value-215)+150; |
| | | }else if (value<=800) { |
| | | result = 100/535*(value-265)+200; |
| | | result = 100.0/535*(value-265)+200; |
| | | }else if (value<=2100) { |
| | | result = 100/12*(value-800)+300; |
| | | result = 100.0/12*(value-800)+300; |
| | | }else { |
| | | result = 100/12*(value-48)+400; |
| | | result = 100.0/12*(value-48)+400; |
| | | } |
| | | return result; |
| | | } |
| | |
| | | if(value<=0) { |
| | | result=(double) 0; |
| | | }else if (value<=50) { |
| | | result = 50/50*(value-0)+0; |
| | | result = 50.0/50*(value-0)+0; |
| | | }else if (value<=150) { |
| | | result = 50/100*(value-50)+50; |
| | | result = 50.0/100*(value-50)+50; |
| | | }else if (value<=475) { |
| | | result = 50/325*(value-150)+100; |
| | | result = 50.0/325*(value-150)+100; |
| | | }else if (value<=800) { |
| | | result = 50/325*(value-475)+150; |
| | | result = 50.0/325*(value-475)+150; |
| | | }else if (value<=1600) { |
| | | result = 100/800*(value-800)+200; |
| | | result = 100.0/800*(value-800)+200; |
| | | }else if (value<=2100) { |
| | | result = 100/500*(value-1600)+300; |
| | | result = 100.0/500*(value-1600)+300; |
| | | }else { |
| | | result = 100/520*(value-2100)+400; |
| | | result = 100.0/520*(value-2100)+400; |
| | | } |
| | | return result; |
| | | } |
| | |
| | | if(value<=0) { |
| | | result=(double) 0; |
| | | }else if (value<=40) { |
| | | result = 50/40*(value-0)+0; |
| | | result = 50.0/40*(value-0)+0; |
| | | }else if (value<=80) { |
| | | result = 50/40*(value-40)+50; |
| | | result = 50.0/40*(value-40)+50; |
| | | }else if (value<=180) { |
| | | result = 50/100*(value-80)+100; |
| | | result = 50.0/100*(value-80)+100; |
| | | }else if (value<=280) { |
| | | result = 50/100*(value-180)+150; |
| | | result = 50.0/100*(value-180)+150; |
| | | }else if (value<=565) { |
| | | result = 100/285*(value-280)+200; |
| | | result = 100.0/285*(value-280)+200; |
| | | }else if (value<=750) { |
| | | result = 100/185*(value-565)+300; |
| | | result = 100.0/185*(value-565)+300; |
| | | }else { |
| | | result = 100/190*(value-750)+400; |
| | | result = 100.0/190*(value-750)+400; |
| | | } |
| | | return result; |
| | | } |
| | |
| | | if(value<=0) { |
| | | result=(double) 0; |
| | | }else if (value<=5) { |
| | | result = 50/2*(value-0)+0; |
| | | result = 50.0/2*(value-0)+0; |
| | | }else if (value<=10) { |
| | | result = 50/2*(value-2)+50; |
| | | result = 50.0/2*(value-2)+50; |
| | | }else if (value<=35) { |
| | | result = 50/10*(value-4)+100; |
| | | result = 50.0/10*(value-4)+100; |
| | | }else if (value<=60) { |
| | | result = 50/10*(value-14)+150; |
| | | result = 50.0/10*(value-14)+150; |
| | | }else if (value<=90) { |
| | | result = 100/12*(value-24)+200; |
| | | result = 100.0/12*(value-24)+200; |
| | | }else if (value<=120) { |
| | | result = 100/12*(value-36)+300; |
| | | result = 100.0/12*(value-36)+300; |
| | | }else { |
| | | result = 100/12*(value-48)+400; |
| | | result = 100.0/12*(value-48)+400; |
| | | } |
| | | return result; |
| | | } |