сравнение TLE

This commit is contained in:
emelianov
2026-05-27 12:00:52 +03:00
parent 29c06a4c9c
commit f4014a08a1
8 changed files with 247 additions and 52 deletions
@@ -1,15 +1,13 @@
package space.nstart.pcp.pcp_request_service.controller
import ballistics.types.OrbitalPoint
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import space.nstart.pcp.pcp_request_service.service.TLEService
import space.nstart.pcp.pcp_types_lib.dto.ballistics.OrbPointDTO
import space.nstart.pcp.pcp_types_lib.dto.ballistics.TLEDTO
import space.nstart.pcp.pcp_types_lib.dto.ballistics.TlePointRequestDTO
import space.nstart.pcp.pcp_types_lib.dto.ballistics.TleRvaRequestDTO
@RestController
@@ -23,6 +21,9 @@ class TLEController {
@PostMapping("/parse")
fun orbit(@RequestBody tle : TLEDTO) = tleService.parseTLE(tle)
@PostMapping("/point")
fun point(@RequestBody req: TlePointRequestDTO) = tleService.point(req)
@PostMapping("/rva")
fun rva(@RequestBody req : TleRvaRequestDTO) = tleService.rva(req)
@@ -1,7 +1,9 @@
package space.nstart.pcp.pcp_request_service.service
import ballistics.Ballistics
import ballistics.orbitalPoints.timeStepper.TLEStepper
import ballistics.types.BallisticsError
import ballistics.types.EarthType
import ballistics.types.PPI
import ballistics.types.TLE
import ballistics.types.TLEParams
@@ -15,6 +17,7 @@ import space.nstart.pcp.pcp_request_service.configuration.CustomValidationExcept
import space.nstart.pcp.pcp_types_lib.dto.ballistics.OrbPointDTO
import space.nstart.pcp.pcp_types_lib.dto.ballistics.RadioVisibilityAreaDTO
import space.nstart.pcp.pcp_types_lib.dto.ballistics.TLEDTO
import space.nstart.pcp.pcp_types_lib.dto.ballistics.TlePointRequestDTO
import space.nstart.pcp.pcp_types_lib.dto.ballistics.TargetPositionDTO
import space.nstart.pcp.pcp_types_lib.dto.ballistics.TleRvaRequestDTO
import kotlin.math.PI
@@ -47,6 +50,37 @@ class TLEService() {
fun point(req: TlePointRequestDTO): OrbPointDTO {
val bal = Ballistics()
val tleParams = try {
bal.getTLEParams(TLE(req.tle.first, req.tle.second), req.tle.header ?: "empty")
} catch (ex: Exception) {
throw CustomValidationException("Ошибка формата TLE : ${ex.message}")
}
if (req.time < tleParams.time) {
throw CustomValidationException("Время расчета должно быть не раньше эпохи TLE ${tleParams.time}")
}
val point = try {
val stepper = TLEStepper(req.tle.first, req.tle.second, EarthType.PZ90d02)
stepper.calculate(fromDateTime(req.time))
} catch (ex: Exception) {
throw CustomErrorException("Ошибка расчета положения по TLE : ${ex.message}")
}
return OrbPointDTO(
toDateTime(point.t),
point.vit.toLong(),
point.v.x,
point.v.y,
point.v.z,
point.r.x,
point.r.y,
point.r.z
)
}
fun rva(req : TleRvaRequestDTO) : Iterable<RadioVisibilityAreaDTO> {
val bal = Ballistics()