美文网首页
计算空气相关指标

计算空气相关指标

作者: barriers | 来源:发表于2019-12-28 18:16 被阅读0次
package main

import (
    "fmt"
    "math"
)

func main() {
    data := map[string]float32{"co": 0.76, "o3": 14.39, "aqi": 60.5, "no2": 29.17, "so2": 5.48, "pm10": 71.01, "pm2_5": 35.26}
    //data := map[string]float32{"co": 0, "o3": 3000, "aqi": 60.5, "no2": 29.17, "so2": 5.48, "pm10": 71.01, "pm2_5": 35.26}
    var AQGrades = map[string][8]int{
        "so2":       {0, 150, 500, 650, 800, 1600, 2100, 2620},
        "no2":       {0, 100, 200, 700, 1200, 2340, 3090, 3840},
        "pm10":      {0, 50, 150, 250, 350, 420, 500, 600},
        "pm2_5":     {0, 35, 75, 115, 150, 250, 350, 500},
        "co":        {0, 5, 10, 35, 60, 90, 120, 150},
        "o3":        {0, 160, 200, 300, 400, 800, 1000, 1200},
        "aqi":       {0, 50, 100, 150, 200, 300, 400, 500},
    }
    var pollutants= [...] string{"so2", "no2", "pm10", "pm2_5", "co", "o3"}
    var IAQIS = make(map[string] int)
    for _, pollutant := range pollutants {
        standPollutantData := AQGrades[pollutant]
        length := len(standPollutantData)
        pollutantData := data[pollutant]
        if pollutantData <= 0 {
            IAQIS[pollutant] = 0
        } else if pollutantData >= float32(standPollutantData[length-1]){
            IAQIS[pollutant] = 500
        } else {
            var index int
            for key, standData := range standPollutantData {
                if float32(standData)>= pollutantData || length-1==key{
                    index = key
                    break
                }
            }
            if index != 0 {
                highAqi := float32(AQGrades["aqi"][index])
                lowAqi := float32(AQGrades["aqi"][index-1])
                highStand := float32(standPollutantData[index])
                lowStand := float32(standPollutantData[index-1])
                IAQIS[pollutant] = int(math.Ceil(float64((highAqi-lowAqi)/(highStand-lowStand)*(pollutantData-lowStand)+lowAqi)))
                //IAQIS[pollutant] = (highAqi-lowAqi)/(highStand-lowStand)*(pollutantData-lowStand)+lowAqi
            }
        }
    }
    fmt.Println(IAQIS)
    //var AQI = map[string] int{}
    maxData := 0
    primary_pollutant := map[int][]string{}
    for key, value := range IAQIS{
        if value>maxData{
            maxData = value
        }
        dataValue, exit := primary_pollutant[value]
        if !exit{
            //primary_pollutant[value] = []string{}
        }
        primary_pollutant[value] = append(dataValue, key)
        //b := map[string]int{"aqi": 61, "pollutants": ["pm10"]}
    }
    if maxData <= AQGrades["aqi"][1]{
        primary_pollutant[maxData] = []string{}
    }

    fmt.Println(primary_pollutant)
    fmt.Println(maxData, primary_pollutant[maxData])
}

相关文章

网友评论

      本文标题:计算空气相关指标

      本文链接:https://www.haomeiwen.com/subject/sigsoctx.html