| | |
| | | package com.flightfeather.uav.model.epw |
| | | |
| | | import com.flightfeather.uav.lightshare.bean.CompanySOP |
| | | import com.flightfeather.uav.lightshare.bean.DataVo |
| | | import com.flightfeather.uav.model.BaseWeight |
| | | import com.flightfeather.uav.socket.eunm.FactorType |
| | | import kotlin.math.abs |
| | | import kotlin.math.max |
| | | import kotlin.math.sqrt |
| | | |
| | | /** |
| | | * 风速距离权重 |
| | | * 监测点与污染源之间的物理距离与当前风速得出的权重 |
| | | */ |
| | | class WindDisWeight : BaseWeight() { |
| | | class WindDisWeight : BaseWeight<DataVo, CompanySOP>() { |
| | | |
| | | override val tag: String = "风速距离权重" |
| | | |
| | | override val sectionValues: List<Double> = listOf(2.0, 5.0, 8.0, 12.0, 20.0, 30.0) |
| | | |
| | | override val weights: List<Double> = listOf(1.0, 0.8, 0.6, 0.5, 0.3, 0.0) |
| | | |
| | | fun getWeight(dis: Double, ws: Double): Double { |
| | | val value = dis / 1000 / ws / 60 |
| | | return weightCal(value) |
| | | override fun onWeightFactor(mData: DataVo, sop: CompanySOP): Double? { |
| | | val p1 = Pair(mData.lng!!, mData.lat!!) |
| | | val p2 = Pair(sop.ciLongitude!!.toDouble(), sop.ciLatitude!!.toDouble()) |
| | | val ws = mData.getFactorData(FactorType.WIND_SPEED) |
| | | return if (ws == null) null else getWindSpeed(p1, p2, ws) |
| | | } |
| | | |
| | | fun getWeight(p1: Pair<Double, Double>, p2: Pair<Double, Double>, ws: Double): Double { |
| | | private fun getWindSpeed(p1: Pair<Double, Double>, p2: Pair<Double, Double>, ws: Double): Double { |
| | | val dx = p2.first - p1.first |
| | | val dy = p2.second - p1.second |
| | | val dis = sqrt(abs(dx * dx) + abs(dy * dy)) * 100 |
| | | return getWeight(dis, ws) |
| | | // println("距离:$dis") |
| | | val min = dis * 1000 / max(ws, 1.0) / 60 |
| | | // println("距离转为风速分钟数:$min") |
| | | return min |
| | | } |
| | | } |