feiyu02
2021-12-30 88ae069fcf657c1790bb04b444e150c06f04e5f6
src/main/kotlin/com/flightfeather/uav/model/epw/WindDirWeight.kt
@@ -1,23 +1,35 @@
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.BaseSOP
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
import kotlin.math.sqrt
/**
 *
 * 风向权重
 */
class WindDirWeight : BaseWeight() {
class WindDirWeight(var defaultLocation: Pair<Double, Double>?) : BaseWeight<DataVo, BaseSOP>() {
    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)
    fun getWeight(deg: Double):Double {
        return weightCal(deg)
    override fun onWeightFactor(mData: DataVo, sop: BaseSOP): 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)
    }
    fun getWeight(p1: Pair<Double, Double>, p2: Pair<Double, Double>, wd: Int): Double {
    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
@@ -25,8 +37,9 @@
        var x2 = 270 - wd
        if (x2 < 0) x2 += 360
        x1 = abs(x2 - x1)
        if (x1>180) x1 = 360 - x1
        return weightCal(x1)
        if (x1 > 180) x1 = 360 - x1
//        println("夹角:$x1")
        x1 = 180 - x1
        return x1
    }
}