From c2a5872d4ab060e0e19a14be271a4b50d5e6059e Mon Sep 17 00:00:00 2001 From: riku <risaku@163.com> Date: 星期一, 21 六月 2021 11:04:30 +0800 Subject: [PATCH] 1. 新增走航检测污染溯源模型逻辑 --- src/main/kotlin/com/flightfeather/uav/model/epw/WindDisWeight.kt | 18 ++++++ src/main/kotlin/com/flightfeather/uav/UAVApplication.kt | 6 - src/main/kotlin/com/flightfeather/uav/model/BaseSection.kt | 9 +++ src/main/kotlin/com/flightfeather/uav/common/utils/FileExchange.kt | 3 + src/main/kotlin/com/flightfeather/uav/model/BaseWeight.kt | 26 ++++++++ src/main/kotlin/com/flightfeather/uav/model/epw/EPWModel.kt | 38 ++++++++++++ src/main/kotlin/com/flightfeather/uav/socket/UAVByteDataDecoder.kt | 6 +- src/main/kotlin/com/flightfeather/uav/model/epw/WindDirWeight.kt | 32 ++++++++++ src/main/kotlin/com/flightfeather/uav/model/package-info.java | 5 + 9 files changed, 136 insertions(+), 7 deletions(-) diff --git a/src/main/kotlin/com/flightfeather/uav/UAVApplication.kt b/src/main/kotlin/com/flightfeather/uav/UAVApplication.kt index 0557bb3..f9023b1 100644 --- a/src/main/kotlin/com/flightfeather/uav/UAVApplication.kt +++ b/src/main/kotlin/com/flightfeather/uav/UAVApplication.kt @@ -18,12 +18,10 @@ @Autowired lateinit var electricProcessor: ElectricProcessor - private val socketServer = UnderwaySocketServer() - @Bean fun runner() = ApplicationRunner{ - socketServer.startUnderwayServer(9030, underwayProcessor) - socketServer.startElectricServer(9009, electricProcessor) + UnderwaySocketServer().startUnderwayServer(9030, underwayProcessor) + UnderwaySocketServer().startElectricServer(9009, electricProcessor) } } diff --git a/src/main/kotlin/com/flightfeather/uav/common/utils/FileExchange.kt b/src/main/kotlin/com/flightfeather/uav/common/utils/FileExchange.kt index 3c9d5fb..678ec0a 100644 --- a/src/main/kotlin/com/flightfeather/uav/common/utils/FileExchange.kt +++ b/src/main/kotlin/com/flightfeather/uav/common/utils/FileExchange.kt @@ -11,6 +11,9 @@ import java.text.SimpleDateFormat import java.util.* +/** + * 鏃犱汉鑸归噰闆嗘暟鎹牸寮忚浆鎹� + */ class FileExchange { companion object { diff --git a/src/main/kotlin/com/flightfeather/uav/model/BaseSection.kt b/src/main/kotlin/com/flightfeather/uav/model/BaseSection.kt new file mode 100644 index 0000000..01a3310 --- /dev/null +++ b/src/main/kotlin/com/flightfeather/uav/model/BaseSection.kt @@ -0,0 +1,9 @@ +package com.flightfeather.uav.model + +/** + * 缁熻鍒嗘鎴潰 + * 鍚屼竴绫诲瀷鐨勭洃娴嬪洜瀛愭寜鐓ф煇涓�灞炴�ц繘琛屽垎娈电患鍚堢粺璁★紝杈撳嚭缁熻缁撴灉锛� + * 甯歌鐨勫鎸夌収鏃堕棿杩涜鍒嗘缁熻 + */ +abstract class BaseSection { +} \ No newline at end of file diff --git a/src/main/kotlin/com/flightfeather/uav/model/BaseWeight.kt b/src/main/kotlin/com/flightfeather/uav/model/BaseWeight.kt new file mode 100644 index 0000000..247845c --- /dev/null +++ b/src/main/kotlin/com/flightfeather/uav/model/BaseWeight.kt @@ -0,0 +1,26 @@ +package com.flightfeather.uav.model + +/** + * 鏉冮噸 + * 鏌愮褰卞搷鍥犵礌鍦ㄤ笉鍚屾儏鍐典笅瀵规煇绉嶇洃娴嬫暟鎹骇鐢熺殑鏉冮噸褰卞搷 + */ +abstract class BaseWeight { + +// 鍖洪棿闃堝�� + abstract val sectionValues: List<Double> +// 鍖洪棿瀵瑰簲鏉冮噸 + abstract val weights: List<Double> + + /** + * 鏉冮噸璁$畻 + * @param value 褰卞搷鍥犵礌鐨勫�� + */ + fun weightCal(value: Double): Double { + for (i in sectionValues.indices) { + if (value < sectionValues[i]) { + return weights[i] + } + } + return weights.last() + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/flightfeather/uav/model/epw/EPWModel.kt b/src/main/kotlin/com/flightfeather/uav/model/epw/EPWModel.kt new file mode 100644 index 0000000..be8689e --- /dev/null +++ b/src/main/kotlin/com/flightfeather/uav/model/epw/EPWModel.kt @@ -0,0 +1,38 @@ +package com.flightfeather.uav.model.epw + +import com.flightfeather.uav.domain.entity.Company +import com.flightfeather.uav.lightshare.bean.DataVo +import java.math.BigDecimal + +/** + * 宸ヤ笟浼佷笟姹℃煋鏉冮噸鍒嗘瀽妯″瀷 + * 鏍规嵁璧拌埅鐩戞祴鏁版嵁锛岀粨鍚堥閫熴�侀鍚戙�佺洃娴嬬偣涓庝紒涓氱殑鐩稿浣嶇疆绛夊洜绱狅紝璁$畻浼佷笟瀵圭洃娴嬪尯鍩熺殑褰卞搷绋嬪害 + * @author riku + */ +class EPWModel { + +// private val windDirWeight = WindDirWeight() +// private val windDisWeight = WindDisWeight() + + private lateinit var datas: List<DataVo> + private lateinit var sources: List<Company> + + fun execute() { + datas.forEach d@{d -> + if (d.lng == null || d.lng == 0.0 || d.lat == null || d.lat == 0.0) { + return@d + } + + sources.forEach s@ { s -> + // 缁忕含搴︽湁鏁堟�у垽鏂� + if (s.ciLongitude == null || s.ciLongitude == BigDecimal(0) || s.ciLatitude == null || s.ciLatitude == BigDecimal(0)) { + return@s + } + + val p1 = Pair(d.lng!!, d.lat!!) + val p2 = Pair(s.ciLongitude.toDouble(), s.ciLatitude.toDouble()) +// windDirWeight.getWeight(p1, p2) + } + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/flightfeather/uav/model/epw/WindDirWeight.kt b/src/main/kotlin/com/flightfeather/uav/model/epw/WindDirWeight.kt new file mode 100644 index 0000000..16baf70 --- /dev/null +++ b/src/main/kotlin/com/flightfeather/uav/model/epw/WindDirWeight.kt @@ -0,0 +1,32 @@ +package com.flightfeather.uav.model.epw + +import com.flightfeather.uav.model.BaseWeight +import kotlin.math.PI +import kotlin.math.abs +import kotlin.math.atan2 +import kotlin.math.sqrt + +/** + * + */ +class WindDirWeight : BaseWeight() { + override val sectionValues: List<Double> = listOf(22.5, 67.5, 112.5, 157.5, 180.0) + override val weights: List<Double> = listOf(1.0, 0.8, 0.5, 0.2, 0.1) + + fun getWeight(deg: Double):Double { + return weightCal(deg) + } + + fun getWeight(p1: Pair<Double, Double>, p2: Pair<Double, Double>, wd: Int): Double { + val dx = p2.first - p1.first + val dy = p2.second - p1.second + var x1 = atan2(dy, dx) * 180 / PI + if (x1 < 0) x1 += 360 + var x2 = 270 - wd + if (x2 < 0) x2 += 360 + x1 = abs(x2 - x1) + if (x1>180) x1 = 360 - x1 + + return weightCal(x1) + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/flightfeather/uav/model/epw/WindDisWeight.kt b/src/main/kotlin/com/flightfeather/uav/model/epw/WindDisWeight.kt new file mode 100644 index 0000000..4a61f24 --- /dev/null +++ b/src/main/kotlin/com/flightfeather/uav/model/epw/WindDisWeight.kt @@ -0,0 +1,18 @@ +package com.flightfeather.uav.model.epw + +import com.flightfeather.uav.model.BaseWeight + +/** + * 椋庨�熻窛绂绘潈閲� + * 鐩戞祴鐐逛笌姹℃煋婧愪箣闂寸殑鐗╃悊璺濈涓庡綋鍓嶉閫熷緱鍑虹殑鏉冮噸 + */ +class WindDisWeight : BaseWeight() { + + override val sectionValues: List<Double> = listOf(2.0, 5.0, 8.0, 12.0, 20.0, 30.0) + override val weights: List<Double> = listOf(1.0, 0.8, 0.6, 0.5, 0.3, 0.0) + + fun getWeight(dis: Double, ws: Double): Double { + val value = dis / ws / 60 + return weightCal(value) + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/flightfeather/uav/model/package-info.java b/src/main/kotlin/com/flightfeather/uav/model/package-info.java new file mode 100644 index 0000000..5f1176f --- /dev/null +++ b/src/main/kotlin/com/flightfeather/uav/model/package-info.java @@ -0,0 +1,5 @@ +package com.flightfeather.uav.model; +/* +* 绠楁硶妯″瀷鐩稿叧 +* 鍖呮嫭姹℃煋婧簮銆佹薄鏌撻噸鐐瑰尯鍩熷垎鏋愮瓑鍔熻兘 +* */ \ No newline at end of file diff --git a/src/main/kotlin/com/flightfeather/uav/socket/UAVByteDataDecoder.kt b/src/main/kotlin/com/flightfeather/uav/socket/UAVByteDataDecoder.kt index 47017e0..9b22dbf 100644 --- a/src/main/kotlin/com/flightfeather/uav/socket/UAVByteDataDecoder.kt +++ b/src/main/kotlin/com/flightfeather/uav/socket/UAVByteDataDecoder.kt @@ -16,8 +16,8 @@ const val BASE_LENGTH = DataPackageDecoder.HEAD_BYTES + DataPackageDecoder.COMMAND_UNIT_BYTES + DataPackageDecoder.DEVICE_CODE_BYTES + DataPackageDecoder.DATA_LENGTH + DataPackageDecoder.BCC_BYTES const val HEAD1 = 0x01.toByte() - const val COMMAND_1 = 0x01.toByte() - const val COMMAND_2 = 0x01.toByte() + const val COMMAND_1 = 0x04.toByte() + const val COMMAND_2 = 0x05.toByte() const val HEAD_LENGTH = DataPackageDecoder.HEAD_BYTES + DataPackageDecoder.COMMAND_UNIT_BYTES + DataPackageDecoder.DEVICE_CODE_BYTES } @@ -46,7 +46,7 @@ val b = ByteArray(HEAD_LENGTH) it.readBytes(b) if (b[0] == HEAD1 && - (b[1] == COMMAND_1 || b[2] == COMMAND_2)) { + (b[1] == COMMAND_1 || b[1] == COMMAND_2)) { b.forEach {b -> dataList.add(b) } -- Gitblit v1.9.3