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(var defaultLocation: Pair<Double, Double>?) : 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)
|
|
override fun onWeightFactor(mData: DataVo, sop: CompanySOP): Double? {
|
val p1 = if (mData.lng == null || mData.lat == null || mData.lng == .0 || mData.lat == .0) defaultLocation else Pair(mData.lng!!, mData.lat!!)
|
p1 ?: return .0
|
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)
|
}
|
|
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
|
// println("距离:$dis")
|
val min = dis * 1000 / max(ws, 1.0) / 60
|
// println("距离转为风速分钟数:$min")
|
return min
|
}
|
}
|