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.PI
|
import kotlin.math.abs
|
import kotlin.math.atan2
|
|
/**
|
* 风向权重
|
*/
|
class WindDirWeight(var defaultLocation: Pair<Double, Double>?) : BaseWeight<DataVo, CompanySOP>() {
|
|
override val tag: String = "风向权重"
|
|
override val sectionValues: List<Double> = listOf(22.5, 67.5, 112.5, 157.5, 180.0)
|
|
override val weights: List<Double> = listOf(1.0, 0.8, 0.5, 0.2, 0.1)
|
|
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 wd = mData.getFactorData(FactorType.WIND_DIRECTION) ?: 0.0
|
return getAngle(p1, p2, wd)
|
}
|
|
|
private fun getAngle(p1: Pair<Double, Double>, p2: Pair<Double, Double>, wd: Double): Double {
|
val dx = p2.first - p1.first
|
val dy = p2.second - p1.second
|
var x1 = atan2(dy, dx) * 180 / PI
|
if (x1 < 0) x1 += 360
|
var x2 = 270 - wd
|
if (x2 < 0) x2 += 360
|
x1 = abs(x2 - x1)
|
if (x1 > 180) x1 = 360 - x1
|
// println("夹角:$x1")
|
return x1
|
}
|
}
|