From 3bb4fb15c664d29d179083698fdad35a661b1d7f Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期四, 28 八月 2025 14:57:40 +0800
Subject: [PATCH] 2025.8.28 1. 添加走航季度报告相关统计功能(待完成)

---
 src/main/kotlin/com/flightfeather/uav/biz/mission/MissionUtil.kt |   49 ++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 38 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..1edaf99 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,43 @@
      */
     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 + address.street
+    }
+}

--
Gitblit v1.9.3