diff --git a/src/lib/telemetry.ts b/src/lib/telemetry.ts
new file mode 100644
index 0000000..fb2e525
--- /dev/null
+++ b/src/lib/telemetry.ts
@@ -0,0 +1,58 @@
+import { writable } from "svelte/store"
+import type { LatLngExpression } from "leaflet";
+
+import L from "leaflet";
+
+interface TelemetryPoint {
+ altitude: number;
+ datetime: string;
+ latitude: number;
+ longitude: number;
+ payload: string;
+}
+
+interface ParsedTelemetry {
+ flight_path: [number, number, number][];
+ launch: {
+ latlng: LatLngExpression;
+ datetime: Date;
+ };
+ datapoints: TelemetryPoint[];
+}
+
+export const latestTelemetry = writable({
+ metadata: {
+ complete_datetime: "",
+ start_datetime: ""
+ },
+ telemetry: [
+ {
+ altitude: 0.0,
+ datetime: "",
+ latitude: 0.0,
+ longitude: 0.0,
+ payload: ""
+ }
+ ]
+});
+
+export const latestTelemetryParsed = writable({} as ParsedTelemetry);
+
+export function parseTelemetry(telemetry: TelemetryPoint[]): ParsedTelemetry {
+ const flight_path: [number, number, number][] = telemetry.map((point) => [
+ point.latitude,
+ point.longitude,
+ point.altitude
+ ]);
+
+ const launch = {
+ latlng: L.latLng(telemetry[0].latitude, telemetry[0].longitude),
+ datetime: new Date(telemetry[0].datetime)
+ };
+
+ return {
+ flight_path,
+ launch,
+ datapoints: telemetry
+ };
+}
\ No newline at end of file
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
index 594580f..f961cbf 100644
--- a/src/routes/+page.svelte
+++ b/src/routes/+page.svelte
@@ -1,26 +1,7 @@
-
\ No newline at end of file
diff --git a/src/routes/Navbar.svelte b/src/routes/Navbar.svelte
index 94410b2..dab45a6 100644
--- a/src/routes/Navbar.svelte
+++ b/src/routes/Navbar.svelte
@@ -21,10 +21,10 @@
diff --git a/src/routes/TelemetryPanel.svelte b/src/routes/TelemetryPanel.svelte
new file mode 100644
index 0000000..20e9b19
--- /dev/null
+++ b/src/routes/TelemetryPanel.svelte
@@ -0,0 +1,74 @@
+
+
+
+
+ {#if !isCollapsed}
+
+ {/if}
+
+
+
diff --git a/src/routes/map.svelte b/src/routes/map.svelte
index 840212c..fecf55a 100644
--- a/src/routes/map.svelte
+++ b/src/routes/map.svelte
@@ -5,6 +5,7 @@
import { distHaversine } from '../lib/mathutil.ts';
import { latestPredictionParsed } from '../lib/prediction.ts';
+ import { latestTelemetryParsed } from '../lib/telemetry.ts';
/**
* @type {L.Map}
@@ -147,6 +148,65 @@
map.setView(launch.latlng, 8);
};
+ const plotTelemetryTrack = (telemetry) => {
+ console.log("Telemetry data parsed, creating map plot...");
+
+ // Clear existing map items
+ if (marker) {
+ map.eachLayer((layer) => {
+ if (layer instanceof L.Marker || layer instanceof L.Polyline) {
+ map.removeLayer(layer);
+ }
+ });
+ }
+
+ // Create custom icons for telemetry markers
+ const telemetryIcon = L.icon({
+ iconUrl: 'marker-sm-red.png',
+ iconSize: [10, 10],
+ iconAnchor: [5, 5],
+ });
+
+ const launchIcon = L.icon({
+ iconUrl: 'target-blue.png',
+ iconSize: [10, 10],
+ iconAnchor: [5, 5],
+ });
+
+ // Add markers to the map
+ const launchMarker = L.marker(telemetry.launch.latlng, {
+ title: `Launch (${telemetry.launch.latlng.lat.toFixed(4)}, ${telemetry.launch.latlng.lng.toFixed(4)}) at ${telemetry.launch.datetime.toUTCString()}`,
+ icon: launchIcon,
+ }).addTo(map);
+
+// interface TelemetryPoint {
+// altitude: number;
+// datetime: string;
+// latitude: number;
+// longitude: number;
+// payload: string;
+// }
+
+ // Add telemetry markers to the map
+ telemetry.datapoints.forEach((point) => {
+ const telemetryMarker = L.marker([point.latitude, point.longitude], {
+ title: `Telemetry (${point.latitude.toFixed(4)}, ${point.longitude.toFixed(4)}) at ${point.datetime}`,
+ icon: telemetryIcon,
+ }).addTo(map)
+ .bindPopup(() => {
+ return `
+ Telemetry Point
, Lat: ${point.latitude.toFixed(6)}
, Lon: ${point.longitude.toFixed(6)}
+ `;
+ });
+ });
+
+ // Add flight path polyline
+ const pathPolyline = L.polyline(telemetry.flight_path, {
+ weight: 3,
+ color: "#000000",
+ }).addTo(map);
+ };
+
diff --git a/src/routes/predict/+page.svelte b/src/routes/predict/+page.svelte
new file mode 100644
index 0000000..28445e4
--- /dev/null
+++ b/src/routes/predict/+page.svelte
@@ -0,0 +1,26 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/routes/predict/+page.ts b/src/routes/predict/+page.ts
new file mode 100644
index 0000000..b2463b2
--- /dev/null
+++ b/src/routes/predict/+page.ts
@@ -0,0 +1 @@
+export const ssr =false;
\ No newline at end of file
diff --git a/src/routes/track/+page.svelte b/src/routes/track/+page.svelte
new file mode 100644
index 0000000..29a0867
--- /dev/null
+++ b/src/routes/track/+page.svelte
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/routes/track/+page.ts b/src/routes/track/+page.ts
new file mode 100644
index 0000000..b2463b2
--- /dev/null
+++ b/src/routes/track/+page.ts
@@ -0,0 +1 @@
+export const ssr =false;
\ No newline at end of file
diff --git a/static/marker-sm-red.png b/static/marker-sm-red.png
new file mode 100644
index 0000000..62806ab
Binary files /dev/null and b/static/marker-sm-red.png differ