import FixePosition from "../../entities/FixePosition" import { getDistanceAndBearing } from './getDistanceAndBearing' import { FlightParser } from "../FlightParser" export default class TakeoffDetection { TAKEOFF_MIN_SPEED = 6 // km/h TAKEOFF_MIN_TIME = 5000 // ms takeoff_lat: number | null = null takeoff_lng: number | null = null first_fixe_timestamp: number = 0 achievedTakeoffSpeed = false achievedTakeoffSpeedAt = 0 takeoff_bearing: number | null = null takeoff_distance: number | null = null takeoff_time: number | null = null processFixe(fixe: FixePosition, flightParser: FlightParser) { if(this.takeoff_bearing !== null) return if(this.takeoff_lat == null && this.takeoff_lng == null) { this.takeoff_lat = fixe.latitude this.takeoff_lng = fixe.longitude this.first_fixe_timestamp = fixe.timestamp } if (fixe.speed > this.TAKEOFF_MIN_SPEED) { this.achievedTakeoffSpeed = true if(this.achievedTakeoffSpeedAt === 0) { this.achievedTakeoffSpeedAt = fixe.timestamp } if (fixe.timestamp - this.achievedTakeoffSpeedAt > this.TAKEOFF_MIN_TIME) { const { distance, bearing } = getDistanceAndBearing(this.takeoff_lat, this.takeoff_lng, fixe.latitude, fixe.longitude) this.takeoff_bearing = bearing this.takeoff_distance = distance this.takeoff_time = (fixe.timestamp - this.first_fixe_timestamp) / 1000 flightParser.takeoff_bearing = this.takeoff_bearing } } else { this.achievedTakeoffSpeed = false this.achievedTakeoffSpeedAt = 0 } } }