From 5b0d58c3f7f35f61c0a0437bac3ff708db57fe61 Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期四, 18 七月 2024 17:34:16 +0800
Subject: [PATCH] 1. 修正实时走航数据平滑处理算法,PM2.5、PM10、VOC采用新的修正算法

---
 src/main/kotlin/com/flightfeather/uav/domain/repository/RealTimeDataRep.kt            |    1 
 src/main/kotlin/com/flightfeather/uav/model/epw/WeightType.kt                         |    4 +-
 src/main/kotlin/com/flightfeather/uav/repository/impl/AirDataRepositoryImpl.kt        |    3 +
 src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/ExceptionAnalysisController.kt |    2 
 src/main/kotlin/com/flightfeather/uav/socket/eunm/FactorType.kt                       |   14 +++++++
 src/main/kotlin/com/flightfeather/uav/model/epw/EPWDataPrep.kt                        |   49 ++++++++++++++++--------
 6 files changed, 54 insertions(+), 19 deletions(-)

diff --git a/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/ExceptionAnalysisController.kt b/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/ExceptionAnalysisController.kt
index f7d5760..ed6c540 100644
--- a/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/ExceptionAnalysisController.kt
+++ b/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/ExceptionAnalysisController.kt
@@ -20,7 +20,7 @@
  * 鏁版嵁寮傚父鍒嗘瀽鎺у埗鍣�
  */
 @Component
-class ExceptionAnalysisController(
+class  ExceptionAnalysisController(
     private val realTimeDataRep: RealTimeDataRep,
     private val locationRoadNearby: LocationRoadNearby,
     private val segmentInfoRep: SegmentInfoRep,
diff --git a/src/main/kotlin/com/flightfeather/uav/domain/repository/RealTimeDataRep.kt b/src/main/kotlin/com/flightfeather/uav/domain/repository/RealTimeDataRep.kt
index 7f573b2..b41950d 100644
--- a/src/main/kotlin/com/flightfeather/uav/domain/repository/RealTimeDataRep.kt
+++ b/src/main/kotlin/com/flightfeather/uav/domain/repository/RealTimeDataRep.kt
@@ -68,6 +68,7 @@
                     })
                 }
             }
+            else -> Unit
         }
         return result
     }
diff --git a/src/main/kotlin/com/flightfeather/uav/model/epw/EPWDataPrep.kt b/src/main/kotlin/com/flightfeather/uav/model/epw/EPWDataPrep.kt
index c17296d..40bfa5a 100644
--- a/src/main/kotlin/com/flightfeather/uav/model/epw/EPWDataPrep.kt
+++ b/src/main/kotlin/com/flightfeather/uav/model/epw/EPWDataPrep.kt
@@ -29,10 +29,7 @@
     // 鍧囧�煎�嶆暟鍙傛暟
     private val xratio = 3
 
-    // 杩炵画鏁版嵁鐨勫悎鐞嗘渶澶у闀垮�嶇巼
-    private val multiplier = 20
-
-    // 闇�瑕佸鐞嗙殑鍥犲瓙绫诲瀷
+    // 闇�瑕佸钩婊戝鐞嗙殑鍥犲瓙绫诲瀷
     private var calTypes = when (deviceType) {
         UWDeviceType.VEHICLE,
         UWDeviceType.UAV,
@@ -41,6 +38,25 @@
         UWDeviceType.GRID -> WeightType.prepFixed
         else -> WeightType.prepFixed
     }
+
+    // 鍙渶瑕佹鏌ヨ寖鍥村拰鍙樺寲骞呭害鐨勫洜瀛愮被鍨�
+    private var rangeTypes = listOf(
+        FactorType.PM25.des,
+        FactorType.PM10.des,
+        FactorType.VOC.des
+    )
+
+    // 鏃犻渶淇鐨勫洜瀛愮被鍨�
+    private var noCalTypes = listOf(
+        FactorType.TEMPERATURE.des,
+        FactorType.HUMIDITY.des,
+        FactorType.LNG.des,
+        FactorType.LAT.des,
+        FactorType.VELOCITY.des,
+        FactorType.TIME.des,
+        FactorType.WIND_DIRECTION.des,
+        FactorType.HEIGHT.des
+    )
 
     private val lastData = mutableListOf<DataVo>()
 
@@ -151,26 +167,27 @@
                         // 鍘婚櫎鏃犳晥鍊肩殑鏍囧噯宸�
                         val std = standardDeviation(avg.first, list, it.factorName)
                         // 鍚堢悊鏈�澶у��
-                        val max = max(avg.first + std * nstd, avg.first + avg.first * xratio)
+                        var maxValue = max(avg.first + std * nstd, avg.first + avg.first * xratio)
+                        maxValue = max(maxValue, FactorType.getRange(it.factorName)?.second ?: .0)
                         // 鍚堢悊鏈�灏忓��
