From 9a9a27f185bc0cf9dc0001cfc6839e6d13dbccd9 Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期四, 08 五月 2025 17:38:30 +0800
Subject: [PATCH] 1. 添加了动态污染溯源相关功能逻辑

---
 src/main/kotlin/com/flightfeather/uav/biz/dataprocess/RoadSegment.kt |   52 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 50 insertions(+), 2 deletions(-)

diff --git a/src/main/kotlin/com/flightfeather/uav/biz/dataprocess/RoadSegment.kt b/src/main/kotlin/com/flightfeather/uav/biz/dataprocess/RoadSegment.kt
index e2fbd29..93403a2 100644
--- a/src/main/kotlin/com/flightfeather/uav/biz/dataprocess/RoadSegment.kt
+++ b/src/main/kotlin/com/flightfeather/uav/biz/dataprocess/RoadSegment.kt
@@ -42,10 +42,15 @@
                 avgGPS.add(d.longitude!!.toDouble() to d.latitude!!.toDouble())
             }
         }
-        val gdGPS = AMapService.coordinateConvert(avgGPS)
+        val gdGPS = mutableListOf<Pair<Double, Double>>()
+        val _avgGPS = prepareForConvert(avgGPS)
+        _avgGPS.forEach {
+            gdGPS.addAll(AMapService.coordinateConvert(it))
+        }
         // 閫氳繃楂樺痉API鏌ヨ鍧愭爣瀵瑰簲鐨勮矾娈�
         val segmentInfoList = mutableListOf<SegmentInfo>()
         gdGPS.forEachIndexed { i, pair ->
+            Thread.sleep(400)
             val address = AMapService.reGeo(pair)
             segmentInfoList.add(SegmentInfo().apply {
                 missionCode = mission.missionCode
@@ -62,6 +67,49 @@
             })
         }
         // 缁撴灉鍏ュ簱
-        segmentInfoRep.insert(segmentInfoList)
+        saveResult(segmentInfoList)
+    }
+
+    /**
+     * 鍧愭爣杞崲鍒嗘鍑嗗
+     * 楂樺痉API鐨勫潗鏍囪浆鎹㈡帴鍙d竴娆¤闂渶澶氭敮鎸�40瀵瑰潗鏍�
+     */
+    private fun prepareForConvert(gpsList: List<Pair<Double, Double>>): List<List<Pair<Double, Double>>> {
+        val res = mutableListOf<List<Pair<Double, Double>>>()
+        val maxLen = 40
+        var start = 0
+        var end = start + maxLen
+        while (end < gpsList.size) {
+            res.add(gpsList.subList(start, end))
+            start += maxLen
+            end += maxLen
+        }
+        if (start < gpsList.size) {
+            res.add(gpsList.subList(start, gpsList.size))
+        }
+        return res
+    }
+
+    /**
+     * 缁撴灉鍏ュ簱
+     * 鍏ュ簱涔嬪墠锛屽皢杩炵画骞跺睘浜庡悓涓�閬撹矾鐨勮褰曞悎骞�
+     */
+    private fun saveResult(segmentInfoList:List<SegmentInfo>) {
+        val res = mutableListOf<SegmentInfo>()
+        segmentInfoList.forEach { s ->
+            // 鍒ゆ柇褰撳墠璁板綍鍜屼笂涓褰曟槸鍚﹀睘浜庡悓涓�鏉¢亾璺�
+            if (res.isNotEmpty()) {
+                val lastOne = res.last()
+                // 鑻ュ睘浜庡悓涓�閬撹矾锛屽悎骞�
+                if (lastOne.street == s.street) {
+                    lastOne.endTime = s.endTime
+                } else {
+                    res.add(s)
+                }
+            } else {
+                res.add(s)
+            }
+        }
+        segmentInfoRep.insert(res)
     }
 }
\ No newline at end of file

--
Gitblit v1.9.3