| | |
| | | package com.flightfeather.uav.socket.eunm |
| | | |
| | | import com.flightfeather.uav.biz.dataanalysis.BaseExceptionAnalysis |
| | | |
| | | /** |
| | | * @author riku |
| | | * Date: 2020/6/10 |
| | |
| | | PM10(7, "PM10",3), |
| | | TEMPERATURE(8,"TEMPERATURE",3), |
| | | HUMIDITY(9, "HUMIDITY",3), |
| | | VOC(10, "VOC",3), |
| | | NOI(11, "NOI",3),//负氧离子 |
| | | LNG(12,"LNG",3),//经度 |
| | | LAT(13,"LAT",3);//纬度 |
| | | VOC(10, "VOC",6), |
| | | NOI(11, "NOI",6),//负氧离子 |
| | | LNG(12,"LNG",6),//经度 |
| | | LAT(13,"LAT",5),//纬度 |
| | | VELOCITY(14, "VELOCITY", 3),//速度 |
| | | TIME(15, "TIME", 6),//时间 |
| | | WIND_SPEED(16, "WIND_SPEED", 3), |
| | | WIND_DIRECTION(17, "WIND_DIRECTION", 2), |
| | | HEIGHT(18, "HEIGHT", 3), |
| | | NO(19, "NO", 6); |
| | | |
| | | companion object { |
| | | |
| | | /** |
| | | * 通过索引获取枚举类型,用于数据分析 |
| | | * @see [BaseExceptionAnalysis] |
| | | */ |
| | | fun getByIndex(index: Int): FactorType? = when (index) { |
| | | 0 -> NO2 |
| | | 1 -> CO |
| | | 2 -> H2S |
| | | 3 -> SO2 |
| | | 4 -> O3 |
| | | 5 -> PM25 |
| | | 6 -> PM10 |
| | | 7 -> VOC |
| | | 19 -> NO |
| | | else -> null |
| | | } |
| | | |
| | | fun getByValue(value: Int): FactorType? = when (value) { |
| | | NO2.value -> NO2 |
| | | CO.value -> CO |
| | | H2S.value -> H2S |
| | |
| | | NOI.value -> NOI |
| | | LNG.value -> LNG |
| | | LAT.value -> LAT |
| | | VELOCITY.value -> VELOCITY |
| | | TIME.value -> TIME |
| | | WIND_SPEED.value -> WIND_SPEED |
| | | WIND_DIRECTION.value -> WIND_DIRECTION |
| | | HEIGHT.value -> HEIGHT |
| | | NO.value -> NO |
| | | else -> null |
| | | } |
| | | |
| | | fun getByName(name: String?): FactorType? = when (name) { |
| | | NO2.des -> NO2 |
| | | CO.des -> CO |
| | | H2S.des -> H2S |
| | | SO2.des -> SO2 |
| | | O3.des -> O3 |
| | | PM25.des -> PM25 |
| | | PM10.des -> PM10 |
| | | TEMPERATURE.des -> TEMPERATURE |
| | | HUMIDITY.des -> HUMIDITY |
| | | VOC.des -> VOC |
| | | NOI.des -> NOI |
| | | LNG.des -> LNG |
| | | LAT.des -> LAT |
| | | VELOCITY.des -> VELOCITY |
| | | TIME.des -> TIME |
| | | WIND_SPEED.des -> WIND_SPEED |
| | | WIND_DIRECTION.des -> WIND_DIRECTION |
| | | HEIGHT.des -> HEIGHT |
| | | NO.des -> NO |
| | | else -> null |
| | | } |
| | | |
| | | fun getRange(name: String?): Pair<Double, Double>? { |
| | | getByName(name)?.let { |
| | | return getRange(it) |
| | | } |
| | | return null |
| | | } |
| | | |
| | | /** |
| | | * 获取监测因子的合理范围 |
| | | */ |
| | | fun getRange(type: FactorType): Pair<Double, Double>? = when (type) { |
| | | NO -> Pair(0.1, 1000.0) |
| | | NO2 -> Pair(0.1, 1000.0) |
| | | CO -> Pair(1.0, 5000.0) |
| | | H2S -> Pair(0.1, 1000.0) |
| | | SO2 -> Pair(0.1, 1000.0) |
| | | O3 -> Pair(0.1, 2000.0) |
| | | PM25 -> Pair(0.1, 5000.0) |
| | | PM10 -> Pair(0.1, 10000.0) |
| | | TEMPERATURE -> Pair(-20.0, 70.0) |
| | | HUMIDITY -> Pair(0.0, 110.0) |
| | | VOC -> Pair(1.0, 5000.0) |
| | | NOI -> Pair(0.1, 1000.0) |
| | | LNG -> Pair(0.0, 180.0) |
| | | LAT -> Pair(0.0, 90.0) |
| | | VELOCITY -> Pair(0.0, 500.0) |
| | | TIME -> null |
| | | WIND_SPEED -> Pair(0.0, 100.0) |
| | | WIND_DIRECTION -> Pair(0.0, 360.0) |
| | | HEIGHT -> Pair(0.0, 1000.0) |
| | | else -> null |
| | | } |
| | | |
| | | fun getVMax(name: String?): Double? { |
| | | getByName(name)?.let { |
| | | return getVMax(it) |
| | | } |
| | | return null |
| | | } |
| | | |
| | | /** |
| | | * 不处理低于此值的值 |
| | | */ |
| | | fun getVMax(type: FactorType): Double? = when (type) { |
| | | NO -> 1.0 |
| | | NO2 -> 10.0 |
| | | CO -> 100.0 |
| | | H2S -> 10.0 |
| | | SO2 -> 10.0 |
| | | O3 -> 10.0 |
| | | PM25 -> 10.0 |
| | | PM10 -> 10.0 |
| | | TEMPERATURE -> 10.0 |
| | | HUMIDITY -> 10.0 |
| | | VOC -> 10.0 |
| | | NOI -> 10.0 |
| | | LNG -> 0.0 |
| | | LAT -> 0.0 |
| | | VELOCITY -> 0.0 |
| | | TIME -> 0.0 |
| | | WIND_SPEED -> 2.0 |
| | | WIND_DIRECTION -> 0.0 |
| | | HEIGHT -> 0.0 |
| | | else -> null |
| | | } |
| | | |
| | | /** |
| | | * 因子连续数据上升合理幅度(倍数) |
| | | */ |
| | | fun getMultiplier(name: String?): Double { |
| | | getByName(name)?.let { |
| | | return getMultiplier(it) |
| | | } |
| | | return 10.0 |
| | | } |
| | | |
| | | fun getMultiplier(type: FactorType): Double = when (type) { |
| | | PM25 -> 20.0 |
| | | PM10 -> 20.0 |
| | | VOC -> 10.0 |
| | | else -> 10.0 |
| | | } |
| | | |
| | | fun outputFactor(factorName: String?): Boolean { |
| | | return when (factorName) { |
| | | NO2.des, |
| | | CO.des, |
| | | H2S.des, |
| | | SO2.des, |
| | | O3.des, |
| | | PM25.des, |
| | | PM10.des, |
| | | TEMPERATURE.des, |
| | | HUMIDITY.des, |
| | | VOC.des, |
| | | WIND_SPEED.des, |
| | | WIND_DIRECTION.des -> true |
| | | else -> false |
| | | } |
| | | } |
| | | } |
| | | } |