41 lines
992 B
TypeScript
41 lines
992 B
TypeScript
import type { LatLngTuple } from './geo';
|
|
import type { Point } from './prediction';
|
|
|
|
export interface TelemetryPoint {
|
|
altitude: number;
|
|
datetime: string;
|
|
latitude: number;
|
|
longitude: number;
|
|
payload: string;
|
|
}
|
|
|
|
export interface TelemetryMetadata {
|
|
complete_datetime: string;
|
|
start_datetime: string;
|
|
}
|
|
|
|
export interface RawTelemetry {
|
|
metadata: TelemetryMetadata;
|
|
telemetry: TelemetryPoint[];
|
|
}
|
|
|
|
export interface Telemetry {
|
|
flight_path: LatLngTuple[];
|
|
launch: Point;
|
|
datapoints: TelemetryPoint[];
|
|
}
|
|
|
|
export function parseTelemetry(points: TelemetryPoint[]): Telemetry {
|
|
if (points.length === 0) {
|
|
throw new Error('Telemetry requires at least one datapoint');
|
|
}
|
|
|
|
const flight_path: LatLngTuple[] = points.map((p) => [p.latitude, p.longitude, p.altitude]);
|
|
|
|
const launch: Point = {
|
|
latlng: { lat: points[0].latitude, lng: points[0].longitude, alt: points[0].altitude },
|
|
datetime: new Date(points[0].datetime),
|
|
};
|
|
|
|
return { flight_path, launch, datapoints: points };
|
|
}
|