From 94fee0b511279679b43e210878d3d36e5a14384b Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期二, 30 九月 2025 09:14:10 +0800
Subject: [PATCH] 2025.9.30 1. 新增走航任务统计功能

---
 src/main/kotlin/com/flightfeather/uav/biz/mission/MissionUtil.kt |   82 +++++++++++++++++++++++++++++++++++-----
 1 files changed, 71 insertions(+), 11 deletions(-)

diff --git a/src/main/kotlin/com/flightfeather/uav/biz/mission/MissionUtil.kt b/src/main/kotlin/com/flightfeather/uav/biz/mission/MissionUtil.kt
index b5017c7..2b49150 100644
--- a/src/main/kotlin/com/flightfeather/uav/biz/mission/MissionUtil.kt
+++ b/src/main/kotlin/com/flightfeather/uav/biz/mission/MissionUtil.kt
@@ -1,7 +1,9 @@
 package com.flightfeather.uav.biz.mission
 
+import com.flightfeather.uav.common.net.AMapService
 import com.flightfeather.uav.common.utils.MapUtil
 import com.flightfeather.uav.domain.entity.BaseRealTimeData
+import com.flightfeather.uav.domain.entity.avg
 
 /**
  * 璧拌埅浠诲姟璁$畻宸ュ叿
@@ -15,18 +17,76 @@
      */
     fun calKilometres(data: List<BaseRealTimeData>): Double {
         var distance = .0
-        for (i in 1 until data.size) {
-            val a = data[i - 1]
-            val b = data[i]
-            if (a.longitude == null || a.latitude == null || b.longitude == null || b.latitude == null) continue
+        var lastValidPoint: BaseRealTimeData? = null
 
-            distance += MapUtil.getDistance(
-                a.longitude!!.toDouble(),
-                a.latitude!!.toDouble(),
-                b.longitude!!.toDouble(),
-                b.latitude!!.toDouble()
-            )
+        for (point in data) {
+            // 璺宠繃鏃犳晥鐐�
+            if (point.longitude == null || point.latitude == null) continue
+
+            // 濡傛灉瀛樺湪涓婁竴涓湁鏁堢偣锛屽垯璁$畻璺濈
+            lastValidPoint?.let { prevPoint ->
+                distance += MapUtil.getDistance(
+                    prevPoint.longitude!!.toDouble(),
+                    prevPoint.latitude!!.toDouble(),
+                    point.longitude!!.toDouble(),
+                    point.latitude!!.toDouble()
+                )
+            }
+
+            // 鏇存柊涓婁竴涓湁鏁堢偣
+            lastValidPoint = point
         }
         return distance
     }
-}
\ No newline at end of file
+
+    /**
+     * 鏍规嵁杞ㄨ抗鐐硅绠楁墍灞炲尯鍩燂紙涔¢晣+琛楅亾锛�
+     * @param data 璧拌埅杞ㄨ抗鐐瑰垪琛�
+     * @return 鍖哄煙鍚嶇О锛堜埂闀�+琛楅亾锛夛紝鑻ユ棤娉曡绠楀垯杩斿洖null
+     */
+    @Suppress("UNCHECKED_CAST")
+    fun calRegion(data: List<BaseRealTimeData>): String? {
+        // 璁$畻鎵�鏈夎建杩圭偣鐨勫钩鍧囧潗鏍囷紙涓績鐐癸級
+        val avgData = data.avg()
+        val pair = avgData.longitude?.toDouble() to avgData.latitude?.toDouble()
+        // 鑻ュ钩鍧囧潗鏍囨棤鏁堝垯杩斿洖null
+        if (pair.first == null || pair.second == null) return null
+        // 灏哤GS84鍧愭爣杞崲涓篏CJ02鍧愭爣鍚庤繘琛岄�嗗湴鐞嗙紪鐮佽幏鍙栧湴鍧�淇℃伅
+        val address = AMapService.reGeo(MapUtil.wgs84ToGcj02(pair as Pair<Double, Double>))
+        // 杩斿洖涔¢晣鍜岃閬撳悕绉扮粍鍚�
+        return address.township
+    }
+
+    /**
+     * 鏁版嵁娓呮礂
+     * 1. 淇鐢变簬纭欢璁惧鍗¢】瀵艰嚧鐨勬暟鎹噰鏍锋椂闂翠笉鍙橀棶棰橈紝閲囩敤鑷姩绱姞鏁版嵁鍛ㄦ湡鐨勬柟寮忎慨鏀归噰鏍锋椂闂�
+     * @param data 鍘熷鏁版嵁鍒楄〃
+     * @param period 鏁版嵁鍛ㄦ湡锛屽崟浣嶏細绉�
+     * @return 娓呮礂鍚庨渶瑕佷慨鏀圭殑鏁版嵁鍒楄〃
+     */
+    fun dataClean(dataList: List<BaseRealTimeData>, period: Long): List<BaseRealTimeData> {
+        val cleanedData = mutableListOf<BaseRealTimeData>()
+        var errorData: BaseRealTimeData? = null
+        dataList.forEachIndexed { index, data ->
+            if (index == 0) {
+                return@forEachIndexed
+            }
+            val lastOne = dataList[index - 1]
+            if (errorData == null) {
+                if (data.dataTime!!.time == lastOne.dataTime!!.time) {
+                    data.dataTime?.time = lastOne.dataTime?.time!!.plus(period * 1000)
+                    cleanedData.add(data)
+                    errorData = lastOne
+                }
+            } else {
+                if (data.dataTime!!.time == errorData!!.dataTime!!.time) {
+                    data.dataTime?.time = lastOne.dataTime?.time!!.plus(period * 1000)
+                    cleanedData.add(data)
+                } else {
+                    errorData = null
+                }
+            }
+        }
+        return cleanedData
+    }
+}

--
Gitblit v1.9.3