feiyu02
2025-05-28 19c90b219bd80f82bfcf799a7adfd03fd469c0b7
1. 新增动态污染溯源新的判定逻辑(待完成)
已修改4个文件
已添加6个文件
152 ■■■■ 文件已修改
src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/RealTimeExceptionAnalysisController.kt 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/DistanceType.kt 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedArea.kt 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedClue.kt 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedData.kt 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSource.kt 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSummary.kt 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/RealTimeExceptionResult.kt 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/common/utils/MapUtil.kt 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/socket/handler/UnderwayWebSocketServerHandler.kt 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/RealTimeExceptionAnalysisController.kt
@@ -43,7 +43,7 @@
                    .withMain(FactorType.VOC)
                    .create()
            )
        initTask(config)
        initTask()
    }
    constructor(sceneInfoRep: SceneInfoRep) : this(sceneInfoRep, null)
@@ -55,7 +55,7 @@
    private val taskList = mutableListOf<BaseExceptionAnalysis<RealTimeAnalysisConfig, RealTimeExceptionResult>>()
    private fun initTask(config: RealTimeAnalysisConfig) {
    fun initTask() {
        taskList.clear()
        taskList.apply {
            add(
@@ -139,9 +139,11 @@
        // æ›´æ–°ä¸­é—´ç‚¹ä¿¡æ¯
        ex.midData = avgData.apply {
            dataTime = midData.dataTime
            createTime = midData.createTime
            longitude = midData.longitude
            latitude = midData.latitude
        }
        }.toDataVo()
        // æ›´æ–°æº¯æºèŒƒå›´å†…的污染场景信息
        ex.relatedSceneList = result
    }
@@ -164,14 +166,24 @@
        val eDeg = windDir + defaultDegOffset
        val distance = windSpeed * durationMin * 60
        // å·¦ä¾§ï¼ˆé€†æ—¶é’ˆä¾§ï¼‰é¡¶ç‚¹
        val p1 = MapUtil.getPointByLen(center, distance, sDeg * PI / 180)
        // é£Žå‘反向顶点
        val p2 = MapUtil.getPointByLen(center, distance, windDir * PI / 180)
        // å³ä¾§ï¼ˆé¡ºæ—¶é’ˆä¾§ï¼‰é¡¶ç‚¹
        val p3 = MapUtil.getPointByLen(center, distance, eDeg * PI / 180)
        val result = mutableListOf(center)
        var startDeg = sDeg
        while (startDeg < eDeg) {
            val p = MapUtil.getPointByLen(center, distance, startDeg * PI / 180)
            result.add(p)
            startDeg++
        }
        return listOf(center, p1, p2, p3)
        return result
//        // å·¦ä¾§ï¼ˆé€†æ—¶é’ˆä¾§ï¼‰é¡¶ç‚¹
//        val p1 = MapUtil.getPointByLen(center, distance, sDeg * PI / 180)
//        // é£Žå‘反向顶点
//        val p2 = MapUtil.getPointByLen(center, distance, windDir * PI / 180)
//        // å³ä¾§ï¼ˆé¡ºæ—¶é’ˆä¾§ï¼‰é¡¶ç‚¹
//        val p3 = MapUtil.getPointByLen(center, distance, eDeg * PI / 180)
//
//        return listOf(center, p1, p2, p3)
    }
}
src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/DistanceType.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.flightfeather.uav.biz.sourcetrace.model
/**
 * åŠ¨æ€æº¯æºçº¿ç´¢è·ç¦»ç±»åž‹
 * @date 2025/5/28
 * @author feiyu02
 */
enum class DistanceType(val des: String) {
    TYPE1("50ç±³"),
    TYPE2("50ç±³ - 500ç±³"),
    TYPE3("50ç±³ - 1公里"),
    TYPE4("50ç±³ - 2公里")
}
src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedArea.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.flightfeather.uav.biz.sourcetrace.model
/**
 * åŠ¨æ€æº¯æºæ±¡æŸ“åŒºåŸŸ
 * é€šè¿‡åœ°å›¾åæ ‡ç‚¹å½¢æˆå¤šè¾¹å½¢æ¥æè¿°ä¸€å—污染区域
 * @date 2025/5/27
 * @author feiyu02
 */
class PollutedArea {
    var name: String? = null
    // æ±¡æŸ“范围区域(经纬度多边形)
    var polygon: List<Pair<Double, Double>>? = null
    // æ±¡æŸ“可能的发生距离
    var distanceType: DistanceType? = null
}
src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedClue.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
package com.flightfeather.uav.biz.sourcetrace.model
/**
 * æ±¡æŸ“线索
 * æ ¹æ®
 * @date 2025/5/27
 * @author feiyu02
 */
