From bf3bf9ff25ac106b556b2427cc382c8fcca63bff Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期二, 02 七月 2024 17:38:33 +0800
Subject: [PATCH] 1. 新增走航报告自动道路识别模块

---
 src/main/kotlin/com/flightfeather/uav/domain/entity/BaseRealTimeData.kt |   76 ++++++++++++++++++++++++++++++++++----
 1 files changed, 68 insertions(+), 8 deletions(-)

diff --git a/src/main/kotlin/com/flightfeather/uav/domain/entity/BaseRealTimeData.kt b/src/main/kotlin/com/flightfeather/uav/domain/entity/BaseRealTimeData.kt
index cb51649..3628094 100644
--- a/src/main/kotlin/com/flightfeather/uav/domain/entity/BaseRealTimeData.kt
+++ b/src/main/kotlin/com/flightfeather/uav/domain/entity/BaseRealTimeData.kt
@@ -1,18 +1,19 @@
 package com.flightfeather.uav.domain.entity
 
+import com.flightfeather.uav.biz.dataprocess.AvgPair
 import com.flightfeather.uav.common.utils.DateUtil
-import com.flightfeather.uav.dataprocess.AvgPair
 import com.flightfeather.uav.lightshare.bean.DataVo
 import com.flightfeather.uav.socket.bean.AirData
 import com.flightfeather.uav.socket.eunm.FactorType
 import java.math.BigDecimal
 import java.time.LocalDateTime
 import java.time.ZoneId
-import java.time.ZoneOffset
 import java.util.*
 import javax.persistence.Column
 import javax.persistence.Id
+import kotlin.math.atan
 import kotlin.math.cos
+import kotlin.math.round
 import kotlin.math.sin
 
 /**
@@ -109,12 +110,51 @@
             add(AirData().apply { setData(FactorType.HEIGHT, height) })
         }
     }
+
+    fun getByFactorIndex(i: Int): Float? {
+        return when (i) {
+            0 -> no2
+            1 -> co
+            2 -> h2s
+            3 -> so2
+            4 -> o3
+            5 -> pm25
+            6 -> pm10
+            7 -> voc
+            else -> null
+        }
+    }
+
+    fun getByFactorType(type: FactorType?): Float? {
+        return when (type) {
+            FactorType.NO2 -> no2
+            FactorType.CO -> co
+            FactorType.H2S -> h2s
+            FactorType.SO2 -> so2
+            FactorType.O3 -> o3
+            FactorType.PM25 -> pm25
+            FactorType.PM10 -> pm10
+            FactorType.TEMPERATURE -> temperature
+            FactorType.HUMIDITY -> humidity
+            FactorType.VOC -> voc
+            FactorType.NOI -> noi
+            FactorType.LNG -> longitude?.toFloat()
+            FactorType.LAT -> latitude?.toFloat()
+            FactorType.VELOCITY -> velocity
+//            FactorType.TIME -> noi
+            FactorType.WIND_SPEED -> windSpeed
+            FactorType.WIND_DIRECTION -> windDirection
+            FactorType.HEIGHT -> height
+            else -> null
+        }
+    }
+
 }
 
-fun List<RealTimeDataGrid>.avg(): RealTimeDataGrid {
+fun List<BaseRealTimeData>.avg(): BaseRealTimeData {
     //椋庡悜閲囩敤鍗曚綅鐭㈤噺娉曟眰鍙栧潎鍊�
-    var u = 0f//涓滆タ鏂逛綅鍒嗛噺鎬诲拰
-    var v = 0f//鍗楀寳鏂逛綅鍒嗛噺鎬诲拰
+    var u = .0//涓滆タ鏂逛綅鍒嗛噺鎬诲拰
+    var v = .0//鍗楀寳鏂逛綅鍒嗛噺鎬诲拰
     var c = 0//椋庡悜鏁版嵁璁℃暟
 
     //闄ら鍚戝鐨勫叾浠栧洜瀛愰噰鐢ㄧ畻鏈钩鍧囨硶姹傚彇鍧囧��
@@ -126,8 +166,9 @@
     forEach {
         //椋庡悜
         it.windDirection?.let {w ->
-            u += sin(w)
-            v += cos(w)
+            val r = Math.toRadians(w.toDouble())
+            u += sin(r)
+            v += cos(r)
             c++
         }
         //鍏朵綑鍥犲瓙
@@ -235,7 +276,7 @@
         }
     }
 
-    return RealTimeDataGrid().apply {
+    return RealTimeDataGridMin().apply {
         val time = LocalDateTime.ofInstant(get(0).dataTime?.toInstant(), ZoneId.systemDefault()).withSecond(0)
         deviceCode = get(0).deviceCode
         dataTime = Date.from(time.atZone(ZoneId.systemDefault()).toInstant())
@@ -257,5 +298,24 @@
         velocity = tmpList[14].avg()
         windSpeed = tmpList[15].avg()
         height = tmpList[16].avg()
+
+        if (c != 0) {
+            val avgU = u / c
+            val avgV = v / c
+            var a = atan(avgU / avgV)
+            a = Math.toDegrees(a)
+            /**
+             * avgU>0;avgV>0: 鐪熷疄瑙掑害澶勪簬绗竴璞¢檺锛屼慨姝e�间负+0掳
+             * avgU>0;avgV<0: 鐪熷疄瑙掑害澶勪簬绗簩璞¢檺锛屼慨姝e�间负+180掳
+             * avgU<0;avgV<0: 鐪熷疄瑙掑害澶勪簬绗笁璞¢檺锛屼慨姝e�间负+180掳
+             * avgU<0;avgV>0: 鐪熷疄瑙掑害澶勪簬绗洓璞¢檺锛屼慨姝e�间负+360掳
+             */
+            a += if (avgV > 0) {
+                if (avgU > 0) 0 else 360
+            } else {
+                180
+            }
+            windDirection = round(a.toFloat())
+        }
     }
 }
\ No newline at end of file

--
Gitblit v1.9.3