From 2e024c986c14943a41f7bfe913cfef0cede64198 Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期二, 29 七月 2025 17:37:54 +0800
Subject: [PATCH] 2025.7.29 1. 动态溯源模块添加记录删除等debug功能

---
 src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedArea.kt |   85 +++++++++++++++++++++++++++++++-----------
 1 files changed, 63 insertions(+), 22 deletions(-)

diff --git a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedArea.kt b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedArea.kt
index fac9ce7..e9092d6 100644
--- a/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedArea.kt
+++ b/src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedArea.kt
@@ -20,26 +20,36 @@
      */
 
     constructor(
+        historyData: List<BaseRealTimeData>,
         exceptionData: List<BaseRealTimeData>,
         config: RTExcWindLevelConfig,
-        windLevelCondition: RTExcWindLevelConfig.WindLevelCondition,
+        windLevelCondition: RTExcWindLevelConfig.WindLevelCondition?,
     ) : this() {
-        distanceType = windLevelCondition.mutationRate.second
-        sourceTrace(exceptionData, config, windLevelCondition)
+        distanceType = windLevelCondition?.distanceType
+        distanceRange = distanceType?.disRange
+        distanceDes = distanceType?.des
+        windLevelCondition?.let { sourceTrace(historyData, exceptionData, config, it) }
     }
 
     var address: String? = null
 
-    // 姹℃煋鑼冨洿鍖哄煙(缁忕含搴﹀杈瑰舰)
+    // 姹℃煋鑼冨洿鎵囧舰鍖哄煙(缁忕含搴﹀杈瑰舰)
     var polygon: List<Pair<Double, Double>>? = null
+
+    // 杩戣窛绂绘薄鏌撳渾褰㈠尯鍩�
+    var closePolygon: List<Pair<Double, Double>>? = null
 
     // 姹℃煋鍙兘鐨勫彂鐢熻窛绂�
     var distanceType: DistanceType? = null
+
+    var distanceRange: Pair<Double, Double>? = null
+    var distanceDes: String? = null
 
     /**
      * 鍙嶅悜婧簮
      */
     private fun sourceTrace(
+        historyData: List<BaseRealTimeData>,
         exceptionData: List<BaseRealTimeData>,
         config: RTExcWindLevelConfig,
         windLevelCondition: RTExcWindLevelConfig.WindLevelCondition,
@@ -53,17 +63,28 @@
         val pair = avgData.longitude!!.toDouble() to avgData.latitude!!.toDouble()
 
         polygon = calSector(
-            avgData.windSpeed!!.toDouble(),
+            avgData.windDirection!!.toDouble(),
             pair,
-            windLevelCondition.mutationRate.second.disRange,
+            windLevelCondition.distanceType.disRange,
             config.sourceTraceDegOffset
-        )
+        ).map {
+            // 灏嗗潗鏍囪浆鎹负gcj02锛堢伀鏄熷潗鏍囩郴锛夛紝鍥犱负姹℃煋婧愬満鏅俊鎭兘涓烘鍧愭爣绯�
+            MapUtil.wgs84ToGcj02(it)
+        }
 
-        try {
-            val address = AMapService.reGeo(pair)
-            this.address = address.township + address.street
-        } catch (e: Exception) {
-            e.printStackTrace()
+        closePolygon = closeSourceTrace(historyData, pair).map {
+            // 灏嗗潗鏍囪浆鎹负gcj02锛堢伀鏄熷潗鏍囩郴锛夛紝鍥犱负姹℃煋婧愬満鏅俊鎭兘涓烘鍧愭爣绯�
+            MapUtil.wgs84ToGcj02(it)
+        }
+
+        if (config.isSearchAddress) {
+            try {
+                val address = AMapService.reGeo(MapUtil.wgs84ToGcj02(pair))
+                this.address = address.district + address.township + address.street
+//                Thread.sleep(100)
+            } catch (e: Exception) {
+                e.printStackTrace()
+            }
         }
 
     }
@@ -89,25 +110,45 @@
         val result = mutableListOf<Pair<Double, Double>>()
 
         if (distanceRange.first == .0) {
-            result.add(center)
+//            result.add(center)
+            var startDeg = 0
+            while (startDeg <= 360) {
+                val p = MapUtil.getPointByLen(center, distanceRange.second, startDeg * PI / 180)
+                result.add(p)
+                startDeg++
+            }
         } else {
-            // 浠庡紑濮嬭搴﹀惊鐜绠楀潗鏍囩偣鍊肩粨鏉熻搴︼紝姝ラ暱1掳
+            // 浠庡紑濮嬭搴﹀惊鐜绠楀潗鏍囩偣鑷崇粨鏉熻搴︼紝姝ラ暱1掳
             var startDeg = sDeg
             while (startDeg <= eDeg) {
                 val p = MapUtil.getPointByLen(center, distanceRange.first, startDeg * PI / 180)
                 result.add(p)
                 startDeg++
             }
+            if (distanceRange.second > .0) {
+                // 姝ゅ闇�瑕佷粠缁撴潫瑙掑害寮�濮嬪弽鍚戝惊鐜绠楄嚦寮�濮嬭搴︼紝姝ラ暱1掳锛屼娇寰椾袱缁勫潗鏍囩偣鎸夐『搴忔帓鍒楋紝鍙粯鍒跺搴旂殑澶氳竟褰�
+                startDeg = eDeg
+                while (startDeg >= sDeg) {
+                    val p = MapUtil.getPointByLen(center, distanceRange.second, startDeg * PI / 180)
+                    result.add(p)
+                    startDeg--
+                }
+            }
         }
 
-        if (distanceRange.second > .0) {
-            // 姝ゅ闇�瑕佷粠缁撴潫瑙掑害寮�濮嬪弽鍚戝惊鐜绠楄嚦寮�濮嬭搴︼紝姝ラ暱1掳锛屼娇寰椾袱缁勫潗鏍囩偣鎸夐『搴忔帓鍒楋紝鍙粯鍒跺搴旂殑澶氳竟褰�
-            var startDeg = eDeg
-            while (startDeg >= sDeg) {
-                val p = MapUtil.getPointByLen(center, distanceRange.second, startDeg * PI / 180)
-                result.add(p)
-                startDeg--
-            }
+        return result
+    }
+
+    private fun closeSourceTrace(
+        historyData: List<BaseRealTimeData>,
+        center: Pair<Double, Double>,
+    ): List<Pair<Double, Double>> {
+        val result = mutableListOf<Pair<Double, Double>>()
+        var startDeg = 0
+        while (startDeg <= 360) {
+            val p = MapUtil.getPointByLen(center, DistanceType.TYPE1.disRange.second, startDeg * PI / 180)
+            result.add(p)
+            startDeg++
         }
 
         return result

--
Gitblit v1.9.3