diff --git a/src/lib/components/Map.svelte b/src/lib/components/Map.svelte
index 64216e5..6b84be9 100644
--- a/src/lib/components/Map.svelte
+++ b/src/lib/components/Map.svelte
@@ -13,6 +13,7 @@
let map: MapLibreMap;
let mapContainer: HTMLDivElement;
let markers: Marker[] = [];
+ let animatedMarker: Marker | null = null;
let mouseLat = 0;
let mouseLng = 0;
let isSelecting = false;
@@ -102,6 +103,9 @@
markers.forEach((marker) => marker.remove());
markers = [];
+ // Remove animated marker
+ removeAnimatedMarker();
+
// Remove all layers and sources related to flight paths
if (map && map.getLayer("flight-path")) {
map.removeLayer("flight-path");
@@ -132,7 +136,23 @@
el.style.backgroundSize = "100%";
el.title = title;
- const marker = new maplibregl.Marker({ element: el }).setLngLat([lng, lat]).addTo(map);
+ // Create popup with coordinates
+ const popup = new maplibregl.Popup({ offset: 25, closeButton: false }).setHTML(
+ `${title}
Lat: ${lat.toFixed(6)}
Lng: ${lng.toFixed(6)}`,
+ );
+
+ const marker = new maplibregl.Marker({ element: el })
+ .setLngLat([lng, lat])
+ .setPopup(popup)
+ .addTo(map);
+
+ // Show popup on hover
+ el.addEventListener("mouseenter", () => {
+ marker.togglePopup();
+ });
+ el.addEventListener("mouseleave", () => {
+ marker.togglePopup();
+ });
markers.push(marker);
return marker;
@@ -147,7 +167,23 @@
el.style.backgroundSize = "100%";
el.title = title;
- const marker = new maplibregl.Marker({ element: el }).setLngLat([lng, lat]).addTo(map);
+ // Create popup with coordinates
+ const popup = new maplibregl.Popup({ offset: 25, closeButton: false }).setHTML(
+ `${title}
Lat: ${lat.toFixed(6)}
Lng: ${lng.toFixed(6)}`,
+ );
+
+ const marker = new maplibregl.Marker({ element: el })
+ .setLngLat([lng, lat])
+ .setPopup(popup)
+ .addTo(map);
+
+ // Show popup on hover
+ el.addEventListener("mouseenter", () => {
+ marker.togglePopup();
+ });
+ el.addEventListener("mouseleave", () => {
+ marker.togglePopup();
+ });
markers.push(marker);
return marker;
@@ -319,6 +355,39 @@
export const getMap = () => {
return map;
};
+
+ export const updateAnimatedMarker = (lat: number, lng: number) => {
+ if (!map) return;
+
+ if (!animatedMarker) {
+ // Create animated marker
+ const el = document.createElement("div");
+ el.className = "animated-marker";
+ el.innerHTML = `
+
+ `;
+
+ animatedMarker = new maplibregl.Marker({ element: el, anchor: "center" })
+ .setLngLat([lng, lat])
+ .addTo(map);
+ } else {
+ // Update position
+ animatedMarker.setLngLat([lng, lat]);
+ }
+
+ // Pan to marker
+ map.panTo([lng, lat], { duration: 100 });
+ };
+
+ export const removeAnimatedMarker = () => {
+ if (animatedMarker) {
+ animatedMarker.remove();
+ animatedMarker = null;
+ }
+ };