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/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..9993a86 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() ?: .0,
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