| | |
| | | @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) |
| | | } |
| | | } |
| | | |
| | |
| | | import java.text.SimpleDateFormat |
| | | import java.util.* |
| | | |
| | | /** |
| | | * æ 人è¹ééæ°æ®æ ¼å¼è½¬æ¢ |
| | | */ |
| | | class FileExchange { |
| | | |
| | | companion object { |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.flightfeather.uav.model |
| | | |
| | | /** |
| | | * ç»è®¡å段æªé¢ |
| | | * åä¸ç±»åççæµå åæç
§æä¸å±æ§è¿è¡å段综åç»è®¡ï¼è¾åºç»è®¡ç»æï¼ |
| | | * 常è§ç妿ç
§æ¶é´è¿è¡å段ç»è®¡ |
| | | */ |
| | | abstract class BaseSection { |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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() |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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) |
| | | } |
| | | } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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) |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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) |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.flightfeather.uav.model; |
| | | /* |
| | | * ç®æ³æ¨¡åç¸å
³ |
| | | * å
æ¬æ±¡ææº¯æºã污æéç¹åºååæçåè½ |
| | | * */ |
| | |
| | | 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 |
| | | } |
| | |
| | | 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) |
| | | } |