From 5b0d58c3f7f35f61c0a0437bac3ff708db57fe61 Mon Sep 17 00:00:00 2001 From: feiyu02 <risaku@163.com> Date: 星期四, 18 七月 2024 17:34:16 +0800 Subject: [PATCH] 1. 修正实时走航数据平滑处理算法,PM2.5、PM10、VOC采用新的修正算法 --- src/main/kotlin/com/flightfeather/uav/domain/repository/RealTimeDataRep.kt | 1 src/main/kotlin/com/flightfeather/uav/model/epw/WeightType.kt | 4 +- src/main/kotlin/com/flightfeather/uav/repository/impl/AirDataRepositoryImpl.kt | 3 + src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/ExceptionAnalysisController.kt | 2 src/main/kotlin/com/flightfeather/uav/socket/eunm/FactorType.kt | 14 +++++++ src/main/kotlin/com/flightfeather/uav/model/epw/EPWDataPrep.kt | 49 ++++++++++++++++-------- 6 files changed, 54 insertions(+), 19 deletions(-) diff --git a/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/ExceptionAnalysisController.kt b/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/ExceptionAnalysisController.kt index f7d5760..ed6c540 100644 --- a/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/ExceptionAnalysisController.kt +++ b/src/main/kotlin/com/flightfeather/uav/biz/dataanalysis/ExceptionAnalysisController.kt @@ -20,7 +20,7 @@ * 鏁版嵁寮傚父鍒嗘瀽鎺у埗鍣� */ @Component -class ExceptionAnalysisController( +class ExceptionAnalysisController( private val realTimeDataRep: RealTimeDataRep, private val locationRoadNearby: LocationRoadNearby, private val segmentInfoRep: SegmentInfoRep, diff --git a/src/main/kotlin/com/flightfeather/uav/domain/repository/RealTimeDataRep.kt b/src/main/kotlin/com/flightfeather/uav/domain/repository/RealTimeDataRep.kt index 7f573b2..b41950d 100644 --- a/src/main/kotlin/com/flightfeather/uav/domain/repository/RealTimeDataRep.kt +++ b/src/main/kotlin/com/flightfeather/uav/domain/repository/RealTimeDataRep.kt @@ -68,6 +68,7 @@ }) } } + else -> Unit } return result } diff --git a/src/main/kotlin/com/flightfeather/uav/model/epw/EPWDataPrep.kt b/src/main/kotlin/com/flightfeather/uav/model/epw/EPWDataPrep.kt index c17296d..40bfa5a 100644 --- a/src/main/kotlin/com/flightfeather/uav/model/epw/EPWDataPrep.kt +++ b/src/main/kotlin/com/flightfeather/uav/model/epw/EPWDataPrep.kt @@ -29,10 +29,7 @@ // 鍧囧�煎�嶆暟鍙傛暟 private val xratio = 3 - // 杩炵画鏁版嵁鐨勫悎鐞嗘渶澶у闀垮�嶇巼 - private val multiplier = 20 - - // 闇�瑕佸鐞嗙殑鍥犲瓙绫诲瀷 + // 闇�瑕佸钩婊戝鐞嗙殑鍥犲瓙绫诲瀷 private var calTypes = when (deviceType) { UWDeviceType.VEHICLE, UWDeviceType.UAV, @@ -41,6 +38,25 @@ UWDeviceType.GRID -> WeightType.prepFixed else -> WeightType.prepFixed } + + // 鍙渶瑕佹鏌ヨ寖鍥村拰鍙樺寲骞呭害鐨勫洜瀛愮被鍨� + private var rangeTypes = listOf( + FactorType.PM25.des, + FactorType.PM10.des, + FactorType.VOC.des + ) + + // 鏃犻渶淇鐨勫洜瀛愮被鍨� + private var noCalTypes = listOf( + FactorType.TEMPERATURE.des, + FactorType.HUMIDITY.des, + FactorType.LNG.des, + FactorType.LAT.des, + FactorType.VELOCITY.des, + FactorType.TIME.des, + FactorType.WIND_DIRECTION.des, + FactorType.HEIGHT.des + ) private val lastData = mutableListOf<DataVo>() @@ -151,26 +167,27 @@ // 鍘婚櫎鏃犳晥鍊肩殑鏍囧噯宸� val std = standardDeviation(avg.first, list, it.factorName) // 鍚堢悊鏈�澶у�� - val max = max(avg.first + std * nstd, avg.first + avg.first * xratio) + var maxValue = max(avg.first + std * nstd, avg.first + avg.first * xratio) + maxValue = max(maxValue, FactorType.getRange(it.factorName)?.second ?: .0) // 鍚堢悊鏈�灏忓�� - val min = min(avg.first - std * nstd, avg.first / (1 + xratio)) + val minValue = min(avg.first - std * nstd, avg.first / (1 + xratio)) // 鍒ゆ柇鐩戞祴鍥犲瓙鏄惁闇�瑕佽繘琛屽钩婊戝鐞嗭紝 - // 鑻ヤ笉闇�瑕侊紝鍒欏垽鏂噺绾ф槸鍚﹀湪鍚堢悊鑼冨洿鍐呬互鍙婂彉鍖栧�嶇巼鏄惁鍦ㄥ悎鐞嗚寖鍥村唴 - if (!calTypes.contains(it.factorName)) { - if (isInRange(it) != true || excessiveChange(it) == true) { - // 閲囩敤璁$畻鎵�寰楀潎鍊间唬鏇垮師濮嬪�� - it.factorData = avg.first - } - } else { + if (calTypes.contains(it.factorName)) { // 鏁版嵁涓嶅浜庡悎鐞嗚寖鍥村苟涓旀湁鏁堜釜鏁拌揪鏍囨椂锛岄噰鐢ㄨ绠楁墍寰楀潎鍊间唬鏇垮師濮嬪�� if (avg.second > max(ncal / 5, 2) - && (it.factorData!! < min || it.factorData!! > max) + && (it.factorData!! < minValue || it.factorData!! > maxValue) ) { it.factorData = avg.first } } - + // 鍒ゆ柇閲忕骇鏄惁鍦ㄥ悎鐞嗚寖鍥村唴浠ュ強鍙樺寲鍊嶇巼鏄惁鍦ㄥ悎鐞嗚寖鍥村唴 + else if (rangeTypes.contains(it.factorName)) { + if (isInRange(it) != true || excessiveChange(it) == true) { + // 閲囩敤璁$畻鎵�寰楀潎鍊间唬鏇垮師濮嬪�� + it.factorData = avg.first + } + } } } } @@ -289,6 +306,6 @@ break } } - return m > multiplier + return m > FactorType.getMultiplier(airData.factorName) } } \ No newline at end of file diff --git a/src/main/kotlin/com/flightfeather/uav/model/epw/WeightType.kt b/src/main/kotlin/com/flightfeather/uav/model/epw/WeightType.kt index 6353389..dd40a49 100644 --- a/src/main/kotlin/com/flightfeather/uav/model/epw/WeightType.kt +++ b/src/main/kotlin/com/flightfeather/uav/model/epw/WeightType.kt @@ -13,8 +13,8 @@ FactorType.O3.des, // FactorType.PM25.des, // FactorType.PM10.des, - FactorType.VOC.des, - FactorType.WIND_SPEED.des +// FactorType.VOC.des, +// FactorType.WIND_SPEED.des ) // 瀹氱偣鐩戞祴 diff --git a/src/main/kotlin/com/flightfeather/uav/repository/impl/AirDataRepositoryImpl.kt b/src/main/kotlin/com/flightfeather/uav/repository/impl/AirDataRepositoryImpl.kt index 0826636..33b0734 100644 --- a/src/main/kotlin/com/flightfeather/uav/repository/impl/AirDataRepositoryImpl.kt +++ b/src/main/kotlin/com/flightfeather/uav/repository/impl/AirDataRepositoryImpl.kt @@ -97,6 +97,7 @@ realTimeDataGridMapper.insert(d) count++ } + else -> Unit } return count } @@ -123,6 +124,7 @@ realTimeDataGridMapper.insert(d) count++ } + else -> Unit } } return count @@ -202,6 +204,7 @@ UWDeviceType.BOAT -> { } + else -> Unit } } return count diff --git a/src/main/kotlin/com/flightfeather/uav/socket/eunm/FactorType.kt b/src/main/kotlin/com/flightfeather/uav/socket/eunm/FactorType.kt index 0c934b4..5ae4e9f 100644 --- a/src/main/kotlin/com/flightfeather/uav/socket/eunm/FactorType.kt +++ b/src/main/kotlin/com/flightfeather/uav/socket/eunm/FactorType.kt @@ -152,6 +152,20 @@ else -> null } + fun getMultiplier(name: String?): Double { + getByName(name)?.let { + return getMultiplier(it) + } + return 10.0 + } + + fun getMultiplier(type: FactorType): Double = when (type) { + PM25 -> 20.0 + PM10 -> 20.0 + VOC -> 10.0 + else -> 10.0 + } + fun outputFactor(factorName: String?): Boolean { return when (factorName) { NO2.des, -- Gitblit v1.9.3