-                        val min = min(avg.first - std * nstd, avg.first / (1 + xratio))
+                        val minValue = min(avg.first - std * nstd, avg.first / (1 + xratio))
 
                         // 鍒ゆ柇鐩戞祴鍥犲瓙鏄惁闇�瑕佽繘琛屽钩婊戝鐞嗭紝
-                        // 鑻ヤ笉闇�瑕侊紝鍒欏垽鏂噺绾ф槸鍚﹀湪鍚堢悊鑼冨洿鍐呬互鍙婂彉鍖栧�嶇巼鏄惁鍦ㄥ悎鐞嗚寖鍥村唴
-                        if (!calTypes.contains(it.factorName)) {
-                            if (isInRange(it) != true || excessiveChange(it) == true) {
-                                // 閲囩敤璁$畻鎵�寰楀潎鍊间唬鏇垮師濮嬪��
-                                it.factorData = avg.first
-                            }
-                        } else {
+                        if (calTypes.contains(it.factorName)) {
                             // 鏁版嵁涓嶅浜庡悎鐞嗚寖鍥村苟涓旀湁鏁堜釜鏁拌揪鏍囨椂锛岄噰鐢ㄨ绠楁墍寰楀潎鍊间唬鏇垮師濮嬪��
                             if (avg.second > max(ncal / 5, 2)
-                                && (it.factorData!! < min || it.factorData!! > max)
+                                && (it.factorData!! < minValue || it.factorData!! > maxValue)
                             ) {
                                 it.factorData = avg.first
                             }
                         }
-
+                        // 鍒ゆ柇閲忕骇鏄惁鍦ㄥ悎鐞嗚寖鍥村唴浠ュ強鍙樺寲鍊嶇巼鏄惁鍦ㄥ悎鐞嗚寖鍥村唴
+                        else if (rangeTypes.contains(it.factorName)) {
+                            if (isInRange(it) != true || excessiveChange(it) == true) {
+                                // 閲囩敤璁$畻鎵�寰楀潎鍊间唬鏇垮師濮嬪��
+                                it.factorData = avg.first
+                            }
+                        }
                     }
                 }
             }
@@ -289,6 +306,6 @@
                 break
             }
         }
-        return m > multiplier
+        return m > FactorType.getMultiplier(airData.factorName)
     }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/flightfeather/uav/model/epw/WeightType.kt b/src/main/kotlin/com/flightfeather/uav/model/epw/WeightType.kt
index 6353389..dd40a49 100644
--- a/src/main/kotlin/com/flightfeather/uav/model/epw/WeightType.kt
+++ b/src/main/kotlin/com/flightfeather/uav/model/epw/WeightType.kt
@@ -13,8 +13,8 @@
         FactorType.O3.des,
 //        FactorType.PM25.des,
 //        FactorType.PM10.des,
-        FactorType.VOC.des,
-        FactorType.WIND_SPEED.des
+//        FactorType.VOC.des,
+//        FactorType.WIND_SPEED.des
     )
 
     // 瀹氱偣鐩戞祴
diff --git a/src/main/kotlin/com/flightfeather/uav/repository/impl/AirDataRepositoryImpl.kt b/src/main/kotlin/com/flightfeather/uav/repository/impl/AirDataRepositoryImpl.kt
index 0826636..33b0734 100644
--- a/src/main/kotlin/com/flightfeather/uav/repository/impl/AirDataRepositoryImpl.kt
+++ b/src/main/kotlin/com/flightfeather/uav/repository/impl/AirDataRepositoryImpl.kt
@@ -97,6 +97,7 @@
                 realTimeDataGridMapper.insert(d)
                 count++
             }
+            else -> Unit
         }
         return count
     }
@@ -123,6 +124,7 @@
                     realTimeDataGridMapper.insert(d)
                     count++
                 }
+                else -> Unit
             }
         }
         return count
@@ -202,6 +204,7 @@
                 UWDeviceType.BOAT -> {
 
                 }
+                else -> Unit
             }
         }
         return count
diff --git a/src/main/kotlin/com/flightfeather/uav/socket/eunm/FactorType.kt b/src/main/kotlin/com/flightfeather/uav/socket/eunm/FactorType.kt
index 0c934b4..5ae4e9f 100644
--- a/src/main/kotlin/com/flightfeather/uav/socket/eunm/FactorType.kt
+++ b/src/main/kotlin/com/flightfeather/uav/socket/eunm/FactorType.kt
@@ -152,6 +152,20 @@
             else -> null
         }
 
+        fun getMultiplier(name: String?): Double {
+            getByName(name)?.let {
+                return getMultiplier(it)
+            }
+            return 10.0
+        }
+
+        fun getMultiplier(type: FactorType): Double = when (type) {
+            PM25 -> 20.0
+            PM10 -> 20.0
+            VOC -> 10.0
+            else -> 10.0
+        }
+
         fun outputFactor(factorName: String?): Boolean {
             return when (factorName) {
                 NO2.des,

--
Gitblit v1.9.3