class PollutedClue {
}
src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedData.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.flightfeather.uav.biz.sourcetrace.model
import com.flightfeather.uav.domain.entity.BaseRealTimeData
import com.flightfeather.uav.lightshare.bean.DataVo
/**
 * æ±¡æŸ“数据
 * @date 2025/5/27
 * @author feiyu02
 */
class PollutedData {
    /**
     *
     * 1. è½¯é£Ž1.5m/s及以下,
     *     å‰åŽå€¼ä¸Šå‡å¹…度在50%以上1次,认为是临近发生(50ç±³)
     *     å‰åŽå€¼ä¸Šå‡å¹…度在20%以上1次,认为是远距离发生(50ç±³ - 500米)
     *     1.5 m/s及以下,静稳天气,临近发生(50ç±³)
     * 2. 1.6 - 7.9 m/s,前后值上升幅度在20%以上3次,认为是远距离发生(50ç±³ - 1公里)
     * 3. 8 - 13.8 m/s ä»¥ä¸Šï¼Œå‰åŽå€¼ä¸Šå‡å¹…度在10%以上3次,认为是远距离发生(50ç±³ - 2公里)
     */
    // é£Žé€Ÿ
    var windSpeed: Float? = null
    // å› å­é‡çº§å˜åŒ–幅度
    var percentage: Float? = null
    // å‘生次数
    var times: Int? = null
    // å¼‚常监测数据
    var dataList: MutableList<BaseRealTimeData> = mutableListOf()
    var dataVoList: MutableList<DataVo> = mutableListOf()
}
src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSource.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
package com.flightfeather.uav.biz.sourcetrace.model
/**
 * æ±¡æŸ“来源
 * ç³»ç»Ÿå†…部的污染场景、电子地图搜索得到的实际路段路口等标志信息
 * @date 2025/5/27
 * @author feiyu02
 */
class PollutedSource {
}
src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/PollutedSummary.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
package com.flightfeather.uav.biz.sourcetrace.model
/**
 * æ±¡æŸ“情况汇总
 * é’ˆå¯¹å•次走航,定时统计已有污染线索,按照策略给出走航建议
 * @date 2025/5/27
 * @author feiyu02
 */
class PollutedSummary {
}
src/main/kotlin/com/flightfeather/uav/biz/sourcetrace/model/RealTimeExceptionResult.kt
@@ -49,7 +49,7 @@
    var latitude: BigDecimal? = null
    // ä¸­é—´æ•°æ®ç‚¹åæ ‡
    var midData: BaseRealTimeData? = null
    var midData: DataVo? = null
//    var midLongitude: BigDecimal? = null
//    var midLatitude: BigDecimal? = null
src/main/kotlin/com/flightfeather/uav/common/utils/MapUtil.kt
@@ -260,9 +260,9 @@
            val sqrtmagic = sqrt(magic);
            dlat = (dlat * 180.0) / (((a * (1 - ee)) / (magic * sqrtmagic)) * PI);
            dlng = (dlng * 180.0) / ((a / sqrtmagic) * cos(radlat) * PI);
            val mglat = Math.round((lat * 2 - lat - dlat) * 1000000) / 1000000;
            val mglng = Math.round((lng * 2 - lng - dlng) * 1000000) / 1000000;
            return mglng.toDouble() to mglat.toDouble()
            val mglat = Math.round((lat * 2 - lat - dlat) * 1000000).toDouble() / 1000000;
            val mglng = Math.round((lng * 2 - lng - dlng) * 1000000).toDouble() / 1000000;
            return mglng to mglat
        }
    }
src/main/kotlin/com/flightfeather/uav/socket/handler/UnderwayWebSocketServerHandler.kt
@@ -40,11 +40,15 @@
                // Test
                try {
                    val data = GsonUtils.parserJsonToArrayBeans(msgTxt, DataVo::class.java)
                    data.forEach {
                        realTimeExceptionAnalysisController.addOneData(
                            it.toBaseRealTimeData(BaseRealTimeData::class.java)
                        )
                    if (msgTxt == "start") {
                        realTimeExceptionAnalysisController.initTask()
                    } else {
                        val data = GsonUtils.parserJsonToArrayBeans(msgTxt, DataVo::class.java)
                        data.forEach {
                            realTimeExceptionAnalysisController.addOneData(
                                it.toBaseRealTimeData(BaseRealTimeData::class.java)
                            )
                        }
                    }
                } catch (e: Exception) {
//                    ctx?.channel()?.writeAndFlush(TextWebSocketFrame("当前为测试状态,传输的数据不是走航数据格式"))